विकिरण डिटेक्टर!


26

विकिरण-कठोर प्रोग्राम एक ऐसा प्रोग्राम है, जहाँ यदि कोड का कोई भी वर्ण हटा दिया जाता है, तो प्रोग्राम अभी भी उसी प्रकार कार्य करेगा। इस प्रश्न के लिए, हम एक ऐसा कार्यक्रम लिखेंगे जो पता चलता है कि यह विकिरणित है।

एक प्रोग्राम या फ़ंक्शन लिखें, जब कोई एकल बाइट हटा दी जाती है, जिसके परिणामस्वरूप प्रोग्राम उस बाइट और केवल उस बाइट को आउटपुट करेगा। ( आप कई बार बाइट का उत्पादन कर सकते हैं, जब तक आप किसी अन्य बाइट का उत्पादन नहीं करते हैं )

नियम:

  • कार्यक्रम में कम से कम 2 अलग-अलग बाइट्स शामिल हैं। (सिर्फ 0s का कोई समाधान नहीं;)
  • इससे कोई फर्क नहीं पड़ता कि मूल कार्यक्रम क्या करता है
  • कोई अपना स्रोत कोड नहीं पढ़ रहा है।
  • कोड अलग-अलग बाइट्स की संख्या पर स्कोर किया जाएगा, जहां सबसे अधिक राशि जीतती है। उदाहरण के लिए, abc= 3 अंक, ababba= 2 अंक, abcजीत।
    • टाई-ब्रेकर एक छोटा बाइट काउंट है, जिसके बाद पहले सबमिशन टाइम होता है

सौभाग्य!



मुझे वह लाइन याद आ गई। मुझ पर शर्म की बात है!
मेगो

5
"कोड को विभिन्न वर्णों की संख्या पर बनाया जाएगा, जहां सबसे अधिक राशि जीतती है।" मुझे उम्मीद है कि अधिकांश (यदि सभी नहीं) समाधानों में कहीं न कहीं स्ट्रिंग का कोई रूप होगा, जो कि वे वास्तव में समाधान को बदलने के बिना मनमाना पात्रों के साथ पैड कर सकते हैं (इसलिए यह सिर्फ इस बात के लिए नीचे आता है कि क्या आपकी भाषा एएससीआईआई, विस्तारित एएससीआईआई या यूनिकोड तक सीमित है) ।
मार्टिन एंडर

3
... सैंडबॉक्स सही नहीं है। :( / आप "अलग-अलग वर्णों" के बजाय "अलग-अलग बाइट्स" को माप सकते हैं, क्योंकि वर्ण एन्कोडिंग और अन्य समस्याओं से संबंधित हैं।
user202729

1
क्या प्रोग्राम कोई इनपुट ले सकता है?
gggg

जवाबों:


15

05AB1E , 9 7 बाइट्स (स्कोर 3)

22'''rr

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

हटाना a '

किसी भी 'हटाए जाने के साथ , 22''rrपरिणामस्वरूप 22 को स्टैक पर पहली चीज़ होगी और स्टैक 'पर अंतिम चीज़ होगी, जब दो बार उलट जाती है '

हटाना ए r

किसी भी rहटाए जाने के साथ , 22'''r22 का परिणाम होता है स्टैक पर पहली चीज़, स्टैक 'पर दूसरी चीज़ और स्टैक पर rअंतिम चीज़ होने के नाते। यह r, हालांकि, द्वारा एक preceeded गया था 'जो यह शाब्दिक स्ट्रिंग बनाता है "r"(जैसा कि आदेश का विरोध किया reverse stackहै, जो परोक्ष छपा है)।

हटाना a 2

किसी भी 2हटाए जाने के साथ , स्टैक पर 1 चीज होने के 2'''rrपरिणामस्वरूप 2, स्टैक पर '2 चीज होगी और अंत rमें स्टैक पर अंतिम चीज होगी, जो जब एक बार परिणाम में उलट जाती है 2

इसलिए, यह उत्तर मान्य है। हटाए गए कुछ भी नहीं के साथ यह आउटपुट है ', जो अप्रासंगिक है। यह 2 के अलावा किसी भी संख्या के लिए काम करता है।


वैधता परीक्षक बनाया गया है, आप इसका उपयोग 05AB1E * में प्रतिस्पर्धा करने के लिए कर सकते हैं।

* मुझे 100% यकीन नहीं है कि 05AB1E में कितने समाधान संभव हैं ...


अधिक मान्य समाधान जो बदतर या समान हैं

  • 1-पॉइंट (अमान्य)
  • 2-प्वाइंट
    • '''''''VV, '''''''XXया'''''''<any command that pops a without pushing>x2
    • का कोई भी अजीब # '3 उपरोक्त में से किसी भी # के बाद s1 (ईजी ऊपर '''''''''ssss)।
    • '''..1 से ऊपर की अवधि और '2 से ऊपर की किसी भी विषम संख्या के साथ ।
  • 3-प्वाइंट
    • '\\'''rr- के रूप में एक ही विचार है, 22'''rrलेकिन \'अंतिम स्टैक आइटम निकालें'।

'जैसा कि आप कहते हैं, सामान्य उत्पादन नियमों से अप्रासंगिक है। लेकिन यह विसंगतियों का पता लगाने के नाममात्र लक्ष्य को अमान्य करता है, जो थोड़ा हास्यास्पद है।
20

1
@ भीख मैं काफी कम से कम कुछ विकल्प में से एक है, मैं कुछ भी नहीं प्रिंट करता है।
मैजिक ऑक्टोपस Urn

1
@MagicOctopusUrn आपका स्वागत है। बस मुझे लगा कि मैं टिप्पणी करने के बजाय संपादित कर सकता हूं।
बोबाक्यू

@boboquack ने मेरा मूल टैग (@boboquack) काम किया, या क्या आपने इसे फिर से पोस्ट देखकर पाया? मैं यह पता लगाने की कोशिश कर रहा हूं कि जब उपयोगकर्ता ने कभी भी टिप्पणी नहीं की तो टैग कैसे काम करते हैं।
मैजिक ऑक्टोपस Urn

@boboquack मेरा मतलब था कि आपको मेरे "धन्यवाद" से एक सूचना मिली? इसके अलावा, हम शायद इस थ्रेड को तब तक हटा दें जब तक कि आपके "आपका स्वागत है" के लिए मेरा +1 नहीं हो जाता।
मैजिक ऑक्टोपस Urn

9

ब्रेनफक, स्कोर 3

हो सकता है कि नॉनकंपेटिंग हो क्योंकि आउटपुट केवल एक मेमोरी डंप के माध्यम से देखा जाता है।

+++++++++++++++++++++++++++++++++++++++++++++,-

मान लिया गया कि इनपुट खाली है और EOF सेल को अपरिवर्तित छोड़ देता है। एक दुभाषिया का उपयोग करता है जो मेमोरी को आउटपुट में डंप करता है, जैसे कि यह एक

एक प्लस निकालें, और मेमोरी "+" के लिए यूनिकोड मान है, अन्यथा यह "," के लिए यूनिकोड मान है। इसका एक नियम के एक जवाब की तुलना में अधिक हालांकि। "-" के साथ बहुत ही सुंदर। इस तथ्य का दुरुपयोग करता है कि ये तीनों चरित्र यूनिकोड-चरित्र में एक दूसरे के बाद हैं।


स्मार्ट, पूरी तरह से ईमानदार होने के लिए, यह एक खामियाजा न समझें।
मैजिक ऑक्टोपस Urn

आप मान रहे हैं ईओएफ सेल को अपरिवर्तित छोड़ देता है, हाँ?
जो राजा

हाँ, और जब तक कोई इनपुट न हो, तब तक यह ठीक होना चाहिए
å

मुझे यह अनुमति देने के लिए लुभाया जाता है, लेकिन क्या आपके पास एक दुभाषिया है जिसमें मेमोरी डंप है जो केवल परिवर्तित कोशिकाओं का उत्पादन करेगा और ईओएफ पर अपरिवर्तित सेल को छोड़ देगा?
जो किंग

1
copy.sh/brainfuck यह ठीक काम करना चाहिए। बस इसे चलाएं और "मेमोरी देखें" पर हिट करें।
होवार्ड न्यागर्ड

9

एक नाशपाती का पेड़, 256 अलग-अलग बाइट्स, 975 बाइट्स

दुर्भाग्य से, इस सवाल का कहीं न कहीं एक NUL बाइट को समाहित करने के लिए एक इष्टतम समाधान की आवश्यकता होती है (क्योंकि इसमें कहीं न कहीं सभी 256 बाइट्स शामिल हैं)। इसका मतलब यह है कि a) मैं आपको एक TIO लिंक नहीं दे सकता (क्योंकि TIO प्रोग्रामों में NUL को नापसंद करता है, या कम से कम, मैंने इसे टाइप करने का कोई तरीका नहीं निकाला है कि मेरा ब्राउज़र सामना कर सके), और b) I कार्यक्रम को स्टैक एक्सचेंज में शाब्दिक रूप से पेस्ट नहीं किया जा सकता है। इसके बजाय, मैंने xxdनीचे "कोड स्निपेट" लिंक के पीछे छिपा हुआ एक प्रतिवर्ती हेक्सडंप रखा है ।

व्याख्या

इस कार्यक्रम में तीन समान भाग होते हैं। (एक कार्यक्रम के कई समान हिस्सों को समेटना मेरे लिए कार्यक्रमों में एक विषय है ।) प्रत्येक ए पीयर ट्री को दुभाषिया की आवश्यकता होती है, ताकि दुभाषिया को यह पता चल सके कि कार्यक्रम के किन हिस्सों को चलाना है; यह प्रोग्राम के किसी भी हिस्से को घुमाता है, जिसके लिए चेकसम चलने से पहले शुरू होता है (या a partridgeअगर कोई चेकसम मैच नहीं करता है) प्रिंट करता है । इस मामले में, हमारे पास तीन भागों में से प्रत्येक पर एक चेकसम है, और इस तरह एक गैर-विकिरणित भाग शुरू हो जाएगा। तो हम मान सकते हैं कि कार्यक्रम में एक अनमॉडिफाइड हिस्सा है, इसके बाद दो अन्य भाग (जिनमें से एक को संशोधित किया गया है) हो सकता है।

प्रत्येक भाग एक नई पंक्ति से शुरू होता है, फिर निम्नलिखित कोड के साथ जारी रहता है (मैंने नीचे व्हाट्सएप और टिप्पणियाँ जोड़ी हैं):

$z{$/}++;      # In the hash table %z, set the key "\n" to 1
$/=$\=$@;      # Turn off newline handling when reading ($/ = undef);
               # Also don't add newlines when printing ($\ = undef)
               # $@ is set to undef by default
!$z{$_}?       #   If the current character is not in the hash table %z
  $z{$_}=1:    #   place it in the hash table %z
  delete$z{$_} #   else remove it from the hash table %z
for split//,   # for each character in
    <DATA>;    # the text appearing from the line beneath __DATA__ to EOF
print          # Print the following (no newline because $\ was undefined):
  keys%z>5?    # if the hash table %z contains more than 5 elements:
  "\n":        #   a newline; otherwise
  keys%z;      #   every key of %z, separated by spaces
__DATA__       # Start a string literal running from after this line to EOF

उसके बाद हर ऑक्टेट की एक कॉपी आती है, जो अब तक प्रोग्राम में इस्तेमाल नहीं की गई है (विशुद्ध रूप से स्कोर को चलाने के लिए), और अंत में चेकसम। (कोई नई अनुगामी नहीं है; पुर्जे एक नई रेखा से शुरू होते हैं लेकिन एक के साथ समाप्त नहीं होते हैं।)

यहां तीन अलग-अलग मामले हैं:

  • एक नई रेखा के अलावा एक वर्ण हटा दिया गया था । इस स्थिति में, यह दूसरे और तीसरे भाग में कई बार विषम संख्या में दिखाई देगा। इसका मतलब है कि इसे जोड़ा जाएगा और / या %zविषम समय से हटा दिया जाएगा , अंत में हैश तालिका में समाप्त होगा। वास्तव में, यह हैश तालिका में एकमात्र कुंजी होगी (जैसा कि दूसरे भाग की नई पंक्ति के बाद तीसरे भाग के अंत तक स्ट्रिंग चलती है, और हैश तालिका केवल एक नई पंक्ति के साथ शुरू हुई है), इसलिए यह ' मैं बस अपने आप ही बाहर मुद्रित किया जाएगा।
  • पहली या तीसरी नईलाइन हटा दी गई थी । इस मामले में, प्रोग्राम को इस तरह घुमाया जाएगा कि यह गायब होने वाली नई सुर्खियों में से तीसरा है, प्रभावी ढंग से दूसरे और तीसरे हिस्से को एक पंक्ति में विलय कर रहा है। इसके माध्यम से एक्सेस किए गए स्ट्रिंग शाब्दिक <DATA>में हर वर्ण एक समान संख्या में होता है, इसलिए हैश तालिका में इसकी मूल सामग्री, एक एकल नई पंक्ति और वह मुद्रित होगी।
  • दूसरी नईलाइन हटा दी गई थी । इस स्थिति में, प्रोग्राम को घुमाया नहीं जाएगा (क्योंकि पहले भाग में एक वैध चेकसम है), इसलिए दूसरे भाग को पहले भाग के समान लाइन पर ले जाया जाएगा। <DATA>केवल नीचे की पंक्ति से पढ़ना शुरू करता है __DATA__, इसलिए यह केवल तीसरे भाग को देखेगा। इसमें पाँच से अधिक वर्ण हैं जो कई बार विषम संख्या में दिखाई देते हैं, इसलिए यह नई पंक्ति को प्रिंट करने के लिए विशेष मामले को ट्रिगर करेगा।

सत्यापन

एक अंतिम चीज जिसे बहुत अधिक विकिरण-कठोर ए पियर ट्री प्रोग्राम के लिए जांचना पड़ता है कि क्या एक विलोपन कोड के अवांछित अनुभाग को सही ढंग से चेकसम में सही तरीके से करने और कोड को गलत स्थान पर घुमाने के लिए होता है; यह देखते हुए कि हम 32-बिट चेकसम का उपयोग कर रहे हैं, यह असंभव नहीं बल्कि असंभव है। मैंने यह सुनिश्चित करने के लिए निम्नलिखित ब्रूट-बल स्क्रिप्ट का उपयोग किया कि यह किसी भी विलोपन के लिए नहीं होता है:

use 5.010;
use IPC::Run qw/run/;
use warnings;
use strict;
use Data::Dumper;
$Data::Dumper::Useqq=1;
$Data::Dumper::Terse=1;
$Data::Dumper::Indent=0;
undef $/;
$| = 1;
my $program = <>;

for my $x (0 .. (length($program) - 1)) {
    my $p = $program;
    my $removed = substr $p, $x, 1, "";
    alarm 4;
    say Dumper($p);
    run [$^X, '-M5.010', 'apeartree.pl'], '<', \$p, '>', \my $out, '2>', \my $err;
    if ($out ne $removed) {
        print "Unexpected output deleting character $x ($removed)\n";
        print "Output: {{{\n$out}}}\n";
        print "Errors: {{{\n$err}}}\n";
        exit;
    }
}

say $program;
run [$^X, '-M5.010', 'apeartree.pl'], '<', \$program, '>', \my $out, '2>', \my $err;
if ($out ne '') {
    print "Unexpected output not mutating\n";
    print "Output: {{{\n$out}}}\n";
    print "Errors: {{{\n$err}}}\n";
    exit;
}

say "All OK!";

सत्यापन स्क्रिप्ट पुष्टि करती है कि यह कार्यक्रम सही ढंग से काम करता है।


7

स्टैक्स , 11 बाइट्स (4 का स्कोर)

'''cc'~~'dd

भागो और डिबग ऑनलाइन!

यह इस चुनौती का जवाब है कि पहले (कालानुक्रमिक रूप से) इस चुनौती का जवाब एक स्कोर से अधिक या उसके बराबर 4. शायद स्कोर अधिक हो सकता है।

Stax में, एक स्ट्रिंग शाब्दिक जो एक एकल वर्ण से बना होता है ', के साथ लिखा जाता है , इसलिए '', 'c, 'd, '~सभी स्ट्रिंग शाब्दिक होते हैं। के लिए इसी आदेश c dका ~मतलब है और मुख्य स्टैक के शीर्ष को डुप्लिकेट करते हैं, मुख्य स्टैक के शीर्ष को पॉप करते हैं, और मुख्य स्टैक के शीर्ष को पॉप करते हैं और क्रमशः इनपुट स्टैक पर धक्का देते हैं। इस चुनौती के लिए, इनपुट स्टैक आउटपुट को प्रभावित नहीं करता है और महत्वपूर्ण नहीं है, इसलिए हम कह सकते हैं dऔर ~समान हैं।

व्याख्या

कोड को कई भागों में विभाजित करना और उन्हें अलग से विचार करना सबसे अच्छा है।

जब इसके साथ छेड़छाड़ नहीं की जाती है, तो मुख्य स्टैक के लिए '''ccएक शाब्दिक 'और एक शाब्दिक धक्का देता है c, और शीर्ष को डुप्लिकेट करता है, इसलिए स्टैक (नीचे से) होगा c,c,'

जब छेड़छाड़ नहीं की जाती है, तो '~~शाब्दिक धक्का देता है ~और फिर इसे पॉप (और इनपुट स्टैक को धक्का देता है), जो मूल रूप से मुख्य स्टैक के लिए एक नो-ऑप है।

जब छेड़छाड़ नहीं की जाती है, तो 'ddशाब्दिक धक्का देता है dऔर फिर इसे पॉप करता है, मुख्य स्टैक के लिए एक और नो-ऑप।

कार्यक्रम के अंत में, चूंकि कोई स्पष्ट आउटपुट नहीं किया गया है, मुख्य स्टैक के शीर्ष को स्पष्ट रूप से मुद्रित किया जाएगा।

यदि प्रोग्राम के रूप में चल रहा है, अंतिम स्टैक अभी भी है c,c,'और आउटपुट होगा c

यदि पहला भाग बन जाता है ''cc, तो हमारे पास एक शाब्दिक 'और दो प्रतिलिपि निर्देश हैं, अंतिम स्टैक होगा ',','। यह देखते हुए कि दो अन्य भाग नो-ऑप हैं, परिणाम होगा '

यदि पहला भाग बन जाता है '''c, तो परिणाम मूल रूप से अपरिचित के साथ समान होता है, लेकिन cनकल नहीं होती है। तो ढेर होगा c,'। दो नो-ऑप के बाद स्टैक का शीर्ष है c

इसलिए हम पहले भाग में विकिरण का पता लगा सकते हैं।

दूसरा भाग और तीसरा भाग ठीक उसी तरह से काम करते हैं। मैं एक उदाहरण के रूप में तीसरा भाग लूंगा।

यदि तीसरे भाग के साथ छेड़छाड़ की जाती है, तो पहले दो भागों को रखा जाता है और तीसरे भाग को चलाने से पहले स्टैक होता है c,c,'

यदि तीसरा भाग बन जाता है 'd, तो एक शाब्दिक dमुख्य ढेर के शीर्ष पर धकेल दिया जाता है और आगे कुछ भी नहीं किया जाता है। मुख्य स्टैक का शीर्ष अब dआउटपुट है।

यदि तीसरा भाग बन जाता है dd, तो दो तत्व मुख्य स्टैक से पॉपप होते हैं और अब स्टैक का शीर्ष 'आउटपुट है।

इसलिए हम तीसरे भाग में विकिरण का पता लगा सकते हैं। उसी कारण से हम दूसरे भाग में विकिरण का पता लगा सकते हैं।


5

05AB1E , स्कोर 2, 6 बाइट्स

„"""„„

प्रिंट कभी-कभी हटाए गए चरित्र को दोगुना करते हैं। शामिल नहीं है '

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

पहले को हटाना

"""„„

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

सबसे पहले, हम स्टैक के लिए एक खाली स्ट्रिंग शाब्दिक धक्का देते हैं। फिर हम धक्का देते हैं „„, जो स्पष्ट रूप से मुद्रित होता है।

हटाना a "

„""„„

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

सबसे पहले, हम ""स्टैक को 2-char stringनिर्देश के साथ धक्का देते हैं । फिर हम एक और 2-वर्ण स्ट्रिंग प्राप्त करने का प्रयास करते हैं, लेकिन यह निरस्त है (मुझे यकीन नहीं है क्यों) और ""मुद्रित है।

दूसरा या तीसरा निकालना

„"""„

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

सबसे पहले, हम ""स्टैक को 2-char stringनिर्देश के साथ धक्का देते हैं । फिर हम धक्का देते हैं , जो स्पष्ट रूप से मुद्रित होता है।


5

जेली , 5 बाइट्स, स्कोर 2

”””ḷḷ

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

किसी भी हटाए जाने के साथ :

””ḷḷ

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

चरित्र एक बाइट चरित्र शाब्दिक शुरू होता है। यह प्रोग्राम शुरू होता है ””जिसके साथ स्ट्रिंग की पैदावार होती है युग्म यह के बाएं तर्क लेता है। स्ट्रिंग सिर्फ दो उदाहरणों से होकर गुजरती है

किसी भी हटाए जाने के साथ :

”””ḷ

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

इस प्रोग्राम ””में कैरेक्टर की पैदावार होती है और फिर कैरेक्टर की ”ḷपैदावार होती है।


अन्य उपाय

  • इस तरह के रूप में अन्य पात्रों के बहुत सारे aया oके स्थान पर काम किया है | इस प्रस्तुत करने के लिए।
  • ⁾⁾⁾⁾FFF। यह एक समान तरीके से काम करता है। की तरह है लेकिन यह एक दो बाइट स्ट्रिंग शाब्दिक शुरू होता है । "विकिरणित" कार्यक्रम हटाए गए बाइट को दो बार आउटपुट करते हैं जिसे टिप्पणियों में मान्य माना गया था।

यहां मैजिक ऑक्टोपस उर्न की वैधता चेकर का (बहुत कम फैंसी) जेली संस्करण है। आउटपुट का बायाँ स्तंभ हटा दिया गया वर्ण है और दाएँ स्तंभ परिणामी प्रोग्राम का आउटपुट है।


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