Zadanie
Napisz program lub funkcję, która oblicza nazwę dnia tygodnia podaną przez użytkownika.
Wejście wyjście
Wejściowy jest ciągiem YYYYMMDD
.
Przykład wartości wejściowych:
20110617: 17 czerwca 2011 r 19040229: 29 lutego 1904 r 06661225: 25 grudnia 666 00000101: 1 stycznia 0 99991231: 31 grudnia 9999
Możesz założyć, że wszystkie dane wejściowe są prawidłowe. Pamiętaj, że rok zero jest ważny.
Dane wyjściowe to liczba całkowita pomiędzy 0
i 6
. Każda liczba całkowita reprezentuje nazwę dnia tygodnia. Możesz swobodnie decydować, która liczba całkowita reprezentuje nazwę dnia tygodnia, taką jak ta
0: poniedziałek 1: wtorek 2: środa ... 6: niedziela
(w kolejności) lub ten
0: poniedziałek 1: środa 2: niedziela ... 6: sobota
(nie w porządku).
Przypadki testowe
Dane wyjściowe z dnia tygodnia (w tym przykładzie użyto [0..6 -> poniedziałek.. niedziela).) 20110617 piątek 4 19500101 niedziela 6 22220202 Sobota 5 19000228 Środa 2 19000301 Czwartek 3 19450815 Środa 2 19040229 Poniedziałek 0 19040301 Wtorek 1 17760704 Czwartek 3 20000228 poniedziałek 0 20000229 Wtorek 1 20000301 Środa 2 20121223 niedziela 6 00000401 Sobota 5 66660606 Środa 2 59161021 Sobota 5
Ograniczenie
Nie wolno używać żadnych funkcji / klas / ..., które są związane ze znacznikiem czasu lub datą, takich jak Date
klasa w Java
/ JavaScript
/ ActionScript
lub getdate
funkcja w PHP
.
Powinieneś używać kalendarza gregoriańskiego , z którego korzysta obecnie wiele osób.
Oczywiście, najkrótszy kod wygrywa. Jeśli dwa kody mają tę samą długość, wygrywa kod z najwyższą liczbą głosów.
(Due: Gdy jest więcej niż 5 kodów, które mają więcej niż (lub równe) +1
głosów).
echo 4
.Odpowiedzi:
Ruby,
9592 znakówProsta implementacja ruby z 0: poniedziałek, ...
źródło
PHP -
10197103125 znakówKod
Uwaga
Niestety, ze względu na dynamiczne, słabe pisanie w PHP, algorytm Sakamoto nie działa poprawnie bez wyraźnego podziału każdej operacji dzielenia.
źródło
y+y/4-y/100+y/400
.y=4
w takim przypadku zwraca 4, zamiast prawidłowego 5 zy+y/4+y/100+y/400
(gdzie tylko dwa pierwsze warunki wchodzą w grę). Właśnie to nęka moją odpowiedź JavaScript. Czy to możliwe, że tworzone są podwójne zamiast ints? (Mój PHP jest zbyt słaby, aby wiedzieć.)C - 129
To narusza sposób, w jaki podział zaokrągla się do zera, przynajmniej w moim systemie (Linux x86).
Stała magiczna
86400
służy dwóm celom:Zdarza się również, że jest to liczba sekund w ciągu dnia.
źródło
y+=m>2;
zamiastm>2?y++:0;
i zgol kilka bajtów.JavaScript,
126123 znakówUżywanie algorytmu Sakamoto z 0 = niedziela:
Podejrzewam, że podziały mogą się zawalić, ale teraz tego nie widzę.
Edycja: Poprawiono podziały (nie trzeba,
~~
kiedy możesz po prostu~
).źródło
Python 2 ,
83116113109 bajtówImplementuje algorytm Sakamoto . Sugestie dotyczące gry w golfa mile widziane. Wypróbuj online!
Edycja:
Powinienem to naprawić przed wiekami.-6 bajtów z sugestii Jonathana Allana +2 bajty do faktycznego naprawienia kodu.źródło
int('032503514624'[m-1])
ratuje 6Perl - 110 bajtów
Oto rozwiązanie, które można uruchomić z perl -p source.pl LUB perl -pe 'here-is-code'.
Po prostu skopiuj i wklej przypadki testowe do standardowego wejścia.
Wydaje się, że jest to jedyny kod bez zmiennych, stałych ciągów i podziałów.
źródło
JavaScript (ES6), 73 bajty (niekonkurujące)
Spróbuj
źródło