Y2K… 2019 में?


18

यह 10 अगस्त 2019 है, लेकिन आपके कार्य में अभी भी Y2K शामिल है। अजीब है, है ना?

एक प्रोग्राम बनाएं जो खुद को प्रिंट करता है, इसके साथ दो अंकों की संख्या संलग्न है। पहली बार जब आप इसे चलाते हैं, तो इसे 00 को इसके आउटपुट (इसके स्रोत कोड, क्योंकि यह एक क्विन वेरिएंट है) में जोड़ना चाहिए। जब आप उस आउटपुट को चलाते हैं, तो दो अंकों की संख्या के बिना मूल प्रोग्राम, इसे मूल प्रोग्राम को आउटपुट करना चाहिए, लेकिन इसके साथ 01 जोड़ा गया। OG प्रोग्राम को 02 के साथ प्राप्त करने के लिए उस आउटपुट को चलाएं, फिर उस प्रोग्राम को 03 के साथ प्राप्त करने के लिए ... यह चेन 99 तक जारी रहना चाहिए। उस प्रोग्राम को आउटपुट करना चाहिए BREAKING NEWS: WORLD ENDS

यदि आपका कार्यक्रम Y2Kparanoia: yesतब है:

  1. इसका उत्पादन होना चाहिए Y2Kparanoia: yes00
  2. वह आउटपुट प्रिंट होना चाहिए Y2Kparanoia: yes01
  3. वह आउटपुट प्रिंट होना चाहिए Y2K paranoia: yes02
  4. चरण 100 तक दोहराएं: यह प्रोग्राम निर्दिष्ट प्रलय का दिन समाचार को आउटपुट करता है

यह कोड गोल्फ है, इसलिए सबसे छोटा प्रोग्राम जो इन चरणों का पालन करते हुए खुद को प्रिंट कर सकता है।


7
वर्णन के अनुसार 99 वीं बार हम दौड़ते हैं और हम 2Kparanoia: yes97उत्पादन करते हैं 2Kparanoia: yes98, इसलिए (4) नहीं पढ़ा जाना चाहिए Repeat to step 100, but step 101 will output "BREAKING NEWS: WORLD ENDS"? (यानी 2Kparanoia: yes99खबर का उत्पादन करता है)
जोनाथन एलन

जवाबों:


7

पर्ल 6 , 122 114 106 बाइट्स

-8 बाइट्स शेल्वैकु को धन्यवाद

END {<print $!-199??"END \{<$_>~~.EVAL};\$!="~($!-1&&$!-99)+100!!"BREAKING NEWS: WORLD ENDS">~~.EVAL};$!=1

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

मानक क्वीन प्रारूप लेता है और ब्रेकिंग न्यूज स्ट्रिंग के साथ-साथ एपेंडेड नंबर के साथ एक नया फ़ंक्शन कॉल जोड़ता है। यह ENDप्रोग्राम समाप्त होने पर फ़ंक्शन को निष्पादित करने के लिए उपयोग करता है।


आप 3 और बाइट्स का उपयोग करके बचा सकते हैं ENDऔर एक ourचर:END {<print $s-199??"END\{<$_>~~.EVAL};our\$s="~($s-1&&$s-99)+100!!"BREAKING NEWS: WORLD ENDS">~~.EVAL};our$s=1
शेल्वैकु

अभी के लिए, यह वर्तमान विजेता है।
एंड्रयू

7

रूबी, 158 154 146 128 122 100 बाइट्स

इस उत्तर से प्रेरित ।

eval s=%{$><<(D>198?'BREAKING NEWS: WORLD ENDS':'eval s=%%{%s}<<D=%d'%[s[0..-2],D<2?100:D+1])#}<<D=1

संपादित करें: मैं इसे हटाने (s.split(35.chr)[0]+35.chr).inspectऔर इसे प्रतिस्थापित करने में सक्षम था s[0..-2](हर मूल्य की सीमा को छोड़कर) और %{ ... }पहले मैंने जो स्ट्रिंग सिंटैक्स का उपयोग किया था। 22 बाइट्स बचाए!

पुराना संस्करण:

संपादित करें: "BREAKING NEWS: WORLD ENDS"एक पूरी तरह से वैध प्रारूप स्ट्रिंग है, और रूबी किसी भी extraneos मापदंडों की उपेक्षा करता है कि एहसास द्वारा parens (और डेटा अनुभाग में इसी जोड़ी) की एक जोड़ी को बचाया ।

END{$><<(q=S>198?"BREAKING NEWS: WORLD ENDS":%{END{$><<(q=S>198?"BREAKING NEWS: WORLD ENDS":%%{%s})%%[q,S<2?0:S-99]}
S=1%02d})%[q,S<2?0:S-99]}
S=1

जब ऐसा मैंने महसूस किया कि जब से नंबर शुरू करने है कार्यक्रम के अंत में जाने के लिए, और गहरे लाल रंग का वैरिएबल का उपयोग कर इससे पहले कि वे घोषित किया गया है की अनुमति नहीं है, मैं कोड को चलाने के लिए होता है के बाद अंक किसी भी तरह। मैं कुछ ऐसा कर सकता था def a(s) ... end;a 1जो बन जाएगा ...end;a 100, हालांकि रूबी के कम-ज्ञात ENDसिंटैक्स का उपयोग कम बाइट्स का उपयोग करता है। हालांकि, अंदर ENDका ब्लॉक एक अलग दायरे में है, इसलिए Sएक वैश्विक चर या स्थिर होना चाहिए।

स्पष्टीकरण:

  • END{ ... };S=1: प्रोग्राम समाप्त होने से ठीक पहले कोड का रन ब्लॉक; सेट लगातार Sकरने के लिए 1(या 100- 199भविष्य पुनरावृत्तियों में)
  • $><<( ... ): $>स्टडआउट के लिए रूबी में एक शॉर्टकट है, और <<एक IO IO को लिखता है। परगनों की आवश्यकता होती है, अन्यथा यह बन जाता है($><<S)>198...
  • S>198?"BREAKING NEWS: WORLD ENDS":(q=...)%[q,S<2?0:S-99]: अगर मैं इसे थोड़ा और उचित कोड में तोड़ता तो यह होता:

    if S > 198
      "BREAKING NEWS: WORLD ENDS"
    else
      q = ...
      number_to_append = if S < 2
        0
      else
        S - 100 + 1
      end
      q % [q, number_to_append]
    end

    %ऑपरेटर एक स्ट्रिंग के लिए लागू प्रभावी ढंग से है printfएलएचएस प्रारूप स्ट्रिंग जा रहा है और आरएचएस तर्क होने के साथ।

  • %{ ... (q=%%{%s}) ... S=1%02d}: माणिक के पास तार के लिए एक दिलचस्प वाक्यविन्यास है जो घुंघराले ब्रैकेट के जोड़े को स्ट्रिंग के भीतर दिखाई देने की अनुमति देता है, जब तक कि वे संतुलित न हों। यह बहुत मददगार है, क्योंकि अन्यथा एक समान रानी को स्ट्रिंग शाब्दिक के रूप में इसे डालने के लिए स्ट्रिंग से बचना होगा। प्रारूप स्ट्रिंग में दो प्रतिस्थापन %sएक नियमित स्ट्रिंग के लिए और %02dवर्ण के साथ 2 के आकार के लिए दाएं-गद्देदार संख्या के लिए हैं 0

आगे छोटा करने पर मेरे विचार:

  • इसके sबजाय इसका उपयोग करने में सक्षम होना अच्छा होगा $s, लेकिन एस को परिभाषित करना s=$s;या एक फ़ंक्शन बनाना def a(s) ...दोनों ही अधिक बाइट्स का उपयोग करते हैं जो वे बचाते हैं, और मैं इसे करने के लिए किसी अन्य तरीके के बारे में नहीं सोच सकता। संपादित करें: निरंतरता वैश्विक है और एक चरित्र हो सकता है!
  • यदि Sयह हमेशा कम होता 100, तो अच्छा होता , ताकि इसकी तुलना 3-अंकीय संख्याओं के बजाय 2-अंकीय संख्याओं के उपयोग से की जा सके। हालांकि, अगर मैं का उपयोग S=0अंत में, अगले दो अंक अष्टाधारी के रूप में व्याख्या कर रहे हैं, और 8और 9अमान्य हैं और सभी चारपाई है। S=बस मान्य नहीं है, और मुझे दो अंकों को जोड़ने से पहले और बाद में दोनों को मान्य करने का कोई अन्य तरीका नहीं पता है। ध्यान दें, 0(और हर दूसरे पूर्णांक) माणिक में सत्य है।

इसे कम करने के बारे में कोई विचार, कृपया मुझे बताएं!

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


शायद अगर आप इस्तेमाल करते हैं s=100-1? फिर sहोगा 99, 0, -1 ...- 99, और -sहोगा -99, 0 ... 99।
पर्पल पी

@PurpleP कोई फर्क नहीं पड़ता कि मैं कैसे कोशिश करता हूं कि मैं ऐसा करने और पात्रों को बचाने का कोई तरीका नहीं समझ सकता।
शेल्वैकु

5

गो, 382 366 354 340 305 298 272 बाइट्स

जीत नहीं होगी, लेकिन मैंने चुनौती के साथ मजा किया।

package main
func main(){if n<199{s+="\x60,"
print(s[:135],s,100+(n/100)*(n%100+1))}else{print("BREAKING NEWS: WORLD ENDS")}}
var s,n=`package main
func main(){if n<199{s+="\x60,"
print(s[:135],s,100+(n/100)*(n%100+1))}else{print("BREAKING NEWS: WORLD ENDS")}}
var s,n=`,1

इसे खेल के मैदान पर आज़माएं!

एक रानी के आधार पर। यदि चर n199 से कम है, तो यह स्ट्रिंग चर को nएक गंभीर उच्चारण ( \x60) में जोड़ता है, मल्टीलाइन स्ट्रिंग्स के लिए गो का चरित्र, इसके बाद अल्पविराम ,। यह पहले 147 अक्षरों को मुद्रित करने के द्वारा जारी है s( ,क्योंकि मुद्रण केवल अंत में होता है) फिर sएक पूरे के रूप में प्रिंट करता है, और अंत में प्रिंट करता है 100अगर n == 1और n+1अन्यथा। इसका परिणाम यह है कि क्रमिक परिवर्तन nकार्यक्रम के अंत में चर को 100, 101, आदि में बदल देता है। यदि चर n199 या अधिक है, तो यह ब्रेकिंग न्यूज प्रिंट करता है।



2

जावास्क्रिप्ट (ईएस 6), 116 बाइट्स

setTimeout(s="alert((n-1?++n:n=100)-200?`setTimeout(s=${JSON.stringify(s)}),n=`+n:'BREAKING NEWS: WORLD ENDS')"),n=1

94 बाइट्स, यदि स्ट्रिंगिंग कार्यों की अनुमति है

f=_=>((p=`f=${f}`.split`|`)[4]=p[4]-1?-~p[4]:100)-200?p.join`|`:'BREAKING NEWS: WORLD ENDS'||1

2
आप अपना स्वयं का स्रोत कोड ( f=${f}) नहीं पढ़ सकते हैं , जो कि codegolf.meta.stackexchange.com/a/4878/13400
Shelvacu


1

पायथ , 81 80 बाइट्स

.vh,K"?>J198\"BREAKING NEWS: WORLD ENDS\"s[\".vh,K\"N:KN+C92NN\"J\"?<J2*TT+J1"J1

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

स्पष्टीकरण:

.vh,K" ... "J1
.v               Eval pyth code
  h              Get the first item in list
   ,             Make a list of the next two items
            J1   Set J = 1 (J = 100 to 199 in future iterations)
    K" ... "     Set K to the given string

और स्ट्रिंग में कोड है (ब्रेकिंग न्यूज छोटा):

?>J198"BNWE"s[".vh,K"N:KN+C92NN"J"?<J2*TT+J1
?                                              Ternary: If A then B else C
 >J198                                         Test if J > 198
      "BNWE"                                   String literal; If ternary was true, return this (which is then implicitly printed)
            s[".vh,K"N:KN+C92NN"J"?<J2*TT+J1   ternary else
            s                                  concatenate list of strings
             [                                 create list
              ".vh,K"                          string literal, list[0]
                     N                         N is set to the double-quote character, list[1]
                      :KN+C92N                 list[2]
                      :                        Regex substitution. In A, replace B with C
                       K                       Variable K (set to the string being eval'd)
                        N                      N is double-quote
                         +C92N                 A backslash followed by a double-quote
                         +                     concat two strings
                          C92                  character with code point 92 (backslash)
                             N                 N is double-quote
                              N                N is double-quote, list[3]
                               "J"             String literal, list[4]
                                  ?<J2*TT+J1   Inner ternary, list[5]
                                   <J2         If J < 2 ..
                                      *TT      return T * T (10 * 10), else
                                          +J1  return J+1
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.