Biorąc pod uwagę datę zapisaną w dowolnym (musi obsłużyć wszystko w tym samym programie) następujących formatów, parsuj ją w poprawny yyyy/mm/dd date
.
17th May 2012
March 14th, 2016
20 February 2014
September 14, 2017
Sunday, June 8, 2015
Zasady
- Daty czasami są nieprawidłowe, tj. niepoprawny dzień miesiąca lub liczby miesięcy w roku, musisz obsłużyć oba przypadki. Albo przez pomyłkę, albo przez zwrócenie stałej wartości falsey, wybierasz. (Będą jednak trzymać się powyższych formatów szablonów)
- Aby utworzyć dwucyfrowe wyjście, należy użyć wypełnienia dla dni i miesięcy krótszych niż 10.
- Nazwy miesięcy zawsze będą pełnym imieniem, a nie skrótem do ich trzech postaci.
- Możesz założyć, że rok będzie zawsze mieścić się w przedziale 0000-9999.
- Liczb ujemnych nie trzeba traktować.
- Możesz utworzyć pełny program lub funkcję, aby dane wyjściowe mogły być w dowolnym formacie, wydrukowane na konsoli lub zwrócone z funkcji.
- Dane wejściowe zawsze będą ciągiem, dane wyjściowe zawsze muszą być ciągiem, jeśli skraca to przyjmowanie go jako pojedynczego argumentu w tablicy np.
["17th May 2012"]
możesz to zrobić, a wynik może być taki sam["2012/05/17"]
- Możesz założyć, że pisownia w danych wejściowych będzie poprawna.
BONUS: bo kto tu nie lubi wyzwania;)
Jeśli potrafisz również zezwolić na formaty wejściowe The Fourteenth of March, 2016
lub March the Fourteenth, 2016
możesz usunąć dodatkowe 20 bajtów z kodu, przy czym końcowy bajt będzie mniejszy niż 1, co da 1.
Oto pełne zapisane liczby dla każdego dnia, aby uniknąć pomyłek w pisowni.
First, Second, Third, Fourth, Fifth, Sixth, Seventh, Eighth, Nineth, Tenth, Eleventh, Twelfth, Thirteenth, Fourteenth, Fifteenth, Sixteenth, Seventeenth, Eighteenth, Nineteenth, Twentieth, Twenty First, Twenty Second, Twenty Third, Twenty Fourth, Twenty Fifth, Twenty Sixth, Twenty Seventh, Twenty Eighth, Twenty Nineth, Thirtieth, Thirty First
Przypadki testowe
INPUT | Output
17th May 2012 | 2012/05/17
March 14th, 2016 | 2016/03/14
20 February 2014 | 2014/02/20
September 14, 2017 | 2017/09/14
Sunday, June 8, 2015 | 2015/06/08
1st January 1918 | 1918/01/01
The Fourteenth of March, 2016 | 2016/03/14
March the Fourteenth, 2016 | 2016/03/14
November the Seventeenth, 2019 | 2019/11/17
The Thirtieth of April, 2016 | 2016/04/30
30 February 2014 | Invalid
September 99, 2017 | Invalid
Sunday, June8, 2015 | Invalid
The Thirty First of April, 2016 | Invalid
20 February 2014
są domyślne obsługiwane w wielu Date-parserami, ale 17th
i Sunday, June 8, 2015
są nieco trudniejsze do analizy (w zależności od języka).
Thursday, August 25, 2017
ważny? Widzę zgłoszenia ignorujące DOW.