लगभग एक क्वीन बनाओ


12

मैं एक दोस्त को उसे एक क्वीन देकर बेवकूफ बनाना चाहता था जो लगभग काम कर गया, लेकिन मैला और सुस्त हो गया।

एक प्रोग्राम बनाएँ, जो चलाने पर, प्रोग्राम को आउटपुट करेगा, लेकिन एक वर्ण बंद। या तो एक वर्ण जोड़ा जा सकता है, हटाया या दोनों (एक वर्ण परिवर्तन)। लेकिन केवल एक चरित्र।

आपका स्कोर होगा (length of your program) / floor(sqrt(number of times the program almost quines))(कहां / 0अनंत है)

number of times the program almost quinesकेवल एक बार stdout में केवल एक चरित्र को बदलते हुए आपका प्रोग्राम कितनी बार चलता है। आपका प्रोग्राम इनपुट स्वीकार नहीं कर सकता है। यह एक कार्यक्रम भी नहीं छाप सकता है जो पहले से ही मुद्रित है।

आप ऐसा चरित्र भी नहीं जोड़ सकते हैं, जिसे आपने पहले जोड़ा है, या उसी वर्ण से किसी वर्ण को हटा दें। उदाहरण के लिए, यदि आपने पहले जोड़ा है 1, और आप 1फिर से जोड़ते हैं , तो वह वही है जहां number of times the program almost quinesस्टॉप है। यदि आप पहले वर्ण को निकालते हैं, तो आप पहले वर्ण को फिर से नहीं निकाल सकते। यदि आपने तीसरे वर्ण को बदल दिया है, तो आप तीसरे वर्ण को 2जोड़ 2या हटा नहीं सकते हैं ।


एक रानी क्या है?
अब्रीराम

@ Agawa001 एक क्वीन एक प्रोग्राम है जो खुद को प्रिंट करता है।

जवाबों:


7

CJam, 0.000884

{_,6/[{64md}6*](124+\+'�f++`"1$~"}""1$~

यहाँ, 128 कोड प्वाइंट 128 के साथ अप्राप्य चरित्र को दर्शाता है । इसे ऑनलाइन आज़माएं।

विचार

यह दृष्टिकोण कोड के साथ U + 4000000 और U + 7FFFFFFF के बीच कोड बिंदुओं के साथ सभी यूसीएस पात्रों (मूल विनिर्देश) को शुरू में कोड स्ट्रिंग का अनुसरण करता है।

हम UTF-8 चुनते हैं , जो 6 बाइट स्ट्रिंग का उपयोग करके इनमें से प्रत्येक वर्ण को एन्कोड करता है:

1111110u₂     10vvvvvv₂     10wwwwww₂     10xxxxxx₂     10yyyyyy₂     10zzzzzz₂

252 + u       128 + vvvvvv  128 + wwwwww  128 + xxxxxx  128 + yyyyyy  128 + zzzzzz

इस प्रकार, हम इस सीमा में nth चरित्र को आधार 64 में उसके 6 सबसे कम महत्वपूर्ण अंकों की गणना करके और 252 को सबसे महत्वपूर्ण और 128 को जोड़कर शेष लोगों के लिए जोड़ सकते हैं।

स्कोरिंग

कर रहे हैं 2 ** 31 = 2,147,483,6486 बाइट UTF-8 वर्णों और मूल कोड की लंबाई, 39 है, तो स्कोर है 39 / floor(2 ** 15.5) = 39 / 46340 = 0.0008416055243849806

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

{                                }""    e# Push the code block and an empty string.
                                    1$~ e# Execute a copy of the code block.
 _,                                     e# Push the length of the string.
   6/                                   e# Divide by 6 to get the number of chars.
      {64md}6*                          e# Perform modular division six times.
     [        ]                         e# Collect the results in an array.
               (124+\+                  e# Add 124 to the first element.
                      '�f+              e# Add 128 to all and cast each to Char.
                          +             e# Concatenate the strings.
                           `            e# Push a string representation.
                            "1$~"       e# Push '1$~' to complete the quine.

आपके प्रथम (निम्न) स्कोर के कारण मैं इसे स्वीकार कर रहा हूं । मैं इसकी अनुमति दूंगा।

6

CJam, 46 बाइट्स, 65504 ऐड, 65505 डेल, स्कोर 0.127424

{`-2<_0c#)!{'#/~(_)\+\+S+]'#*}*W<"
}_~"e# 
}_~

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

मूल रूप एक मानक सामान्यीकृत सीजैम क्वीन है। "लगभग क्वीन" करने के लिए, e#क्वीन के ब्लॉक के अंत में एक टिप्पणी है , जहां मैं कोड को प्रभावित किए बिना स्वतंत्र रूप से वर्ण जोड़ सकता हूं। ध्यान दें कि टिप्पणी में शुरू में एक ही स्थान है।

यह कार्यक्रम टिप्पणी के मोर्चे के पात्रों को जोड़ना जारी रखता है , जो !एएससीआईआई मूल्य के क्रम में शुरू होता है । CJam के चरित्र कोड 2 16 के बाद किसी बिंदु पर लिपटे हैं , यह एक अशक्त बाइट जोड़ देगा। एक बार ऐसा होने पर, प्रोग्राम टिप्पणी के अंत से बाइट्स निकालना शुरू कर देता है (जैसे कि हटाए गए वर्ण की स्थिति हमेशा अलग होती है) जब तक कि टिप्पणी खाली न हो।


5

CJam, 19 बाइट्स, 65536 ऐड, 0 डेल, स्कोर 0.074219

"a"{\)_)++`\"_~"}_~

सरल बेहतर है।

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