Das Sonnenjahr beträgt laut diesem Video 365 Tage, 5 Stunden, 48 Minuten, 45 Sekunden und 138 Millisekunden . Mit dem aktuellen Gregorianischen Kalender gelten folgende Regeln für Schaltjahre:
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
Leider ist diese Methode alle 3216 Jahre um einen Tag verschoben.
Eine mögliche Methode zur Reformierung des Kalenders ist die folgende Regel:
if year is divisible by 128, COMMON YEAR
else if year is divisible by 4, LEAP YEAR
else, COMMON YEAR
Dies hat den Vorteil, dass wir unsere Kalender für weitere 625.000 Jahre nicht erneut ändern müssen.
Angenommen, die ganze Welt beschließt, dass dieses System ab sofort jedes vierte Jahr ein Schaltjahr ist, mit Ausnahme jedes 128. Jahres, und unsere Kalender wie folgt ändert:
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
Wie würde sich dies auf unsere Algorithmen für den Wochentag auswirken?
Die Herausforderung
- Wenn Sie ein Datum zwischen 2000 und 100000 eingeben, suchen Sie den Wochentag unter diesem neuen Kalender.
- Jedes Eingabe- und Ausgabeformat ist zulässig, solange Sie klar angeben, welche Formate Sie verwenden.
- Dies ist Codegolf, also versuchen Sie, Ihre Lösungen so golfig wie möglich zu gestalten!
Testfälle
"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
Anregungen und Feedback zur Herausforderung sind willkommen. Viel Glück und gutes Golfen!
Antworten:
C (gcc) , 60 Bytes
Probieren Sie es online!
Einfache Modifikation der Sakamoto-Methode . Nimmt Eingaben als Ganzzahlargumente in die Reihenfolge
month, day, year
und gibt die Nummer des Tages aus (am Sonntag mit 0 indiziert).quelle
"-bed=pen+mad."
Teil?char
immer noch eine Zahl darstellt, also kannst du dasmod 7
direkt machen.Wolfram Language (Mathematica) ,
575553 BytesProbieren Sie es online!
Übernimmt drei Eingaben: das Jahr, den Monat und den Tag in dieser Reihenfolge. Wenn Sie die obige Funktion beispielsweise als speichern
fun
,fun[2048,2,28]
wird der Wochentag des 28. Februar 2048 angezeigt.Wie es funktioniert
Die Formel
m=#~Mod~128;6+Mod[(9#-m)/8-6Clip@m,28]
wandelt das Jahr in ein äquivalentes Jahr (ein Jahr mit genau denselben Wochentagen) zwischen 6 und 33 n. Chr. Um. Dazu subtrahieren wir einen Offset und nehmen dann das Jahr Mod 28; Der Offset ändert sich jedoch alle 128 Jahre, und für Jahre, die durch 128 teilbar sind, müssen wir eine weitere Anpassung vornehmen, da das entsprechende Jahr kein Schaltjahr sein sollte.Sobald dies erledigt ist, suchen wir den Monat und den Tag in dem entsprechenden Jahr mithilfe der integrierten Funktion
DayName
.quelle
Python 2 , 67 Bytes
Probieren Sie es online!
int("..."[m])
kann durch ersetzt werdenord("-bed=pen+mad."[m])
.quelle
JavaScript,
6559 BytesVerwendet die Methode von Sakamoto. Gibt0=Sunday, 1=Monday, 2=Tuesday...
-2 Bytes dank Mischa Lawrow
-4 Bytes dank Arnauld
quelle
~~y
kann nur geändert werdeny
. Sie werden kein Bruchjahr in der Eingabe bekommen, richtig? Aber ich gebe zu, dass ich JavaScript nicht fließend beherrsche.+y+(y>>2)-(y>>7)
?Eigentlich 37 Bytes
Dies ist ein Hafen von Notjagans Modifikation des Sakamoto-Algorithmus , jedoch mit ein paar stapelbasierten Tricks, wie unten beschrieben. Eingabeformat ist
day, year, month
. Ausgabeformat ist0-indexed with Sunday as 0
. Golfvorschläge willkommen! Probieren Sie es online!Erläuterung
quelle
Jelly ,
32313028 BytesEine weitere Portierung von Notjagans Modifikation des Sakamoto-Algorithmus, aber mit einer Basis-250-Zahl anstelle von
032503514624
(brauche das Extra nicht,0
weil Jelly 1-indiziert ist). Eingabeformat istmonth, year, day
. Ausgabeformat ist0-based with Sunday as 0
. Golfvorschläge sind sehr willkommen, da die Verbindungen schwierig zu arrangieren waren und möglicherweise noch golffähig sind. Probieren Sie es online!Bearbeiten: -1 Byte von der Verwendung der Bitverschiebung anstelle der Ganzzahldivision. -1 Byte von der Neuordnung des Anfangs und des Eingabeformats. -2 Bytes dank Erik the Outgolfer und caird coinheringaahing.
Erläuterung
quelle