PowerShell v3 +, 99 95 byte
Approccio a forza bruta -
param($y)(1..12|%{$m=$_;2,3,5,7,11,13,17,19,23,29,31|?{(date "$m-$_-$y").DayofWeek-eq3}}).Count
Riceve input $y
, esegue il loop da 1
a 12
, archivia temporaneamente il mese in $m
, quindi esegue il loop su ogni numero primo da 2
a 31
. Per ognuno di questi, costruiamo un Get-Date
di quel particolare giorno, quindi selezioniamo solo quelli con DayOfWeek
-eq
ual a 3
(cioè, mercoledì). Incapsula il tutto in una parentesi per formulare una matrice e ne prende la .Count
stessa.
In alternativa, approccio matematico -
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)
Finisce per essere solo un pelo più lungo dell'approccio della forza bruta, ma lo includo qui poiché potrebbe essere utile per gli altri.
Anche in questo caso prende input $y
come l'anno. Questa volta eseguiamo operazioni matematiche rigorosamente basate sul primo giorno dell'anno. In primo luogo calcoliamo quale giorno della settimana è e lo memorizziamo $a
per un uso successivo. Questo si indicizza nel primo array, che ci fornisce il numero che di solito è corretto. Dobbiamo aggiungere a questo un secondo indice basato sul fatto che si tratti di un potenziale anno bisestile, che si tratti di domenica, martedì, mercoledì o giovedì e in base a quale sia l'anno.
Questo si basa sulla seguente osservazione. La prima colonna è il giorno della settimana del 1 ° gennaio, la seconda è l'output normale. A meno che l'anno non sia uno dei numeri medi, è invece il numero tra parentesi. L'ultima colonna descrive come funziona l'indicizzazione% 5.
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
Nota: entrambi presuppongono che en-us
sia l'impostazione PowerShell corrente per le informazioni su cultura / data. DayOfWeek
Potrebbe essere necessario adattare la formattazione e il numero della data di conseguenza per altre varianti di cultura.