PowerShell v3 +, 99 95 byte
Phương pháp tiếp cận vũ phu -
param($y)(1..12|%{$m=$_;2,3,5,7,11,13,17,19,23,29,31|?{(date "$m-$_-$y").DayofWeek-eq3}}).Count
Đưa đầu vào $y
, vòng lặp từ 1
đến 12
, lưu trữ tháng tạm thời vào $m
, sau đó lặp lại mọi nguyên tố từ 2
đến 31
. Đối với mỗi người trong số họ, chúng tôi xây dựng một Get-Date
ngày cụ thể, sau đó chỉ chọn những người có DayOfWeek
-eq
ual đến 3
(tức là thứ Tư). Đóng gói tất cả trong một parens để tạo thành một mảng và lấy .Count
nó.
Ngoài ra, phương pháp toán học -
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)
Có vẻ như chỉ là một sợi tóc dài hơn phương pháp vũ phu, nhưng tôi bao gồm nó ở đây vì nó có thể có lợi cho người khác.
Một lần nữa lấy đầu vào $y
là năm. Lần này chúng tôi thực hiện các hoạt động toán học nghiêm ngặt dựa trên ngày đầu tiên của năm. Trước tiên, chúng tôi tính toán ngày nào trong tuần và lưu trữ $a
để sử dụng sau. Đó là chỉ mục vào mảng đầu tiên, cho chúng ta số thường là chính xác. Chúng ta phải thêm vào đó một chỉ số thứ hai dựa trên việc đó có phải là năm nhuận tiềm năng hay không, cho dù đó là Chủ nhật, Thứ ba, Thứ tư hay Thứ năm, và dựa trên năm đó là năm nào.
Điều này dựa trên sự quan sát sau đây. Cột đầu tiên là ngày trong tuần của ngày 1 tháng 1, cột thứ hai là đầu ra thông thường. Trừ khi năm là một trong những số ở giữa, thay vào đó là số trong parens. Cột cuối cùng mô tả cách hoạt động của chỉ mục% 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
Lưu ý: Cả hai giả định en-us
này là cài đặt PowerShell hiện tại cho thông tin văn hóa / ngày. Định dạng và DayOfWeek
số ngày có thể cần được điều chỉnh cho phù hợp với các biến thể văn hóa khác.