Teraz, kiedy jest rok 2015, a garść odpowiedzi z zeszłorocznej układanki zaczyna przynosić nieprawidłowe wyniki , czas na pytanie dotyczące liczby 2015.
Z wyjątkiem ... dlaczego? Czy nie spodobałoby Ci się, gdyby twoje oparte na dacie odpowiedzi na problem z zeszłego roku pozostały aktualne? Dlaczego nie zmienimy naszego kalendarza, aby nigdy nie był 2015, i po prostu nadal będziemy żyć w 2014 roku, na zawsze i na zawsze?
Zdefiniujmy nowy zapis daty, zwany zapisem Eternal 2014 , w następujący sposób:
- W przypadku dat 2014 i wcześniejszych daty będą takie same, jak w proleptycznym kalendarzu gregoriańskim .
- W przypadku dat w latach 2015 i później rok pozostanie 2014, a miesiąc będzie liczbą, która byłaby, gdyby ten sam cykl miesiąca w 2014 r. Trwałby wiecznie po 12. miesiącu. Tak też
2015-02-08
będzie2014-14-08
i2020-12-31
będzie2014-85-02
. Należy pamiętać, że dni przestępne nie są uwzględniane, ponieważ rok 2014 nie jest rokiem przestępnym.
Twoim zadaniem jest zbudowanie programu lub funkcji, która przyjmie astronomiczną datę juliańską jako dane wejściowe i zwróci ciąg znaków z datą odpowiadającą dacie juliańskiej w zapisie Eternal 2014, w jednym YYYY-MM-DD
lub w dowolnym DD/MM/YYYY
formacie.
Możesz założyć, że wprowadzony dzień juliański będzie zawsze liczbą całkowitą od 1721426
(1 stycznia 1) do 2914695
(23 stycznia 3268) włącznie. Lata mogą zawierać wiodące zera do uzupełnienia do 4 cyfr lub nie, ale miesiące i dni muszą zawsze mieć zera wiodące do uzupełnienia do dwóch cyfr (a lata mogą nie zawierać zer wiodących do uzupełnienia do dowolnej liczby cyfr innej niż 4).
Oto kilka przykładowych danych wejściowych i ich danych wyjściowych we wszystkich dopuszczalnych formatach:
> 1721426
1-01-01
01/01/1
0001-01-01
01/01/0001
> 2086302
999-12-31
31/12/999
0999-12-31
31/12/0999
> 2456659
2014-01-01
01/01/2014
> 2456789
2014-05-11
11/05/2014
> 2457024
2014-13-01
01/13/2014
> 2457389
2014-25-01
01/25/2014
> 2469134
2014-411-07
07/411/2014
> 2567890
2014-3657-29
29/3657/2014
> 2914695
2014-15059-23
23/15059/2014
Nie możesz używać żadnych wbudowanych bibliotek przetwarzania danych w swoim języku. Wszystkie obliczenia muszą być wykonywane algorytmicznie w samym kodzie źródłowym programu.
Wygrywa najkrótszy program (w bajtach) do osiągnięcia tego w dowolnym języku.
Odpowiedzi:
Python 2, 166 bajtów
Cykl ten odbywa się codziennie od 1 stycznia 1 (1721426) do określonej daty, zwiększając bieżący dzień, miesiąc i rok w miarę upływu czasu. Ostatni przypadek testowy zajmuje około sekundy na moim komputerze.
Dane wyjściowe są drukowane w drugim formacie:
źródło
Struś 0,5.0 , 197 bajtów
Niegolfowane (ha):
Jestem ... naprawdę wyczerpany całym szczęściem noworocznym, a co nie. Właśnie dlatego tak dużo nie grałem w golfa. Mogę, ale nie muszę wrócić, aby później to poprawić.
Algorytm z https://en.wikipedia.org/wiki/Julian_day#Gregorian_calendar_from_Julian_day_number
źródło
PHP (278)
Uruchom w linii poleceń za pomocą
php -R '<code>'
. (Flaga liczy się jako jeden znak.)Bardziej czytelna wersja (uruchom przy użyciu nazwy pliku i bez
-R
):źródło
C (rodzaj ... gcc na to pozwala) 183
Wiele ostrzeżeń za niestandardowość i prawdopodobnie niewiarygodne, ale dzisiaj działa na moim komputerze.
Używa tego samego algorytmu co odpowiedź Python 2 autorstwa @grc
Dane wyjściowe po kompilacji to
źródło