W przypadku kalendarzy gregoriańskich format daty różni się w zależności od kraju. Rozpoznawane są trzy główne formaty:
YY-MM-DD
(big-endian)DD-MM-YY
(little-endian)MM-DD-YY
(środkowy endian)
Twoim zadaniem jest napisanie programu, który podając ciąg wejściowy reprezentujący datę, wypisze wszystkie możliwe formaty daty, dzięki którym ten ciąg może być interpretowany jako data.
Zasady
- Data wprowadzenia ma format
xx-xx-xx
, w którym każde pole składa się z dwóch cyfr i jest uzupełnione zerami. - Data jest zawsze ważna (więc nie możesz dostać rzeczy takich jak 14-13-17)
- Data jest zawsze co najmniej jednym z powyższych formatów (więc nie można uzyskać rzeczy takich jak 17-14-11)
- Ponieważ w rzeczywistości jesteśmy w świecie równoległym, na każdy miesiąc roku przypada 31 dni , a zatem nie ma lat przestępnych
- Data jest między 01 stycznia 2001 a 31 grudnia 2099
- Jeśli data ma tylko jeden format, kod musi wydrukować tylko ją (dozwolone są tylko znaki nowej linii)
- Jeśli data ma kilka formatów, muszą być one oddzielone przecinkiem, spacją, znakiem nowej linii lub kombinacją tych
- Musisz podać dokładne nazwy formatów. Używanie odrębnych dowolnych wartości jest niedozwolone.
- Żadne wiodące lub końcowe znaki inne niż końcowe miejsce są niedozwolone
- Dane wyjściowe muszą być małe
- Nie możesz używać żadnych wbudowanych funkcji daty ani kalendarza
- Formaty wyjściowe nie muszą być sortowane
Przykłady
Input Output
30-05-17 big-endian, little-endian
05-15-11 middle-endian
99-01-02 big-endian
12-11-31 big-endian, little-endian, middle-endian
02-31-33 middle-endian
To jest golf golfowy, więc wygrywa najkrótszy kod w bajtach. Wyjaśnienia są zachęcane.
there are 31 days for every month of the year, and consequently no leap years
Czy to oznacza, że jakakolwiek biblioteka dat jest do tego bezużyteczna?