PowerShell v3 +, 99 95 octets
Approche par force brute -
param($y)(1..12|%{$m=$_;2,3,5,7,11,13,17,19,23,29,31|?{(date "$m-$_-$y").DayofWeek-eq3}}).Count
Prend l'entrée $y
, boucle de 1
à 12
, stocke temporairement le mois dans $m
, puis boucle sur chaque prime de 2
à 31
. Pour chacun d'eux, nous construisons un Get-Date
de ce jour particulier, puis sélectionnons uniquement ceux avec DayOfWeek
-eq
ual à 3
(c.-à-d., Mercredi). Encapsule tout cela dans une parenthèse pour formuler un tableau, et prend .Count
celui - ci.
Alternativement, approche mathématique -
PowerShell v3 +, 105 octets
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)
En fin de compte, c'est juste un cheveu plus long que l'approche par force brute, mais je l'inclus ici car cela peut être bénéfique pour les autres.
Prend à nouveau l'entrée $y
comme l'année. Cette fois, nous effectuons des opérations strictement mathématiques basées sur le premier jour de l'année. Nous calculons d'abord le jour de la semaine et le stockons $a
pour une utilisation ultérieure. Cela indexe dans le premier tableau, ce qui nous donne le nombre qui est généralement correct. Nous devons ajouter à cela un deuxième indice selon qu'il s'agit d'une année bissextile potentielle, qu'il s'agisse d'un dimanche, d'un mardi, d'un mercredi ou d'un jeudi et en fonction de l'année.
Ceci est basé sur l'observation suivante. La première colonne est le jour de la semaine du 1er janvier, la seconde est la sortie habituelle. À moins que l'année ne soit l'un des nombres intermédiaires, c'est plutôt le nombre en parens. La dernière colonne décrit le fonctionnement de l'indexation% 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
Remarque: les deux supposent qu'il en-us
s'agit du paramètre PowerShell actuel pour les informations de culture / date. Le formatage de la date et le DayOfWeek
nombre peuvent devoir être ajustés en conséquence pour d'autres variantes de culture.