Défi
Votre tâche consiste à afficher l'heure (en 12 heures) dans l'ascii art.
Tous les caractères qui seront utilisés sont les suivants:
___ __ ___ ____ _ _ _____ __ ______
/ _ \ /_ | |__ \ |___ \ | || | | ____| / / |____ |
| | | | | | ) | __) | | || |_ | |__ / /_ / /
| | | | | | / / |__ < |__ _| |___ \ | '_ \ / /
| |_| | | | / /_ ___) | | | ___) | | (_) | / /
\___/ |_| |____| |____/ |_| |____/ \___/ /_/
___ ___
/ _ \ / _ \ _
| (_) | | (_) | __ _ _ __ _ __ _ __ (_)
> _ < \__, | / _` | ' \ | '_ \ ' \ _
| (_) | / / \__,_|_|_|_| | .__/_|_|_| (_)
\___/ /_/ |_|
(Pour chaque numéro / symbole individuellement, consultez cet essentiel ).
Vous recevrez une entrée dans un tableau du formulaire:
[hours, minutes, 'am/pm']
. Par exemple,[4, 57, 'am']
avec des guillemets simples utilisés uniquement pour am / pm- ou
"hours-minutes-am/pm"
. Par exemple,"4-56-am"
- ou
[hours, 'minutes', 'am/pm']
pour les langues qui ne peuvent pas gérer les zéros non significatifs sur les nombres. Par exemple,[4, '07', 'am']
Vous pouvez utiliser l'une ou l'autre méthode d'entrée.
La sortie sera sous la forme 1 2 : 5 9 am
, où il y a un espace initial, deux espaces entre chaque numéro (dans l'essentiel, chaque numéro a déjà un espace de chaque côté), un espace entre: (deux points) et les nombres voisins, et un espace entre le dernier numéro et am/pm
, avec une nouvelle ligne facultative de début et / ou de fin. Tous les espaces se trouvent entre le point le plus à droite du symbole à gauche et le point le plus à gauche du symbole à droite.
La sortie implicite est autorisée.
La taille d'octet la plus basse gagne.
Le am/pm
doivent être alignés de telle sorte que le fond de l' p
en pm
est aligné avec le fond du reste de la sortie, qui est, le undercore désignant la partie supérieure de am/pm
commence à la troisième ligne (sans compter un premier saut de ligne).
Les deux points doivent être alignés de telle sorte que son premier caractère (un trait de soulignement) commence sur la deuxième ligne vers le bas (sans compter un saut de ligne).
Pour minutes < 10
, affichez les minutes avec un interligne 0
(vous devriez le recevoir dans l'entrée). Par exemple, [8, 04, 'pm']
-> 8 : 0 4 pm
.
Vous ne devez pas récupérer les données des numéros dans une bibliothèque ou une ressource externe. Toutes les données doivent être contenues dans le programme.
Par exemple, pour l'entrée [12, 47, 'am']
, la sortie serait la suivante:
__ ___ _ _ ______
/_ | |__ \ _ | || | |____ |
| | ) | (_) | || |_ / / __ _ _ __
| | / / _ |__ _| / / / _` | ' \
| | / /_ (_) | | / / \__,_|_|_|_|
|_| |____| |_| /_/
(Si vous voyez des cas de bord dont vous ne pouvez pas décider quoi faire, veuillez poster dans les commentaires et je les ajouterai aux exemples).
Réponses:
Perl,
592579540522510 octetsSous un secteur!
Ce programme attend l'heure au 2ème format ( "12-34-am" ) comme argument de ligne de commande.
Commenté:
Notez qu'en raison de problèmes de codage des caractères, lorsque vous collez le code ci-dessus dans un fichier, la sortie peut être quelque peu malformée. Voici donc la version golf, codée en base 64. Copiez-le et collez-le dans
base64 -d > 510.pl
:Voici la police que j'utilise. J'ai espacé les glyphes de 12 caractères (la taille du matin / après-midi) pour une indexation facile.
Cette police fait 592 octets.
L'approche précédente utilisait quelques variations sur la compression RLE pour la réduire à 353 octets, au prix d'un code de décompression de 78 octets.
Le codage Huffman comprime la police à 221 octets au prix de 154 octets pour l'algorithme de décompression.
la source
Bash + Utilitaires GNU + figlet , 134
Je ne sais pas si le figlet est autorisé ou non, mais il semble fournir les bonnes polices -
big
pour les chiffres etsmall
pour le:
et{a,p}m
:Le reste obtient simplement les bonnes informations
date
et à mélanger le formatage pour qu'il soit correct:Figlet peut être installé sur Ubuntu avec
sudo apt-get install figlet
.la source
C ++, 938 octets
Version révisée avec une compression de base des données d'entrée: testez ici
la source
Haskell,
932699 octetsOui, moins de 700 octets !!
Assez peu golfé
Comment ça fonctionne
(C'est surtout comment fonctionne le programme non golfé)
clock
prend un tuple du temps et renvoie une chaîne.m
est la minute actuelle avec le début0
ajouté s'il l'est<10
.hm
correspond aux heures et minutes jointes à a:
. La dernière chose qu'il fait est de transposer la sortie.Assez simple ici.
digit
est une fonction qui mappe les caractères aux emplacements de la chaîne stockée.Ceci est la chaîne magique stockée.
Le seul véritable changement entre les programmes golfés et non golfés est que le programme golfé ajoute une certaine compression de chaîne en remplaçant certains modèles de caractères communs par
!@$
. La chaîne de données d'origine était en667
octets, après la compression de remplacement, elle est réduite en390
octetsla source
JavaScript (ES6),
994985 octetsTerrible tentative avec des données brutes non compressées du tout, et une méthode très collante pour la sortie.
Mais bon ... ce n'est que ma deuxième réponse codegolf!
Ancienne soumission (994 octets) :
Divisez-vous en lignes pour en faciliter la lecture.
Fondamentalement:
la source
Python 3,
10851072 octetsGolfé
Non golfé
la source