W swoim xkcd na temat standardowego formatu daty ISO 8601 Randall napisał dość dziwną alternatywną notację:
Duże liczby to wszystkie cyfry, które pojawiają się w bieżącej dacie w ich zwykłej kolejności, a małe liczby są 1-wskaźnikowymi wskaźnikami występowania tej cyfry. Powyższy przykład reprezentuje 2013-02-27
.
Zdefiniujmy reprezentację ASCII dla takiej daty. Pierwszy wiersz zawiera indeksy od 1 do 4. Drugi wiersz zawiera „duże” cyfry. Trzeci wiersz zawiera indeksy od 5 do 8. Jeśli w jednym gnieździe znajduje się wiele indeksów, są one wymienione obok siebie, od najmniejszej do największej. Jeśli m
w jednym polu jest co najwyżej indeks (tj. Na tej samej cyfrze i w tym samym rzędzie), każda kolumna powinna mieć m+1
szerokość znaków i wyrównanie do lewej:
2 3 1 4
0 1 2 3 7
5 67 8
Zobacz także wyzwanie towarzyszące dla odwrotnej konwersji.
Wyzwanie
Biorąc pod uwagę datę ISO 8601 ( YYYY-MM-DD
), wypisz odpowiedni zapis daty xkcd.
Możesz napisać program lub funkcję, pobierając dane wejściowe przez STDIN (lub najbliższą alternatywę), argument wiersza poleceń lub argument funkcji i wypisując wynik przez STDOUT (lub najbliższą alternatywę), wartość zwracaną funkcji lub parametr funkcji (wyjściowej).
Dowolny rok od 0000
do 9999
jest prawidłowym wprowadzeniem.
Spacje końcowe są dozwolone, spacje wiodące nie. Opcjonalnie możesz wypisać jeden końcowy znak nowej linii.
Obowiązują standardowe zasady gry w golfa .
Przypadki testowe
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
Rubinowy,
200195189178162157 znaków(Kod 156 znaków + opcja wiersza poleceń 1 znak)
Przykładowy przebieg:
źródło
Python 2.7,
308310 bajtówWow, naprawienie go kosztowało tylko 2 bajty!
Data nie musi być rozdzielana, data może mieć dowolną długość, nie musi być datą, może być dowolnym ciągiem znaków (ale myślniki są usuwane). Środkowa część wygląda dla mnie całkiem golfowo.
źródło
C #, 456
Gra w golfa:
Nie golfowany:
źródło
Perl6, 265 bajtów
Grał w golfa
Nie golfowy (lekko)
źródło
Python 3, 306 bajtów
Badam sposoby ustalenia, przed złożeniem górnej i dolnej linii, jaka będzie maksymalna szerokość dowolnej kolumny. Gdy już to uzyskam, powinienem być w stanie budować spacje bezpośrednio w liniach zamiast korzystać ze wszystkich tych
join
funkcji.źródło
''.join
do zmiennej?''.join(...)
jakojoin('',...)
, który zamiast tego należałoby „zapisać” jako funkcję.+=[i]
może być+=i,
.return '\n'
->return'\n'
.PowerShell,
174170168167 bajtówSkrypt testu mniej golfowego:
Dane wyjściowe (tylko pionowe paski, aby zobaczyć spacje końcowe i początkowe):
źródło