Dans son xkcd sur le format de date standard ISO 8601, Randall s'est glissé dans une notation alternative plutôt curieuse:
Les grands nombres sont tous les chiffres qui apparaissent dans la date actuelle dans leur ordre habituel, et les petits nombres sont des indices basés sur 1 des occurrences de ce chiffre. Donc l'exemple ci-dessus représente 2013-02-27
.
Définissons une représentation ASCII pour une telle date. La première ligne contient les indices 1 à 4. La deuxième ligne contient les "gros" chiffres. La troisième ligne contient les indices 5 à 8. S'il y a plusieurs indices dans un même emplacement, ils sont répertoriés côte à côte du plus petit au plus grand. S'il y a au plus des m
indices dans un seul emplacement (c'est-à-dire sur le même chiffre et dans la même ligne), alors chaque colonne doit avoir des m+1
caractères larges et alignés à gauche:
2 3 1 4
0 1 2 3 7
5 67 8
Voir également le défi compagnon pour la conversion opposée.
Le défi
Étant donné une date ISO 8601 ( YYYY-MM-DD
), affichez la notation de date xkcd correspondante.
Vous pouvez écrire un programme ou une fonction, en prenant une entrée via STDIN (ou l'alternative la plus proche), un argument de ligne de commande ou un argument de fonction et en sortant le résultat via STDOUT (ou l'alternative la plus proche), la valeur de retour de la fonction ou le paramètre de la fonction (out).
Toute année de 0000
à 9999
est une entrée valide.
Les espaces de fin sont autorisés, les espaces de début ne le sont pas. Vous pouvez éventuellement générer une seule nouvelle ligne de fin.
Les règles de code-golf standard s'appliquent.
Cas de test
2013-02-27
2 3 1 4
0 1 2 3 7
5 67 8
2015-12-24
2 3 1 4
0 1 2 4 5
5 67 8
2222-11-11
1234
1 2
5678
1878-02-08
1 3 24
0 1 2 7 8
57 6 8
2061-02-22
2 4 1 3
0 1 2 6
5 678
3564-10-28
1 4 2 3
0 1 2 3 4 5 6 8
6 5 7 8
1111-11-11
1234
1
5678
0123-12-30
1 2 3 4
0 1 2 3
8 5 6 7
Ruby,
200195189 189178162157 157 caractères(Code de 156 caractères + option de ligne de commande de 1 caractère)
Exemple d'exécution:
la source
Python 2.7,
308310 octetsWow, le réparer n'a coûté que 2 octets!
La date ne doit pas être séparée, la date peut être de n'importe quelle longueur, elle ne doit pas être une date, il peut s'agir de n'importe quelle chaîne (mais les tirets sont supprimés). La partie centrale me semble assez jouable au golf.
la source
C #, 456
Golfé:
Non golfé:
la source
Perl6, 265 octets
Golfé
Non golfé (légèrement)
la source
Python 3, 306 octets
J'étudie les moyens de déterminer, avant d'assembler les lignes du haut et du bas, quelle sera la largeur maximale d'une colonne donnée. Une fois que j'aurai cela, je devrais être capable de construire les espaces dans les lignes directement au lieu d'utiliser toutes ces
join
fonctions.la source
''.join
dans une variable?''.join(...)
tant quejoin('',...)
, ce qui devrait plutôt être «enregistré» en tant que fonction.+=[i]
possible+=i,
.return '\n'
->return'\n'
.Powershell,
174170168167 167 octetsScript de test moins golfé:
Sortie (barres verticales uniquement pour voir les espaces de fin et de début):
la source