PowerShell v3 +, 99 bis 95 Byte
Brute-Force-Ansatz -
param($y)(1..12|%{$m=$_;2,3,5,7,11,13,17,19,23,29,31|?{(date "$m-$_-$y").DayofWeek-eq3}}).Count
Nimmt Eingaben auf , durchläuft die $y
Schleife von 1
bis 12
, speichert den Monat vorübergehend in $m
und durchläuft dann jede Primzahl von 2
bis 31
. Für jeden von diesen konstruieren wir einen Get-Date
von diesem bestimmten Tag und wählen dann nur die mit DayOfWeek
-eq
ual bis 3
(dh Mittwoch) aus. Verkapselt das alles in einer Parens, um ein Array zu formulieren, und übernimmt das .Count
davon.
Alternativ mathematischer Ansatz -
PowerShell v3 +, 105 Byte
param($y)(16,19,18,20,16,18,19)[($a=(date "1-1-$y").DayOfWeek)]+(1,-3,0,1,2)[$y%5]*($a-in0,2,3,4)*!($y%4)
Es wird nur ein Haar länger sein als der Brute-Force-Ansatz, aber ich schließe es hier ein, da es für andere von Vorteil sein kann.
Nimmt wieder die Eingabe $y
als das Jahr. Dieses Mal führen wir ausschließlich mathematische Operationen basierend auf dem ersten Tag des Jahres durch. Wir berechnen zuerst den Wochentag und speichern ihn $a
für eine spätere Verwendung. Das indiziert in das erste Array, was uns die Nummer gibt, die normalerweise korrekt ist. Wir müssen dem einen zweiten Index hinzufügen, der darauf basiert, ob es sich um ein potenzielles Schaltjahr handelt, ob es sich um einen Sonntag, einen Dienstag, einen Mittwoch oder einen Donnerstag handelt, und der darauf basiert, wie das Jahr lautet.
Dies basiert auf der folgenden Beobachtung. Die erste Spalte ist der Wochentag, an dem der 1. Januar ist, die zweite Spalte ist die übliche Ausgabe. Wenn das Jahr nicht eine der mittleren Zahlen ist, ist es stattdessen die Zahl in Parens. Die letzte Spalte beschreibt, wie die% 5-Indizierung funktioniert.
Jan-1 -> # ... Except if $y= (then it's this number) | $y % 5 =
Sun -> 16 ... 1928 1956 1984 etc. (17) | 3
Mon -> 19
Tue -> 18 ... 1924 1952 1980 etc. (20) | 4
Wed -> 20 ... 1936 1964 1992 etc. (17) | 1
Thur -> 16 ... 1920 1948 1976 etc. (17) | 0
Fri -> 18
Sat -> 19
Hinweis: Bei beiden wird davon ausgegangen, dass en-us
es sich um die aktuelle PowerShell-Einstellung für Kultur- / Datumsinformationen handelt. Die Datumsformatierung und DayOfWeek
-nummer müssen möglicherweise für andere Kulturvarianten entsprechend angepasst werden.