क्या वे सप्ताह का एक ही दिन हो सकते हैं?


14

चुनौती

एक गैर-नकारात्मक पूर्णांक, आउटपुट को देखते हुए कि क्या दो तिथियों (ग्रेगोरियन कैलेंडर के लिए) संभव है कि सप्ताह के एक दिन को साझा करने के लिए कई वर्षों से भिन्न हो। एक वर्ष को एक लीप वर्ष माना जाता है यदि यह 4 से विभाज्य है लेकिन 100 से नहीं है, या यदि यह 400 से विभाज्य है।

आउटपुट हो सकता है:

  • फ़ासी / सच्चाई (या तो अभिविन्यास में)
  • किसी भी दो अलग मूल्य
  • एक अलग मूल्य और एक कुछ और होने के नाते
  • प्रोग्राम रिटर्न कोड द्वारा
  • सफलता / त्रुटि से
  • किसी भी अन्य उचित माध्यम से - बस पूछें कि क्या आपको संदेह है कि यह विवादास्पद हो सकता है

लेकिन मूल्यों के दो गैर-विशिष्ट सेटों द्वारा नहीं , फाल्सी / सत्य को छोड़कर (जैसा कि यह एक नहीं-अनुमति देगा)!

विस्तार

यह है कि इनपुट OEIS अनुक्रम A230995 का सदस्य है ।

सदस्य:

0, 5, 6, 7, 11, 12, 17, 18, 22, 23, 28, 29, 33, 34, 35, 39, 40, 45, 46, 50, 51, 56, 57, 61, 62, 63, 67, 68, 73, 74, 78, 79, 84, 85, 89, 90, 91, 95, 96, 101, 102, 106, 107, 108, 112, 113, 114, 117, 118, 119, 123, 124, 125, 129, 130, 131, 134, 135, 136, 140, 141, 142, 145, 146, 147, 151, 152, 153, 157, 158, 159, 162, 163, 164, 168, 169, 170, 173, 174, 175, 179, 180, 181, 185, 186, 187, 190, 191, 192, 196, 197, 198, 202, 203, 204, 208, 209, 210, 213, 214, 215, 219, 220, 221, 225, 226, 227, 230, 231, 232, 236, 237, 238, 241, 242, 243, 247, 248, 249, 253, 254, 255, 258, 259, 260, 264, 265, 266, 269, 270, 271, 275, 276, 277, 281, 282, 283, 286, 287, 288, 292, 293, 294, 298, 299, 304, 305, 309, 310, 311, 315, 316, 321, 322, 326, 327, 332, 333, 337, 338, 339, 343, 344, 349, 350, 354, 355, 360, 361, 365, 366, 367, 371, 372, 377, 378, 382, 383, 388, 389, 393, 394, 395
plus
400, 405, 406, 407, 411, ...

गैर सदस्यों को:

1, 2, 3, 4, 8, 9, 10, 13, 14, 15, 16, 19, 20, 21, 24, 25, 26, 27, 30, 31, 32, 36, 37, 38, 41, 42, 43, 44, 47, 48, 49, 52, 53, 54, 55, 58, 59, 60, 64, 65, 66, 69, 70, 71, 72, 75, 76, 77, 80, 81, 82, 83, 86, 87, 88, 92, 93, 94, 97, 98, 99, 100, 103, 104, 105, 109, 110, 111, 115, 116, 120, 121, 122, 126, 127, 128, 132, 133, 137, 138, 139, 143, 144, 148, 149, 150, 154, 155, 156, 160, 161, 165, 166, 167, 171, 172, 176, 177, 178, 182, 183, 184, 188, 189, 193, 194, 195, 199, 200, 201, 205, 206, 207, 211, 212, 216, 217, 218, 222, 223, 224, 228, 229, 233, 234, 235, 239, 240, 244, 245, 246, 250, 251, 252, 256, 257, 261, 262, 263, 267, 268, 272, 273, 274, 278, 279, 280, 284, 285, 289, 290, 291, 295, 296, 297, 300, 301, 302, 303, 306, 307, 308, 312, 313, 314, 317, 318, 319, 320, 323, 324, 325, 328, 329, 330, 331, 334, 335, 336, 340, 341, 342, 345, 346, 347, 348, 351, 352, 353, 356, 357, 358, 359, 362, 363, 364, 368, 369, 370, 373, 374, 375, 376, 379, 380, 381, 384, 385, 386, 387, 390, 391, 392, 396, 397, 398, 399
plus
401, 402, 403, 404, 408, ...

यह इसलिए प्रत्येक भाषा में सबसे कम उत्तर जीतता है!


क्या आउटपुट हो सकता है: यदि प्रोग्राम अनुक्रम से संबंधित है, तो कार्यक्रम समाप्त होता है (30 सेकंड से कम समय में), या अनिश्चित काल तक (अनंत लूप) चलता है?
लुइस मेंडू

@LuisMendo मैं एक प्रोग्राम की अनुमति देता हूं जो ऐसा करता है जब तक कि यह एक प्रोग्राम के साथ होता है जो समय सीमा प्रदान करता है (ताकि कोई इसे किसी के हार्डवेयर से पहले अधिग्रहीत कर सके)। यह वास्तव में विवादास्पद है हालांकि :)
जोनाथन एलन

किस स्थिति में संख्या 400 से विभाज्य है लेकिन 100 से विभाज्य नहीं है?
ATaco

@ATaco में कोई नहीं। हर चौथे वर्ष के नियम के अपवाद वर्ष हैं जो 4 और 100 से विभाज्य हैं, लेकिन 400 से नहीं।
डेनिस

@ टैको शायद शब्दांकन अब स्पष्ट है
जोनाथन एलन

जवाबों:


4

MATL , 17 बाइट्स

`0Gv@+5:YcYO8XOda

यदि प्रोग्राम अनुक्रम से संबंधित है, तो कार्यक्रम रुक जाता है या अनिश्चित काल तक (अनंत लूप) अन्यथा चलता रहता है।

nइनपुट होने दें । कोड एक लूप निष्पादित करता है जो वर्षों का परीक्षण करता है 1और 1+n; तब 2और 2+n; ... जब तक कि सप्ताह का एक मिलान दिन नहीं मिलता है। यदि कोई मिलान मौजूद नहीं है तो लूप अनिश्चित काल तक चलता है।

nअवधि के लिए सदस्यता समारोह आवधिक है 400। इसलिए, 400यदि nअनुक्रम का है तो अधिकांश पुनरावृत्तियों की आवश्यकता होती है। इसके लिए ट्राई इट ऑनलाइन में 20 सेकंड से कम की आवश्यकता होती है। इस ऊपरी सीमा के प्रमाण के रूप में, यहाँ एक संशोधित कार्यक्रम है जो पुनरावृत्तियों की संख्या को 400 तक सीमित करता है ( @401<*अंत में जोड़कर )। ध्यान दें कि यह बाध्य ढीला है, और कुछ सेकंड आमतौर पर पर्याप्त होता है।

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

व्याख्या

`           % Do...while
  0Gv       %   Push column vector [0; n], where n is the input number
  @+        %   Add k, element-wise. Gives [k; k+n]
  5:        %   Push row vector [1, 2, 3, 4, 5]
  Yc        %   Horizontal "string" concatenation: gives the 2×6 matrix
            %   [k, 1, 2, 3, 4, 5; k+n, 1, 2, 3, 4, 5]. The 6 columns
            %   represent year, month, day, hour, minute, second
  YO        %   Convert each row to serial date number. Gives a column
            %   vector of length 2
  8XO       %   Convert each date number to date string with format 8,
            %   which is weekday in three letters ('Mon', 'Tue', etc).
            %   This gives a 2×3 char matrix such as ['Wed';'Fri']
  d         %   Difference (of codepoints) along each column. Gives a
            %   row vector of length 3
  a         %   True if some element is nonzero, or false otherwise
            % End (implicit). The loop proceeds with the next iteration
            % if the top of the stack is true

पुराना संस्करण, 24 बाइट्स

400:"0G&v@+5:YcYO8XOdavA

आउटपुट है 0यदि इनपुट अनुक्रम से संबंधित है, या 1अन्यथा।

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

व्याख्या

400         % Push row vector [1, 2, ..., 400]
"           % For each k in that array
  0G&v      %   Push column vector [0; n], where n is the input number
  @+        %   Add k, element-wise. Gives [k; k+n]
  5:        %   Push row vector [1, 2, 3, 4, 5]
  Yc        %   Horizontal "string" concatenation: gives the 2×6 matrix
            %   [k, 1, 2, 3, 4, 5; k+n, 1, 2, 3, 4, 5]. The 6 columns
            %   represent year, month, day, hour, minute, second
  YO        %   Convert each row to serial date number. Gives a column
            %   vector of length 2
  8XO       %   Convert each date number to date string with format 8,
            %   which is weekday in three letters ('Mon', 'Tue', etc).
            %   This gives a 2×3 char matrix such as ['Wed';'Fri']
  d         %   Difference (of codepoints) along each column. Gives a
            %   row vector of length 3
  a         %   True if some element is nonzero, or false otherwise
  v         %   Concatenate vertically with previous results
  A         %   True if all results so far are true
            % End (implicit). Display (implicit)

अच्छा लगता है, मेरा अनुरोध वास्तव में यह था कि मैं सबसे खराब केस इनपुट जानना चाहता हूं, या एक कार्यक्रम है जो 400 पुनरावृत्तियों को मजबूर करता है - इस तरह से एक ऊपरी बाध्य हो सकता है जहां कोई भी इसे चलाने का विकल्प चुनता है। (BTW मुझे लगता है कि अनंत लूप, व्यवहार में है, सीमा त्रुटि से समाप्त हो गया है।)
जोनाथन एलन

1
@JonathanAllan धन्यवाद समझा। मैंने एक संशोधित कार्यक्रम जोड़ा है जो पुनरावृत्तियों की संख्या को 400 तक सीमित करता है। इसमें लगभग 14 सेकंड लगते हैं, इसलिए मैं 20 सेकंड ऊपरी सीमा के रूप में उपयोग कर रहा हूं
लुइस मेंडू

5

पायथन 2 , 58 बाइट्स

u=-abs(200-input()%400)-4
print u/100+5>(u-8)*5/4%7>u%4/-3

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

एक सीधा सूत्र।


यह अच्छा है। मेरा मानना ​​है कि आप 5*u/4%7-3इसके बजाय 2 बाइट्स बचा सकते हैं (u-8)*5/4%7
जोनाथन एलन

1/(...)इसके बजाय सफलता / त्रुटि विकल्प का उपयोग करके 2 और सहेजें print ...
जोनाथन एलन

5

जेली , 20 18 बाइट्स

99R4ḍj`‘ṡ%4ȷ$S€P7ḍ

सदस्यों के लिए आउटपुट 1 , गैर-सदस्यों के लिए 0

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

यह काम किस प्रकार करता है

99R4ḍj`‘ṡ%4ȷ$S€P7ḍ  Main link. Argument: n

99                  Set the return value to 99.
  R                 Range; yield [01, .., 99].
   4ḍ               Test each element in the range for divisibility by 4.
     j`             Join the resulting array, using itself as separator.
                    The result is an array of 9801 Booleans indicating whether the
                    years they represent have leap days.
       ‘            Increment the results, yielding 1 = 365 (mod 7) for non-leap
                    years, 2 = 366 (mod 7) for leap years.
         %4ȷ$       Compute n % 4000.
        ṡ           Take all slices of length n % 4000 of the result to the left.
             S€     Take the sum of each slice.
               P    Take the product of the sums.
                7ḍ  Test for divisibility by 7.


1

हास्केल , 76 बाइट्स

-35 बाइट्स के लिए धन्यवाद जोनाथन एलन। -2 बाइट्स लिन का धन्यवाद।

f i=or[c y==c$y+i|y<-[0..400]]
c n=(5*n#4+n%4-n#100+n#400)%7
(%)=mod
(#)=div

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

OEIS PARI कार्यक्रम के एल्गोरिथ्म का उपयोग करना।


1
5*(n#4)5*n#4भी हो सकता है !
लिन

1

पायथ , 32 बाइट्स

iI7*FsM.:hMs.iKiIL4S99*98]K%Q400

यहाँ यह कोशिश करो! (एक बार में अधिक परीक्षण मामलों को सत्यापित करने के लिए "स्विच टू टेस्ट सूट" पर क्लिक करें)

कैसे?

एक शांत चाल का उपयोग करता है जिसे मैंने "पायथ में गोल्फ के लिए टिप्स" धागे में जोड़ा है।

iI7 * FsM।: hMs.iKiIL4S99 * 98] K% Q400 | पूरा कार्यक्रम। STDIN से पढ़ता है, STDOUT को आउटपुट देता है।

                   S99 | पूर्णांक 1 ... 99 में उत्पन्न करें।
                 एल | उस सूची में प्रत्येक पूर्णांक N के लिए ...
               iI 4 | जांचें कि क्या 4 एन के साथ जीसीडी लगाने पर अयोग्य है।
                                 | यह जाँच के बराबर है यदि 4 | एन
              के | परिणाम को एक चर K में संग्रहीत करें।
            .i * 98] के | और कश्मीर लिपटे कश्मीर के तत्वों के साथ कश्मीर
                                 | एक सूची में और 98 बार दोहराया गया।
           s | समतल।
         एचएम | बढ़ते क्रम में।
       :: | और सभी पदार्थ उत्पन्न करते हैं ...
                           % Q400 | की लंबाई% 400
     sM | प्रत्येक योग।
   * एफ | और मुड़े हुए उत्पाद को लागू करें।
iI7 | जाँच करें कि 7 के साथ GCD लागू होने पर अपरिवर्तनीय है
                                 | उत्पाद (मूल रूप से जांचें कि क्या 7 | उत्पाद)।
                                 | उचित रूप से उचित बूलियन मूल्य का उत्पादन।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.