Napisz funkcję, która pobiera datę i zwraca dzień tygodnia 29 lutego po tej dacie.
Dane wejściowe to ciąg znaków w rozszerzonym formacie ISO: RRRR-MM-DD (np. 27 maja 2010 r. To „2010-05-27”).
Dane wyjściowe to ciąg znaków, który jest nazwą dnia tygodnia (np. „Poniedziałek”). Wielkie litery nie mają znaczenia, ale podaj pełną nazwę w języku angielskim.
Jeśli podana data to 29 lutego, zwróć dzień tygodnia następnego 29 lutego .
Skorzystaj z obliczeń dla Proleptycznego kalendarza gregoriańskiego (więc korzysta z obliczeń gregoriańskiego roku przestępnego na całej długości). Nie martw się kalendarzem juliańskim lub kiedy nastąpiła zmiana z Juliana na gregoriański. Wystarczy założyć Gregorian za wszystko.
Funkcja powinna działać co najmniej w zakresie „0001-01-01” - „2100-01-01”.
Możesz swobodnie korzystać ze wszystkich standardowych bibliotek dostępnych w wybranym języku, ale nie używaj bibliotek innych firm, chyba że chcesz uwzględnić ten kod jako część swojego rozwiązania.
Najkrótszy kod (najmniej znaków) wygrywa.
Przykłady:
func("0001-01-01")
->"Sunday"
func("1899-12-03")
->"Monday"
func("1970-01-01")
->"Tuesday"
func("1999-07-06")
->"Tuesday"
func("2003-05-22")
->"Sunday"
func("2011-02-17")
->"Wednesday"
func("2100-01-01")
->"Friday"
(i nie, nie musisz nazywać funkcji func
)
Poradnik:
- Pamiętaj, że lata kończące się na 00, których nie można podzielić przez 400, nie są latami przestępnymi.
- 1 stycznia 0001 to poniedziałek.
date
. Po prostu usuń GNUWin32 ze ŚCIEŻKI i powinno działać. Lub zmieńdate
naGet-Date
(tego rodzaju zachowanie rezerwowe działa tylko wtedy, gdy nie zostanie znalezione polecenie - sprawdź, po prostu użyjgcm date
). W każdym razie nie uważam tego za szczególny problem z tym skryptem, ponieważ GNUWin32 nie jest częścią żadnej standardowej instalacji Windows.get-date
i dostałem komunikat o błędzieMethod invocation failed because [System.Management.Automation.PSObject] doesn't contain a method named 'op_Addition'.
Czy to wymaga PS2 lub .Net 4 czy coś takiego?Get-Date
aleSystem.DateTime
.$d=Get-Date "0400-01-01"; $d++
wyświetla komunikat o błędzie dotyczący++
braku definicji w DateTime. To samo zastąpienie++
z+=1
lub+="1"
czy+='1'
daje komunikat o błędzie o PSObject. I po prostu+"1"
działa.Ruby 1.9, 85 znaków
Proste rozwiązanie. Wywołaj funkcję za pomocą
f[args]
.0001-01-01
testcase.źródło
def*
po prostu definiuje funkcję o nazwie*
. W ten sposób nie potrzebuję spacji międzydef
nazwą funkcji.T-SQL
166185 znakówJuż miałem problemy z funkcjami daty T-SQL, więc pomyślałem, dlaczego nie ...
Oryginalne rozwiązanie było niepoprawne ...
Oto, co właściwie muszę zrobić, aby ta strategia zadziałała:
źródło
C #, 176
źródło
string f(string d){...}
.ToString("dddd")
drukuje datę w bieżącym języku, ale nie w języku angielskim.string f(string d){var n=DateTime.Parse(d).AddDays(1);return DateTime.IsLeapYear(n.Year)&&n.DayOfYear==60?n.DayOfWeek+"":f(n+"");}
Bash, 96 bajtów
Dzięki Peter ... Wersja z golfem, 96 bajtów:
Stara wersja, 229 bajtów
PRZYKŁADOWE I / O
źródło
i=0;d=;until [ `date -d"$1 $i days" +%m-%d` = "02-29" ];do((i++));done
Perl, bez biblioteki dat:
160 159155Prawdziwą zaletą tych bibliotek dat jest przekazywanie komuś nazwy nazw dni.
Z drugiej strony myślę, że jest to jedyne jak dotąd rozwiązanie, które działa niezależnie od ustawień regionalnych.
źródło
DATA i trochę BASHY klej (90)
Funkcja:
Testowanie:
źródło
D: 175 znaków
Bardziej czytelnie:
Pisanie w języku D jest bardzo łatwe, ale na pewno nie wygra żadnych konkursów golfowych. Mimo to, poza golfem kodowym, wolałbym, aby pisanie i rozumienie było łatwiejsze, ale dłuższe niż zwięzłe, ale trudne do napisania i zrozumienia.
źródło
Java 8 - 252 znaków
Gra w golfa:
Nie golfowany:
źródło
Rebol - 78
Nie golfowany:
Przykładowe użycie (w konsoli Rebol):
źródło
PHP, 104 bajty
awaria
date(L)
:1
dla roku przestępnego, w0
innym przypadkudate(l)
: pełna reprezentacja tekstowa dnia tygodniaźródło
Coreutils GNU, 71 bajtów
Wyszukiwanie liniowe przez następne 8 lat (najgorszy przypadek, podany 2096–02–29). Sed znajduje i wysyła pierwszą linię, która pasuje do 29 lutego.
Byłem zaskoczony, gdy stwierdziłem, że
t;d;:;q
było to krócej niż testowanie, czy cyfry pozostały (/[01]/d;q
), mimo że dwukrotnie więcej poleceń.Testy
Dodałem dodatkową linię testów do trudnych przypadków narożnych:
źródło