Zgodnie z tym filmem rok słoneczny wynosi 365 dni, 5 godzin, 48 minut, 45 sekund i 138 milisekund . W obecnym kalendarzu gregoriańskim zasady dotyczące lat przestępnych są następujące:
if year is divisible by 400, LEAP YEAR
else if year is divisible by 100, COMMON YEAR
else if year is divisible by 4, LEAP YEAR
else, COMMON YEAR
Niestety ta metoda jest wyłączona o jeden dzień co 3216 lat.
Jedną z możliwych metod reformowania kalendarza jest następująca zasada:
if year is divisible by 128, COMMON YEAR
else if year is divisible by 4, LEAP YEAR
else, COMMON YEAR
Ma to tę zaletę, że nie wymaga od nas zmiany kalendarzy przez kolejne 625 000 lat, dawania lub przyjmowania.
Powiedzmy, że cały świat decyduje, że od teraz używamy tego systemu co cztery lata, co roku przestępnym, z wyjątkiem co 128 lat, zmieniając nasze kalendarze w następujący sposób:
YEAR GREGORIAN 128-YEAR
2044 LEAP LEAP
2048 LEAP COMMON
2052 LEAP LEAP
...
2096 LEAP LEAP
2100 COMMON LEAP
2104 LEAP LEAP
...
2296 LEAP LEAP
2300 COMMON LEAP
2304 LEAP COMMON
2308 LEAP LEAP
Jak wpłynęłoby to na nasze algorytmy dnia tygodnia?
Wyzwanie
- Biorąc pod uwagę datę od roku 2000 do roku 100000, znajdź dzień tygodnia w tym nowym kalendarzu.
- Dowolny format wejściowy i wyjściowy jest dozwolony, o ile wyraźnie określisz, jakich formatów używasz.
- To jest golf golfowy, więc postaraj się, aby Twoje rozwiązania były jak najbardziej golfowe!
Przypadki testowe
"28 February 2048" -> "Friday"
"March 1, 2048" -> "Sat"
(2100, 2, 29) -> 0 # 0-indexed with Sunday as 0
"2100-02-29" -> 7 # 1-indexed with Sunday as 7
"28 Feb. 2176" -> "Wednesday"
"1-Mar-2176" -> "Th"
"28/02/100000" -> "F" # DD/MM/YYYYYY
"Feb. 29, 100000" -> 6 # 1-indexed with Sunday as 7
"03/01/100000" -> 1 # MM/DD/YYYYYY and 1-indexed with Sunday as 1
Sugestie i opinie na temat wyzwania są mile widziane. Powodzenia i dobrej gry w golfa!
Odpowiedzi:
C (gcc) , 60 bajtów
Wypróbuj online!
Prosta modyfikacja metody Sakamoto . Pobiera dane wejściowe jako liczby całkowite w kolejności
month, day, year
i wypisuje liczbę dni (indeksowane w niedzielę przez 0).źródło
"-bed=pen+mad."
część?char
wciąż oznacza liczbę, więc możesz zrobić tomod 7
bezpośrednio.Wolfram Language (Mathematica) ,
575553 bajtówWypróbuj online!
Pobiera trzy dane wejściowe: rok, miesiąc i dzień w tej kolejności. Na przykład, jeśli zapiszesz powyższą funkcję jako
fun
, a następniefun[2048,2,28]
powiesz dzień tygodnia 28 lutego 2048 r.Jak to działa
Formuła
m=#~Mod~128;6+Mod[(9#-m)/8-6Clip@m,28]
konwertuje rok na rok równoważny (rok z dokładnie tymi samymi dniami tygodnia) między 6 AD a 33 AD. Aby to zrobić, odejmujemy przesunięcie, a następnie bierzemy mod roku 28; ale przesunięcie zmienia się co 128 lat i dla lat podzielnych przez 128 musimy dokonać dalszej korekty, ponieważ równoważny rok nie powinien być rokiem przestępnym.W każdym razie, gdy to zrobimy, sprawdzamy miesiąc i dzień w tym samym roku za pomocą wbudowanego
DayName
.źródło
Python 2 , 67 bajtów
Wypróbuj online!
int("..."[m])
można zastąpićord("-bed=pen+mad."[m])
.źródło
JavaScript,
6559 bajtówWykorzystuje metodę Sakamoto. Daje0=Sunday, 1=Monday, 2=Tuesday...
-2 bajty dzięki Misha Lavrov
-4 bajty dzięki Arnauldowi
źródło
~~y
można po prostu zmienić nay
. Nie dostaniesz ułamka roku na wejściu, prawda? Ale przyznaję, że nie jestem biegły w JavaScript.+y+(y>>2)-(y>>7)
?Właściwie 37 bajtów
Jest to port modyfikacji notjagan jest z algorytmem Sakamoto , ale z kilku sztuczek stos oparte, jak opisano poniżej. Format wejściowy to
day, year, month
. Format wyjściowy to0-indexed with Sunday as 0
. Zapraszamy do gry w golfa! Wypróbuj online!Wyjaśnienie
źródło
Galaretka ,
32313028 bajtówKolejny port modyfikacji notjagan jest z algorytmem Sakamoto , ale z numerem w miejscu base-250
032503514624
(nie potrzebują dodatkowych0
ponieważ Jelly jest 1-indeksowane). Format wejściowy tomonth, year, day
. Format wyjściowy to0-based with Sunday as 0
. Sugestie dotyczące gry w golfa są bardzo mile widziane, ponieważ sposób połączenia był trudny do zorganizowania i nadal może być golfowy. Wypróbuj online!Edycja: -1 bajta przy użyciu przesunięcia bitowego zamiast podziału na liczby całkowite. -1 bajt od przestawienia początku i formatu wejściowego. -2 bajty dzięki Erikowi Outgolfer i cairdowi coinheringaahing.
Wyjaśnienie
źródło