In seiner xkcd über das ISO 8601 Standard-Datumsformat schlich sich Randall in eine eher kuriose alternative Notation:
Die großen Zahlen sind alle Ziffern, die im aktuellen Datum in der üblichen Reihenfolge angezeigt werden, und die kleinen Zahlen sind 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 Datum in der xkcd-Notation das entsprechende ISO 8601-Datum aus ( YYYY-MM-DD
).
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.
Sie können davon ausgehen, dass die Eingabe ein beliebiges gültiges Datum zwischen Jahren 0000
und 9999
einschließlich ist.
Die Eingabe enthält keine führenden Leerzeichen. Sie können jedoch davon ausgehen, dass die Zeilen mit Leerzeichen zu einem Rechteck aufgefüllt sind, das höchstens eine nachgestellte Spalte mit Leerzeichen enthält.
Es gelten die Standardregeln für Code-Golf .
Testfälle
2 3 1 4
0 1 2 3 7
5 67 8
2013-02-27
2 3 1 4
0 1 2 4 5
5 67 8
2015-12-24
1234
1 2
5678
2222-11-11
1 3 24
0 1 2 7 8
57 6 8
1878-02-08
2 4 1 3
0 1 2 6
5 678
2061-02-22
1 4 2 3
0 1 2 3 4 5 6 8
6 5 7 8
3564-10-28
1234
1
5678
1111-11-11
1 2 3 4
0 1 2 3
8 5 6 7
0123-12-30
1
ist oben 2
, also ist die erste Ziffer 2
. 2
ist oben 0
, also ist die zweite Ziffer 0
. 3
ist oben 1
, 4
ist oben 3
, so dass wir 2013
als die ersten vier Ziffern erhalten. Jetzt 5
ist unten 0
, also ist die fünfte Ziffer 0
, 6
und 7
beide sind unten 2
, also sind diese beiden Ziffern 2
. Und schließlich 8
ist unten 7
, so ist die letzte Ziffer 8
, und wir enden mit 2013-02-27
. (Die Bindestriche sind in der xkcd-Notation enthalten, da wir wissen, an welchen Positionen sie angezeigt werden.)