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
(यानी, बुधवार) वाले लोगों का चयन करते हैं । एक सरणी तैयार करने के लिए सभी को पराग में इनकैप्सुलेट करता है, और .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 जनवरी का दिन है, दूसरा सामान्य आउटपुट है। जब तक वर्ष मध्य संख्याओं में से एक है, तब तक इसकी जगह परेंस में संख्या है। अंतिम कॉलम बताता है कि% 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
संख्या को अन्य संस्कृति वेरिएंट के अनुसार समायोजित करने की आवश्यकता हो सकती है।