PowerShell v3 +, 99 95 bytes
Enfoque de fuerza bruta
param($y)(1..12|%{$m=$_;2,3,5,7,11,13,17,19,23,29,31|?{(date "$m-$_-$y").DayofWeek-eq3}}).Count
Toma datos $y
, recorre desde 1
hasta 12
, almacena el mes temporalmente en $m
, luego recorre cada primo desde 2
hasta 31
. Para cada uno de ellos, construimos uno Get-Date
de ese día en particular, luego seleccionamos solo aquellos con DayOfWeek
-eq
ual a 3
(es decir, miércoles). Encapsula que todo en un parens para formular una matriz, y toma el .Count
mismo.
Alternativamente, enfoque matemático -
PowerShell v3 +, 105 bytes
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)
Termina siendo solo un pelo más largo que el enfoque de la fuerza bruta, pero lo estoy incluyendo aquí, ya que puede ser beneficioso para otros.
Nuevamente toma entrada $y
como el año. Esta vez estamos realizando operaciones estrictamente matemáticas basadas en el primer día del año. Primero calculamos qué día de la semana es ese y lo almacenamos $a
para su uso posterior. Eso se indexa en la primera matriz, lo que nos da el número que generalmente es correcto. Tenemos que agregar a eso un segundo índice basado en si es un año bisiesto potencial, si es domingo, martes, miércoles o jueves, y en función de qué año es.
Esto se basa en la siguiente observación. La primera columna es qué día de la semana es el 1 de enero, la segunda es la salida habitual. A menos que el año sea uno de los números intermedios, entonces es el número en pares. La columna final describe cómo funciona la indexación% 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: Ambos asumen que en-us
es la configuración actual de PowerShell para la información de cultura / fecha. Es posible que el formato de fecha y el DayOfWeek
número deban ajustarse en consecuencia para otras variantes de cultivo.