प्रधान बुधवार


22

प्रधान बुधवार

आपका कार्य बुधवार की संख्या की गणना करना है जो किसी विशेष वर्ष में महीने के प्रमुख दिन में आते हैं। उदाहरण के लिए, 7-13-16एक प्रमुख बुधवार है। स्थिरता के लिए सभी तिथियों के लिए ग्रेगोरियन कैलेंडर का उपयोग करें ।

इनपुट

आपके कार्यक्रम / फ़ंक्शन का इनपुट एक वर्ष (उदा 2016) होगा और लचीला होगा। वर्ष 1912 से 2233 के बीच पूर्णांक होगा ।

उत्पादन

आउटपुट भी लचीला है और प्राइम बुधवार (जैसे 18) की संख्या होनी चाहिए ।

स्कोरिंग

यह बाइट्स जीत में इतना छोटा कोड है!

परीक्षण के मामलों

इनपुट -> आउटपुट
--------------------
१ ९ १२ -> १
९ ११४ -> १६
1984 -> output
९९ ६ -> १ ९
२०६३ -> १ ९
२१५० -> १६
२१ ९९ - > 18
2233 -> 18

जवाबों:


7

MATL , 38 36 34 बाइट्स

FT+"@llI$YO]q&:t8XO!s9\~)9#1$ZOZps

इसे ऑनलाइन आज़माएं! या सभी परीक्षण मामलों को सत्यापित करें (कुछ सेकंड लगते हैं)।

व्याख्या

FT+     % Input year implicitly. Add [0 1] element-wise. Gives array with input year
        % and next year
"       % For each of those two years
  @     %   Push year
  ll    %   Push 1 twice. This indicates January 1.
  I$YO  %   Convert year, month, day to serial date number
]       % End for each. We now have the serial date number for January 1 of the input
        % year and that of the following year
q       % Subtract 1 to the latter, to yield December 31 of the input year
&:      % Inclusive range between those two numbers. This gives an array of serial date
        % numbers for the whole input year
t       % Push another copy of that array
8XO     % Convert to date string with format 8. This gives weekday as "Mon", "Tue" etc.
        % The result is a 3-column 2D char array, where each row is a day
!s      % Transpose, sum of each column. 'Wed' gives 288 (sum of ASCII codes)
9\~     % 288 gives 0 modulo 9, and is the only weekday to do so. So we compute modulo 9
        % and negate. This gives true for Wednesdays, false for the rest
)       % Apply as logical index into the array of serial date numbers
9#1$ZO  % Array of month numbers corresponding to those serial date numbers
Zp      % Array that contains true for prime numbers, false for the rest
s       % Sum of array. Display implicitly

मुझे विश्वास है कि तारीख आधारित चुनौतियों पर MATL को नहीं हराया जा सकता है। हमें DATL का निर्माण करना चाहिए जो आगे की तारीखों की चुनौतियों से निपटने के लिए अनुकूलित है।
Suever

@ स्वेहा हाहा, अच्छा नाम
लुइस

20

पायथन 2, 95 93 68 67 बाइट्स

lambda y:0x10ea2c8dbb06c5619/5**((y+((y-22)/99-y/2002)*16)%28)%5+16

1 बाइट को बंद करने के लिए @ जोसे को धन्यवाद!

Ideone पर इसका परीक्षण करें ।


3
आप 0x10ea2c8dbb06c5619इसके बजाय 1 char को बचा सकते हैं 19501370182350951961
सिल्वैनड

मैं इस विचार को समझता हूं big_constant//5**long_expressionलेकिन आप पृथ्वी पर उस निरंतर और उस अभिव्यक्ति के साथ कैसे आए? यह दीवाना है: D
Sherlock9

2
आधार 5 अंकों का उपयोग करके निरंतर एक लुकअप टेबल है, लेकिन इसे बेस 10 में बदल दिया जाता है, ताकि अंकों को एक स्ट्रिंग इंडेक्स का उपयोग करने के बजाय संख्यात्मक रूप से निकाला जाए। अभिव्यक्ति मेरे लिए एक स्थायी कैलेंडर की तरह लगती है। (यह समस्या बहुत आसान होगी यदि यह 1901 से 2099 तक वर्षों तक सीमित रहे, क्योंकि उत्तर उस अंतराल के दौरान हर 28 साल में दोहराए जाते हैं, इसलिए यह केवल वर्ष 28 मॉड लेने और तालिका में इसे देखने का मामला होगा। )
नील

13

ब्रेन-फ्लैक , 6588 , 2310 , 2308 , 2290 बाइट्स

पहले चीजें पहले, मैंने इस कार्यक्रम का लगभग 100% नहीं लिखा था, जो संभवतः कार्यक्रम के विशाल आकार से स्पष्ट है। इस कोड का अधिकांश हिस्सा मेरे ही ब्रेन-फ्लाक गोल्फिंग एल्गोरिदम द्वारा लिखा गया था । एक अतिरिक्त अजगर स्क्रिप्ट के साथ मैंने इसे सही दिशा में संकेत देने के लिए लिखा था।

इसे ऑनलाइन आज़माएं!

({}<(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((()()())){}{}){})[()()])())()())[()()()()])())()()())[()()()])()())[()()()])()())[()]))())()())[()()()()])())()()())[()()()])())())[()])[()])()()())[()()])()())[()()()()])()())())[()()])())()())[()()()()])()())[()])()()())[()()])()())[()()()()])()())())[()()])())()())[()()()()])())()()())[()()()])()())[()()()])()())[()]))())()())[()()()()])())()()())[()()()])())())[()])[()])()()())[()()])()())[()()()()])()())())[()()])())()())[()()()()])())()()())[()()()])()())[()()()])()())[()]))())()())[()()()()])())()()())[()()()])())())[()])[()])()()())[()()])()())[()()()()])()())())[()()])())()())[()()()()])())()()())[()()()])()())[()()()])()())[()]))())()())[()()()()])())()()())[()()()])())())[()])[()])()()())[()()])()())[()()()()])()())())[()()])())()())[()()()()])())()()())[()()()])())()())[()()()()])()())())[()()])())()())[()()()()])())()()())[()()()])()())[()()()])()())[()]))())()())[()()()()])())()()())[()()()])())())[()])[()])()()())[()()])()())[()()()()])()())())[()()])())()())[()()()()])())()()())[()()()])()())[()()()])()())[()]))())()())[()()()()])())()()())[()()()])())())[()])[()])()()())[()()])()())[()()()()])()())())[()()])())()())[()()()()])())()()())[()()()])()())[()()()])()())[()]))())()())[()()()()])())()()())[()()()])())())[()])[()])()()())[()()])()())[()()()()])()())())[()()])())()())[()()()()])())()()())[()()()])()())[()()()])()())[()]))())()())[()()()()])())()()())[()()()])())())[()])[()])()()())[()()])()())[()()()()])()())())[()()])())()())[()()()()])())()()())[()()()])()())[()()()])()())[()]))())()())[()()()()])())()()())[()()()])())())[()])[()])()()())[()()])()())[()()()()])()())())[()()])())()())[()()()()])())()()())[()()()])()())[()()()])()())[()]))())()())[()()()()])())()()())[()()()])())())[()])[()])()()())[()()])()())[()()()()])()())())[()()])())()())[()()()()])())()()())[()()()])()())[()()()])()())[()]))())()())[()()()()])())()()())>[(((((((((()()()()())){}{}){}){}){}){}[()]){}){}){}]){({}[()]<{}>)}{}({}<{{}}>)

हालांकि यह कार्यक्रम कोड गोल्फ के लिए काफी लंबा है, यह वास्तव में ब्रेन-फ्लैक के लिए शालीनता से कम है। वर्तमान में पूर्णांक विभाजन का विश्व रिकॉर्ड 1000 बाइट्स से अधिक है।

व्याख्या

एल्गोरिथ्म काफी सरल है। क्योंकि सीमित संख्या में वर्ष उपलब्ध हैं (321) यह सीधे इनपुट के तहत रिवर्स ऑर्डर में उत्तरों को धकेलता है और सही उत्तर खोजने के लिए लुकअप एल्गोरिथ्म का उपयोग करता है। जबकि सभी 321 संभावनाओं को हार्डकोडिंग एक कार्य के रूप में जटिल लग सकता है, क्योंकि यह एक जटिल है और मस्तिष्क-सपाट के रूप में गूढ़ के रूप में एक भाषा यह बहुत अच्छा समाधान हो सकता है। (मुझे आने वाले सप्ताह में पता लगाने की योजना है)।

चूंकि अधिकांश 321 संख्याएं औसतन लगभग 18 हैं और वे सभी संख्याओं को व्यक्तिगत रूप से धक्का देने के बजाय साल-दर-साल अलग-अलग होते हैं, मैं पहले वर्ष (2233) को सामान्य रूप से धक्का देता हूं और फिर केवल प्रत्येक वर्ष के लिए मूल्य को थोड़ा दोहराता हूं और बदलता हूं बाद। इस तरह से सभी 321 वर्षों के लिए ~ 18 धक्का देने के बजाय मैं केवल हर साल के लिए ~ 2 पुश करने के लिए भुगतान करता हूं।

एक बार सभी उत्तर धकेल दिए जाने के बाद यह 1912 इनपुट से घटा देता है ({}[(((((((((()()()()())){}{}){}){}){}){}[()]){}){}){}]) (यह उप-विषयी हो सकता है, मैं ऑप्टिमाइज़र को कुछ मानों को छोड़ने के लिए फिर से लिखता हूं, मेरा मानना ​​है कि यह इष्टतम नहीं होगा क्योंकि हार्डकोडिंग संख्या एक सुपर-घातीय प्रक्रिया है और इसे पूरा करने के लिए दौड़ना पड़ सकता है। कुछ दिन हुए)।

यह तब पहले तत्व से एक को घटाता है और दूसरे तत्व को तब तक पॉप करता है जब तक कि परिणाम शून्य तक नहीं पहुंच जाता {({}[()]<{}>)}

यह शून्य, {}और शीर्ष तत्व के नीचे के सभी तत्वों को पॉप करता है ({}<{{}}>)


गोल्फिंग नंबरों के लिए सामान्य दृष्टिकोण क्या है?
नील

सरल विचार यह है कि यदि आपके पास कारकों के साथ एक संख्या है n और m आप n m-1 बार धक्का देते हैं और फिर m-1 बार पॉप करते हैं। प्रारंभिक धक्का n के रूप में मूल्यांकन करता है और प्रत्येक पॉप एक अतिरिक्त n के रूप में मूल्यांकन करता है, जिसके लिए (1 + m-1) (n) जो mn के समान है। यह पुनरावर्ती रूप से किया जाता है क्योंकि n को पुश करने के लिए हमें गोल्फ n के साथ-साथ करना होगा। चूंकि यह विधि कुछ संख्याओं के लिए विशेष रूप से प्राइम्स के लिए अच्छी तरह से काम नहीं करती है, इसलिए हम यह देखने के लिए भी आस-पास देखते हैं कि क्या पास में अधिक कुशल संख्या है और यदि हम इसे उस संख्या और अंतर के योग के रूप में व्यक्त करते हैं।
गेहूं जादूगर

मैं देखता हूं ... इसलिए दो नंबर दिए गए हैं nऔर mजिनकी लंबाई है kऔर l, मुझे लगता है n+mकि लंबाई होगी k+l? किस बारे में n*m?
नील

n*mहोगा k+4m-4या l+4n-4। ऐसा इसलिए है क्योंकि गुणन हार्डकोडेड है। हम पहले n m-1बार धक्का देते हैं। ऐसा करने के लिए हमें kप्रतीकों को व्यक्त करने के लिए प्रतीकों की आवश्यकता है nऔर 2m-2प्रतीकों को व्यक्त करने के लिए (प्रत्येक धक्का 2 प्रतीकों है)। फिर हम पॉप करते m-1हैं, हमें एक अतिरिक्त 2m-2(पॉप्स के रूप में अच्छी तरह से 2 प्रतीकों की लागत)। यह योग है k+4m-4। हम m*nप्राप्त करने के लिए गुणा (कम्यूटेटिव प्रॉपर्टी) भी कर सकते हैं l+4n-4। परिणाम दो में से छोटा होगा।
गेहूं जादूगर

1
ठीक है, अगर यह सच है, तो +12 की लागत, *24 की लागत, *38 की लागत, *412 की लागत है, जो इससे अधिक महंगा है *2*2, इसलिए इसके लायक नहीं है (1000 से नीचे की संख्याओं में से मैंने केवल 10 पाया जो उपयोग नहीं किया *2: 1, 2, 3 , 4, 5, 9, 15, 27, 45, 135)। 1912 के लिए सबसे अच्छा मैं कर सकता था ((((((1+1+1)*2+1)*2*2+1)*2+1)*2+1)*2+1)*2*2*252 की लंबाई के साथ।
नील

7

बैश + आम उपयोगिताओं, 39

ncal $1|grep W|factor|egrep -c ': \S+$'

इनपुट वर्ष को कमांड-लाइन पैरामीटर के रूप में लेता है। आमतौर पर इस तरह के संदेश STDERR को आउटपुट करता है - मुझे लगता है कि यह मेटा-उत्तर के अनुसार कानूनी है :

factor: We is not a valid positive integer

यदि आप STDERR आउटपुट को स्पष्ट रूप से दबाना चाहते हैं तो आप 43 के स्कोर के बजाय ऐसा कर सकते हैं :

ncal $1|grep W|factor 2>-|egrep -c ': \S+$'

ध्यान दें कि यह एक अंग्रेजी या C / POSIX लोकेल मानता है। यह इतनी अच्छी तरह से काम नहीं करता है gd_GB.utf8, जहां सभी दिन के नाम संक्षिप्त होते हैं Di
स्पाइट

6

ऑक्टेव, 86 बाइट्स

यह किसी भी खिंचाव से तेज नहीं है । लेकिन यह वास्तव में एक कोड गोल्फ का लक्ष्य नहीं है, क्या यह है?

function r=p(y)r=0;for(i=698346:7:815953)d=datevec(i);r+=d(1)==y*isprime(d(3));end;end

ऑक्टेव "दिनांक संख्या" द्वारा तारीखों को ट्रैक कर सकता है - बीते हुए दिनों की संख्या जहां 1 जनवरी, दिन 1 है। इस उपाय से, जनवरी 3, 1912 (हमारे सेट में पहला बुधवार) दिन 698,346 है। 2233 के अंत तक प्रत्येक 7 वें दिन (सभी बुधवार) के माध्यम से वहां शुरू करें, और 1 वर्ष जोड़ें और यदि वर्ष का लक्ष्य वर्ष है और महीने का दिन प्रमुख है।


5

पायथन 2.7, 166 , 165 , 150 बाइट्स

from datetime import*
y=input()
d,c=date(y,1,1),0
while d.year==y:n=d.day;c+=n>1<2==d.weekday()>0<all(n%x for x in range(2,n));d+=timedelta(1)
print c

यहां सुधार के लिए निश्चित रूप से जगह है। मैं अजगर में गोल्फ के लिए नया हूँ। यह datetimeमॉड्यूल का उपयोग करता है । यह मानदंड फिट बैठता है, तो यह वर्ष में सभी दिनों के माध्यम से एक संचयकर्ता में जोड़ता है। यह तब परिणाम प्रिंट करता है। अधिकांश भारी उठाना मॉड्यूल में है इसलिए कोड काफी पतला हो सकता है।

एक बाइट ने मॉर्गन थ्रैप को धन्यवाद दिया और 15 बाइट्स Pietu1998 द्वारा बचाए गए ।


1
आप स्विचन द्वारा एक बाइट बचा सकते हैं n%x==0करने के लिए n%x<1
मॉर्गन थ्रैप

2
यह -1आवश्यक नहीं है क्योंकि rangeइंडेक्स इंडेक्स अनन्य है। इसके अतिरिक्त, आप filterएक जनरेटर में परिवर्तित कर सकते हैं । [0for x in range(2,n)if n%x<1]
पुरकाकूदरी

आप उपयोग any(...)कर सकते हैं या all(...)इसके बजाय not filter(...)
kennytm

1
जंजीर तुलनाओं के संयोजन से और allआप एक पूरे गुच्छा को बचा सकते हैं। c+=n>1<2==d.weekday()>0<all(n%x for x in range(2,n))
पुरकाकूदरी

3

जे, 44 बाइट्स

+/@(valdate*3=weekday)@,.&(,/(>:,"0/p:)i.12)

मुझे अभी पता चला है कि J में डेट हेरफेर के लिए बिल्डिंस हैं।

प्रयोग

कई इनपुट / आउटपुट को फॉर्मेट करने के लिए अतिरिक्त कमांड का उपयोग किया जाता है।

   f =: +/@(valdate*3=weekday)@,.&(,/(>:,"0/p:)i.12)
   (,.f"0) 1912 1914 1984 1996 2063 2150 2199 2233
1912 19
1914 16
1984 17
1996 19
2063 19
2150 16
2199 18
2233 18

व्याख्या

+/@(valdate*3=weekday)@,.&(,/(>:,"0/p:)i.12)  Input: year
                                       i.12   The range [0, ..., 11]
                              >:              Increment each to get the months [1, ..., 12]
                                    p:        Get the first 12 primes [2, ..., 37]
                                ,"0/          Make a table between each month and prime
                           ,/                 Join the rows
                       ,.&                    Prepend the year to each
                                              The date format is YYYY MM DD
            3=weekday                         Check if each date occurs on Wednesday
    valdate*                                  and is a valid date
+/@                                           Count the number of true values and return

1

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 -equal 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संख्या को अन्य संस्कृति वेरिएंट के अनुसार समायोजित करने की आवश्यकता हो सकती है।



1

जावास्क्रिप्ट ईएस 6, 187 182 181 179 बाइट्स

179 फॉर-लूप में फॉर-लूप में स्वैप किया गया

z=y=>{D=new Date("1/3/1912");N=0;a=()=>D.getFullYear();b=()=>D.getDate();c=()=>D.setDate(b()+7);for(;a()<=y;c())N+=y-a()?0:-1<[2,3,5,7,11,13,17,19,23,29,31].indexOf(b());return N}

181 टर्नरी को संकुचित किया

z=y=>{D=new Date("1/3/1912");N=0;a=()=>D.getFullYear();b=()=>D.getDate();c=()=>D.setDate(b()+7);while(a()<=y){N+=y-a()?0:-1<[2,3,5,7,11,13,17,19,23,29,31].indexOf(b());c()}return N}

182 दो छोरों को मिलाया

z=y=>{D=new Date("1/3/1912");N=0;a=()=>D.getFullYear();b=()=>D.getDate();c=()=>D.setDate(b()+7);while(a()<=y){N+=a()==y?-1<[2,3,5,7,11,13,17,19,23,29,31].indexOf(b()):0;c()}return N}

187

z=y=>{D=new Date("1/3/1912");N=0;a=()=>D.getFullYear();b=()=>D.getDate();c=()=>D.setDate(b()+7);while(a()<y)c();for(;a()==y;c())N+=-1<[2,3,5,7,11,13,17,19,23,29,31].indexOf(b());return N}

मुझे नहीं लगता कि आपने इस उदाहरण में, विशिष्ट वर्ष के लिए पहला शुरुआती बुधवार दिया है। ओपी की चुनौती बताती है कि इसे एकमात्र पैरामीटर के रूप में वर्ष की आवश्यकता है ... महान प्रयास हालांकि अभी तक ...
वैलीवेस्ट

"आपके कार्यक्रम / फ़ंक्शन का इनपुट एक वर्ष होगा" - लेकिन आप जो इंगित कर रहे हैं वह ऐसा नहीं है। मैं 1912 के पहले बुधवार को बीज के रूप में उपयोग करता हूं क्योंकि यह ओपी द्वारा दी गई समयावधि में हर दूसरे बुधवार से पहले है, लेकिन मैं बस 1911 से किसी भी मनमाने ढंग से बुधवार का उपयोग आसानी से कर सकता हूं या इसे बीज लगाने से पहले भी कर सकता हूं। मेरे फ़ंक्शन का इनपुट अभी भी एक वर्ष है, और फ़ंक्शन अभी भी ओपी द्वारा सुझाए गए समय-सीमा में किसी भी वर्ष में प्रमुख बुधवार की संख्या की गणना करता है, इसलिए मुझे यकीन नहीं है कि यह चुनौती कैसे फिट नहीं है।
पांडकोडर 13

आह, क्षमा याचना ... मुझे पहली बार यह महसूस नहीं हुआ कि आप इसका उपयोग
बीजाई के

1
धन्यवाद। मैंने एमान ओलिव के ब्रेन-फ्लैक कार्यान्वयन से प्रेरणा ली, जो वास्तव में उनके स्पष्टीकरण के अनुसार, पूर्व-क्रमादेशित सभी उत्तर हैं।
पांडैकर

1

बैच, 248 बाइट्स

@set/ad=0,l=1,n=20
@for /l %%i in (1913,1,%1)do @set/ad=(d+l+1)%%7,l=!(%%i%%4)-!(%%i%%100)+!(%%i%%400)
@goto %l%%d%
:03
:06
@set/an-=1
:12
:13
:16
@set/an-=1
:01
:04
:14
@set/an-=1
:00
:05
:10
:15
@set/an-=1
:02
:11
@echo %n%

स्पष्टीकरण: dसप्ताह का दिन है, 0सोमवार के लिए, जो आसानी से 1 जनवरी 1912 lहै । इस वर्ष के लिए एक लीप वर्ष है, 1912 के लिए एक झंडा है 1। हम फिर 1913 से इनपुट वर्ष के माध्यम से लूप का दिन अपडेट करते हैं: सप्ताह और छलांग लगाने के रूप में हम जाते हैं। अंत में हम लीप ईयर फ्लैग और सप्ताह के दिन का उपयोग करते हैं ताकि प्रभावी रूप से निर्धारित करने के लिए एक बड़ा स्विच स्टेटमेंट हो सके n, बुधवार की संख्या। n20 पर सेट करना और गिरावट के साथ इसे कम करना हालांकि प्रवाह नियंत्रण तर्क का उपयोग करने की तुलना में सस्ता है, लेकिन अपस्कर्ट यह है कि यदि एक गैर-लीप वर्ष के 1 जनवरी को गुरुवार या रविवार है तो 16 प्रधान बुधवार और अन्य मामलों के लिए हैं ।


1

जावास्क्रिप्ट ES6 206 203 199 197 195 183 182 179

कम से कम नहीं, लेकिन सबसे अच्छा मैं अब के लिए कर सकते हैं ... गोल्फ सुझाव का स्वागत करते हैं ...

p=n=>--d-1?n%d&&p(n):1;v=Date;D=(x,y)=>new v(x.setDate(x.getDate()-y));W=a=>eval('for(Z=0,z=D(w=new v(a,11,31),(w.getDay()+4)%7);z>new v(a,0,1);)Z+=~~p(d=z.getDate()),z=D(z,7);Z')

परिवर्तन:

  1. से ternary घटक को बदलना: 3>=x?3-x:10-xसे 6-(x+10)%7, बचत करना: 3 घोषणा स्थानों में परिवर्तन;
  2. विलय कर दिया x=w.getDay();z=D(w,6-(x+10)%7)करने के लिए z=D(w,6-(w.getDay()+10)%7), बचत: 4
  3. स्थानांतरित कर दिया Z=0से forदिनांक घोषणा करने के लिए लूप और धक्का दिया z=D(w,6-(x+10)%7)में forपाश को साफ़ रखने के लिए, बचत: 2
  4. लूप w=new Date(a,Z=0,1)में शिफ्ट घोषित for, मौजूदा wघोषणा के साथ विलय , बचत: 2
  5. एक प्राइम टेस्टिंग फंक्शन में प्राइम फाइंडिंग फंक्शन को फिर से लिखना, सेविंग: 12
  6. बदल रहा है +!!करने के लिए ~~कम करने के लिए और अभी भी परिवर्तित p(d=1)से NaNकरने के लिए 0, अभी भी काम करने के लिए प्रधानमंत्री टेस्ट समारोह अनुमति देता है, बचत: 1
  7. मुख्य कॉलिंग फ़ंक्शन से सभी अतिरिक्त फ़ंक्शन को स्थानांतरित कर दिया गया W, पुनर्निर्धारित forलूप - 31 दिसंबर से रिवर्स में जा रहा है, Dateऑब्जेक्ट को एक अलग चर के रूप में लिख रहा है , फिर कॉल forमें लूप को फिर से लिखा गया eval; बचत ३।

@PandaCoder, मैं तुम्हें पकड़ रहा हूँ, दोस्त!


1

आर, 149 147 बाइट्स

y=function(x){s=strftime;b=ISOdate
a=seq(b(x,1,1),t=b(x,12,31),b='d')
length(a[s(a,'%u')==3&trimws(s(a,'%e'))%in%c(2,3,5,7,11,13,17,19,23,29,31)])}

Ideone पर इसका परीक्षण करें ।


0

ग्रूवी, 126

ग्रूवी के पास प्राइम नंबर की मान्यता नहीं है, उसे भी निर्माण करना था।

{n->p={x->x<3||(2..Math.sqrt(x)).every{x%it}};(new Date("1/1/$n")..new Date("12/31/$n")).collect{it[7]==4&&p(it[5])?it:0}-[0]}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.