PowerShell v3 +, 99 95 바이트
무차별 대입 방식-
param($y)(1..12|%{$m=$_;2,3,5,7,11,13,17,19,23,29,31|?{(date "$m-$_-$y").DayofWeek-eq3}}).Count
입력을 $y
받고, 루프를 반복 1
하고 12
, 월을 일시적으로 저장 $m
한 다음, 모든 소수를에서 루프로 반복 2
합니다 31
. 이들 각각에 대해, 우리는 그 Get-Date
날의 특정 날짜를 구성한 다음 DayOfWeek
-eq
ual 3
(예 : 수요일) 을 가진 사람 만 선택합니다 . 배열을 공식화하기 위해 모든 것을 parens에 캡슐화하고 그 배열을 취합니다 .Count
.
또는 수학적 접근 방식-
PowerShell v3 +, 105 바이트
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)
무차별 대입 방식보다 머리카락이 길어 지지만 다른 사람들에게 도움이 될 수 있으므로 여기에 포함시킵니다.
다시 $y
연도로 입력 을 받습니다 . 이번에는 첫해를 기준으로 엄격하게 수학 연산을 수행합니다. 먼저 요일을 계산하고 $a
나중에 사용하기 위해 저장합니다 . 첫 번째 배열로 색인을 생성하여 일반적으로 올바른 숫자를 얻습니다. 잠재적 인 윤년인지, 일요일, 화요일, 수요일 또는 목요일인지, 연도를 기준으로 두 번째 지수를 추가해야합니다.
이것은 다음 관찰에 근거합니다. 첫 번째 열은 1 월 1 일 요일이며 두 번째 열은 일반적인 출력입니다. 연도가 중간 숫자 중 하나가 아닌 한, 대신에 parens의 숫자입니다. 마지막 열은 % 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
참고 : 둘 다 en-us
문화 / 날짜 정보에 대한 현재 PowerShell 설정 이라고 가정 합니다. DayOfWeek
다른 문화 변형에 따라 날짜 형식과 숫자를 조정해야 할 수도 있습니다.