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?Odpowiedzi:
05AB1E , 40 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
Python 2 , 123 bajty
Wypróbuj online!
Python 2 , mniej parsowania danych wejściowych, 123 bajty
Wypróbuj online!
źródło
,
.JavaScript (ES6),
121119118112 bajtówZwraca ciąg rozdzielany spacjami ze spacją końcową.
W jaki sposób?
Podzieliliśmy wejście do a , b i c . Ponieważ gwarantowana jest poprawność daty, wiemy na pewno, że b jest mniejsze niż 32. Dlatego wystarczy sprawdzić, czy a jest mniejsze niż 13, aby sprawdzić poprawność formatu mid-endian. Formaty Little-Endian i Big-Endian wymagają, aby wartość b była mniejsza niż 13 oraz kolejny test odpowiednio na a i c, aby sprawdzić poprawność dnia.
Stąd 3 testy:
Przypadki testowe
Pokaż fragment kodu
źródło
Bash,
240125116112 bajtówGrał w golfa
Dzięki manatwork za kilka wskazówek
Zapisano 9 bajtów, usuwając weryfikację dla mniej niż 32 w środkowej części kraju po odpowiedzi Arnaulda
Zapisano 4 bajty, używając różnych zmiennych zamiast tablicy
Sprawdź to!
źródło
C #, 180 bajtów
Dane wyjściowe z wartościami oddzielonymi spacjami mogą mieć także spacje początkowe i końcowe. W razie potrzeby zaktualizuje się, gdy PO wyjaśni to w tym punkcie.
Wersja pełna / sformatowana:
źródło
No leading or trailing characters others than a trailing space are allowed
PHP, 151 bajtów
Przypadki testowe
źródło
Partia, 138 bajtów
Niejasne na podstawie odpowiedzi @ ovs.
źródło
Java 232 bajty
Oto ładniejsza wersja
Naprawdę nie wiedziałem, jak sformatować tę część ...
źródło
String e="-endian",b="big"+e,m="middle"+e,l="little"+e;
.PHP, 131 bajtów
źródło