In seiner xkcd über das ISO 8601 Standard-Datumsformat schlich sich Randall in eine eher kuriose alternative Notation:
Bei den großen Zahlen handelt es sich um alle Ziffern, die im aktuellen Datum in der üblichen Reihenfolge angezeigt werden, und bei den kleinen Zahlen handelt es sich um auf 1 basierende Indizes für das Vorkommen dieser Ziffer. So stellt das obige Beispiel dar 2013-02-27
.
Definieren wir eine ASCII-Darstellung für ein solches Datum. Die erste Zeile enthält die Indizes 1 bis 4. Die zweite Zeile enthält die "großen" Ziffern. Die dritte Zeile enthält die Indizes 5 bis 8. Befinden sich in einem Slot mehrere Indizes, werden diese vom kleinsten zum größten Index nebeneinander aufgeführt. Befinden sich höchstens m
Indizes in einem einzelnen Slot (dh auf derselben Ziffer und in derselben Zeile), sollte jede Spalte m+1
Zeichen breit und linksbündig sein:
2 3 1 4
0 1 2 3 7
5 67 8
Siehe auch die Begleitherausforderung für die umgekehrte Konvertierung.
Die Herausforderung
Geben Sie bei einem ISO 8601-Datum ( YYYY-MM-DD
) die entsprechende xkcd-Datumsnotation aus.
Sie können ein Programm oder eine Funktion schreiben, indem Sie eine Eingabe über STDIN (oder die nächstgelegene Alternative), ein Befehlszeilenargument oder ein Funktionsargument vornehmen und das Ergebnis über STDOUT (oder die nächstgelegene Alternative), einen Funktionsrückgabewert oder einen Funktionsparameter (out) ausgeben.
Jedes Jahr von 0000
bis 9999
ist eine gültige Eingabe.
Nachgestellte Leerzeichen sind zulässig, führende Leerzeichen nicht. Optional können Sie eine einzelne nachgestellte Newline ausgeben.
Es gelten die Standardregeln für Code-Golf .
Testfälle
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,
200,195,189,178,162157 Zeichen(156 Zeichen Code + 1 Zeichen Befehlszeilenoption)
Probelauf:
quelle
Python 2.7,
308310 BytesWow, die Reparatur hat nur 2 Bytes gekostet!
Das Datum muss nicht getrennt werden, das Datum kann beliebig lang sein, es muss kein Datum sein, es kann eine beliebige Zeichenfolge sein (Bindestriche werden jedoch entfernt). Der Mittelteil sieht für mich ganz gut aus.
quelle
C # 456
Golf gespielt:
Ungolfed:
quelle
Perl6, 265 Bytes
Golf gespielt
Ungolfed (leicht)
quelle
Python 3, 306 Bytes
Ich untersuche Möglichkeiten, um vor dem Zusammenstellen der oberen und unteren Zeilen die maximale Breite einer bestimmten Spalte zu bestimmen. Sobald ich das habe, sollte es mir möglich sein, die Leerzeichen direkt in die Zeilen zu integrieren, anstatt all diese
join
Funktionen zu verwenden.quelle
''.join
in einer Variablen speichern ?''.join(...)
als behandelt habejoin('',...)
, was stattdessen als Funktion "gerettet" werden müsste.+=[i]
kann sein+=i,
.return '\n'
->return'\n'
.Powershell,
174170168167 BytesWeniger Golf-Testskript:
Ausgabe (nur vertikale Balken, um nachfolgende und führende Leerzeichen anzuzeigen):
quelle