एक गीगर काउंटर बनाएं


29

गीगर काउंटर एक उपकरण है जिसका उपयोग विकिरण का पता लगाने के लिए किया जाता है।

हम एक गीगर काउंटर प्रोग्राम बना रहे हैं।

जैसा कि हम सभी जानते हैं, जब विकिरण एक कंप्यूटर प्रोग्राम को हिट करता है तो यह यादृच्छिक रूप से ठीक 1 बाइट को हटा देता है। तो एक Geiger काउंटर प्रोग्राम एक ऐसा प्रोग्राम है जो स्वयं कुछ नहीं करता है, लेकिन जब किसी भी बाइट को संशोधित प्रोग्राम प्रिंट को हटा दिया जाता है beep, तो विकिरण की उपस्थिति को इंगित करने के लिए।

उत्तर बाइट्स में कम बाइट के साथ बेहतर स्कोर किए जाएंगे। उत्तर कम से कम 1 बाइट होना चाहिए।

आपका प्रोग्राम beepकिसी नई पंक्ति के साथ प्रिंट कर सकता है या रिक्त आउटपुट के लिए एक ही नई पंक्ति को प्रिंट कर सकता है , जब तक कि यह लगातार ऐसा करता है। आपका कार्यक्रम भी के लिए एक अलग मामले का उपयोग कर सकते beepके रूप में इस तरह के BEEP, bEEPया Beepजब तक कि यह इतना लगातार करता है।



7
क्या हम वास्तविक बीप का उत्पादन करने के लिए बीईएल नियंत्रण चरित्र का उपयोग कर सकते हैं?
जो किंग

2
@JoKing मैंने विचार के साथ खिलवाड़ किया, यह मनोरंजक है, लेकिन मुझे कहना होगा कि नहीं। यह बहुत हद तक अलग है।
गेहूं जादूगर

2
मैं रेटिना में एक समाधान देखना चाहता हूं।
mbomb007

3
मैं यह पता लगाने की कोशिश कर रहा हूं कि एसएमबीएफ में यह कैसे करना है ... लेकिन दो कोशिकाओं की तुलना करने का एकमात्र तरीका उन्हें बदलना शामिल है। और SMBF में, जिन कोशिकाओं को आपको जांचने की जरूरत है, वे कोशिकाएं हैं जो कार्यक्रम वर्तमान में चल रहा है। तो यह हाइजेनबर्ग अनिश्चितता सिद्धांत की तरह है। तो आपको यह निर्धारित करना होगा कि क्या केवल नियंत्रण प्रवाह का उपयोग करके कुछ भी बदल गया है।
mbomb007

जवाबों:


24

हार गए , 303 293 263 253 238 228 बाइट

v^"peeb"<\>"beepvv"((>@@>>%%>>(((((([[[[[[\
>>>>>>>>>//>>>>>>>>>>>>>>/>>/>>>>>>>>>>>>>\\
>>>>>>>>//>>>>\>>>>>>>>>>/>>>>>>>>>>>>>>>>>\\
>/>>>>>>>/>>>>>>>>>>>>\>>>>>>>>>>>>>>>>>>>>>\\
>>>>>>>>>>>>>>>>>>>>>>\\>>>>\>>>>>>>>>>>>>>>>\

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

सत्यापन स्क्रिप्ट ( उपयोगकर्ता 202729 के उत्तर से उधार लिया गया )। दुर्भाग्य से यह एक समय में केवल आधे कोड का परीक्षण कर सकता है, लेकिन बाकी का आश्वासन दिया कि मैंने पूरे कार्यक्रम का परीक्षण किया है।

आउच, यह एक कठिन था। मैं WW के हटाए गए उत्तर को उद्धृत करूंगा:

इस चुनौती के लिए लॉस्ट शायद सबसे दिलचस्प भाषा है। लॉस्ट में पॉइंटर की स्टार्ट लोकेशन और डायरेक्शन पूरी तरह से रैंडम है, इस प्रकार नियतकारी कार्यक्रम बनाने के लिए आपको हर संभव स्टार्ट लोकेशन और डायरेक्शन का हिसाब रखना चाहिए। इसी समय, इस चुनौती की प्रकृति से आपको किसी भी एकल बाइट को हटाने के लिए भी खाता होना चाहिए।

दुर्भाग्य से, उनके जवाब ने नई कहानियों को हटाने पर ध्यान नहीं दिया, जिसने सब कुछ खराब कर दिया।

स्पष्टीकरण:

(ध्यान दें कि कुछ बाइट्स इधर-उधर हो सकते हैं)

पहले कोड की सामान्य संरचना के बारे में बात करते हैं:

v^^"peeb"<<\/"beepvv"((>>>@@>>%%>>(((((([[[[[[[\       Processing line
>>>>>>>>>>>//>>>>>>>>>>>>>>>>>>>/>>>>>>>>>>>>>>\\      Beep line
>>>>>>>>>//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\\     Back-up beep line
>//>>>>>>>>>>>>>>>>>>>>\\>>>>>>>>>>>>>>>>>>>>>>>>\\    Back-up return line
>>>>>>>>>>>>>>>>>>>>>>>>\\>>>>>>\>>>>>>>>>>>>>>>>>\    Return line

सब कुछ लेकिन प्रोसेसिंग लाइन पूरी तरह से >या तो एक से बना होना चाहिए \/। क्यूं कर? खैर, एक उदाहरण के रूप में, आइए एक नई रूपरेखा निकालें:

v^^"peeb"<<\/"beepvv"((>>>@@>>%%>>(((((([[[[[[[\>>>>>>>>>>>//>>>>>>>>>>>>>>>>>>>/>>>>>>>>>>>>>>\\
>>>>>>>>>//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\\
>//>>>>>>>>>>>>>>>>>>>>\\>>>>>>>>>>>>>>>>>>>>>>>>\\
>>>>>>>>>>>>>>>>>>>>>>>>\\>>>>>>\>>>>>>>>>>>>>>>>>\

पहली पंक्ति है जिस तरह से ब्लॉक के बाकी से अधिक समय। यदि एक >\/लंबवत आंदोलन के साथ एक सूचक गैर- चरित्र पर स्पॉन करता है , तो यह एक अनंत लूप में फंस जाएगा।


प्रत्येक लाइन के अंत में सबसे बड़ा रेडिएशन डिटेक्टर हिस्सा है।

 \
 \\
 >\\
 >>\\
 >>>\

आम तौर पर पहली पंक्ति से गुजरने वाला एक आईपी अंतिम पंक्ति से बाहर निकल जाएगा। हालाँकि, यदि रेखा पर कोई भी वर्ण हटा दिया जाता है, तो वह रेखा किसी एक की तरह बदल जाती है, जैसे:

 \
 \\
 >\\
 >\\
 >>>\

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

वहाँ से, पहली चार पंक्तियों में से प्रत्येक दूसरी पंक्ति पर पुनर्निर्देशित होगी:

v
>>>>>>>>>>
>>>>>>>>//
>/

जिसके बाद दोनों में से किसी एक में प्रवेश होगा beep

v^"peeb"<<\/"beepvv"((>
>>>>>>>>>>//

यदि पहले beepएर में किसी भी बाइट को हटा दिया गया है, तो यह दूसरे पर जाता है:

v^^"peb"<<\/"beepvv"((>
>>>>>>>>>>>//

दोनों beepers तब पहली पंक्ति और समाप्ति पर वापस जाते हैं @

कुछ अन्य विविध भाग:

(((((([[[[[[[ढेर स्पष्ट करने के लिए जब सूचक उद्धरण और समाप्त होता है ढेर करने के लिए पूरे पहली पंक्ति धक्का अप की एक जोड़ी के अंदर शुरू होता है प्रयोग किया जाता है। इसे दुर्भाग्य से लंबा होना है क्योंकि पहली नई पंक्ति को पहली पंक्ति को दो बार आकार बनाने के लिए हटाया जा सकता है। beepउद्धरण के बजाय प्रयोग अंकगणित उत्पन्न करने में प्रयोग लंबे समय तक समाप्त हो गया।

\और /लाइनों में फैले रहा है वहाँ गोल्फ सही लाइनों के लिए सूचक पुनः निर्देशित द्वारा कोड के शीर्ष पंक्ति में बाइट्स करने के लिए कर रहे हैं। चूंकि अधिकांश निचली रेखाएं केवल भराव हैं, केवल शीर्ष रेखा ही गोल्फ होने में सक्षम है। अगर किसी के पास एक छोटे विकिरण सबूत स्टैक क्लीयर के लिए कोई विचार है तो मुझे अब क्या मिला, टिप्पणी करने के लिए स्वतंत्र महसूस करें।


जिज्ञासा से बाहर, चैट में मैंने जो आंशिक उत्तर पोस्ट किया, वह कितना उपयोगी था? मैंने पहले के संस्करणों में कुछ समानताएं देखीं, और मैं जानना चाहूंगा कि क्या मैं सही रास्ते पर था।
गेहूं जादूगर

@ मैं पहले से ही उस पर काम कर रहा था, लेकिन धक्का और इस तथ्य \/को अलग करने के लिए beepकि उद्धरणों में से केवल एक के लिए निकास खंड की मदद की जरूरत थी
जो किंग

20

हेक्सागोनी , 38 बाइट्स

.....;p;<>b;e;/<b;e;;p...@@.......;@..

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

सत्यापन कार्यक्रम।


व्याख्या

हम हेक्सागोन की ऑटो-पहचान का उपयोग यहां हेक्सागोन की लंबाई-लंबाई से करते हैं।

यदि कोई बाइट्स नहीं हटाए जाते हैं, तो प्रोग्राम की लंबाई 4 है और इस तरह दिखता है:

बिना किसी बाइट के प्रोग्राम को हटाया गया

यदि फिर भी, एक बाइट हटा दिया जाता है। 2 मामले हैं।

  1. हटाई गई बाइट दूसरी के बाद है <

    निष्पादन प्रवाह होगा:

    अंतिम बाइट के साथ कार्यक्रम हटा दिया गया

    @5 वीं पंक्ति पर लगातार 2 हैं , इसलिए यदि उनमें से एक को भी हटा दिया जाता है, तो आईपी सुरक्षित रूप से हिट करेगा @

  2. हटाई गई बाइट दूसरी या उससे पहले है <

    फिर दूसरी छमाही बरकरार रहेगी, और आईपी अब उसके द्वारा ऊपर की ओर पुनर्निर्देशित नहीं किया जाएगा <। निष्पादन प्रवाह की छवि:

    दूसरे <code> << / code> के साथ प्रोग्राम हटाया गया


19

हेक्सागोनी , 34 29 बाइट्स

//..>;e;<b@;p;/|/;e;;\.b@;p<@

इसे ऑनलाइन आज़माएं! सत्यापन!

स्पष्टीकरण:

यहाँ HexagonyColorer का उपयोग करके एक उचित षट्भुज में स्वरूपित सामान्य कोड है :

कोई कैंसर नहीं ...

//शुरुआत में डबल यह सुनिश्चित करता है कि यह रास्ता हमेशा लिया जाए। यदि किसी वर्ण को हटा दिया @जाता है, तो उसे रास्ते से हटा दिया जाता है, या तो उसे वापस स्थानांतरित कर दिया जाता है या स्वयं हटा दिया जाता है:

कैंसर!

इस मामले में, हमने एक चरित्र को हटा दिया है |, जो इसे इस पथ का अनुसरण करता है, मुद्रण beep:

पहली बीप

यदि हम इसके बजाय |(या |स्वयं) से पहले किसी वर्ण को निकालते हैं , तो हम अन्य बीप प्रिंटर का अनुसरण करते हैं:

दूसरी बीप

हमने तब सभी संभावनाओं के लिए जिम्मेदार ठहराया है और हम केवल beepकार्यक्रम के गैर-विकिरणित भागों का उपयोग कर रहे हैं।


13

सेल्फ-मॉडिफ़ाइंग ब्रेनफक , 73 63 बाइट्स

<<[[[[<<]]>[[.>>..>>.[,>]]]]   bbeepp+[<<<]>>[[>]>>>.>>..>>.,+]

इसे ऑनलाइन आज़माएं! सत्यापन!

कोड के बीच में रिक्त स्थान वास्तव में NUL बाइट्स का प्रतिनिधित्व कर रहे हैं।

स्पष्टीकरण:

कोड को बीच में 3 NUL बाइट्स द्वारा दो खंडों में विभाजित किया गया है। दोनों मूल रूप से प्रिंट करते हैं beepयदि अन्य अनुभाग विकिरणित है (कुछ अपवादों के साथ)।

सबसे पहले, <<[[शुरुआत में यह सुनिश्चित करना है कि सभी ]एस किसी भी समय मेल खाते हैं। [एक मिलान के लिए देखने के लिए प्रयास नहीं करेंगे ], तो सेल, सकारात्मक है, जबकि ]रों करना । यदि कोई ]इन कोष्ठकों में से किसी एक पर वापस कूदता है, तो यह आमतौर पर वापस सीधे कूदता है क्योंकि कोशिका है 0

अगला भाग, [[<<]]>फिर जाँचता है कि क्या खंड 2 की लंबाई समान है। यदि ऐसा है, तो यह खंड 1 के दूसरे आधे भाग को निष्पादित करता है, जो धारा 2 की शुरुआत में beepउपयोग करता है bbeepp

[[.>>..>>.[,>]]]]

यह तब खंड 2 के सभी को साफ करता है ताकि यह निष्पादित न हो।

खंड 2 में, हम जाँचते हैं कि खंड 1 की लंबाई और NUL बाइट्स किसके 3साथ विभाज्य हैं +[<<<]>>

[[>]>>>.>>..>>.,+]

इसी तरह, हम प्रिंट करते हैं beep


10

Z80Golf , 53 36 34 बाइट्स

-16 बाइट्स धन्यवाद @Lynn
-2 बाइट थैंक्यू @Neil

चूँकि यह सिर्फ Z80 मशीन कोड है, इसलिए इस में बहुत सारे xxd -runprintables हैं, इसलिए एक-के- बाद एक विषमताएं हैं:

00000000: ddb6 2120 10dd b615 280c 003e 62ff 3e65  ..! ....(..>b.>e
00000010: ffff 3e70 ff76 003e 62ff 3e65 ffff 3e70  ..>p.v.>b.>e..>p
00000020: ff76                                     .v

इसे ऑनलाइन आज़माएं! (पायथन में संपूर्ण परीक्षक)

व्याख्या

z80golf अराजकता गोल्फ के काल्पनिक Z80 मशीन, जहां call $8000एक putchar है, call $8003एक getchar है, haltदुभाषिया से बाहर निकलें बनाता है, अपने कार्यक्रम पर रखा गया है $0000, और सभी अन्य स्मृति शून्य से भर जाता है। असेंबली में रेडिएशन प्रूफ बनाना काफी कठिन है, लेकिन एक पीढ़ी-दर-पीढ़ी उपयोगी तकनीक एक-एक बेतुके निर्देशों का उपयोग कर रही है। उदाहरण के लिए,

or c        ; b1    ; a = a | c

सिर्फ एक बाइट है, और a | c | c == a | c, इसलिए इसे केवल निर्देश दोहराकर विकिरण-सबूत बनाया जा सकता है। Z80 पर, एक 8-बिट तत्काल लोड दो बाइट्स है (जहां तत्काल दूसरी बाइट में है), इसलिए आप कुछ मानों को रजिस्टर में भी मज़बूती से लोड कर सकते हैं। यह वही है जो मैंने मूल रूप से कार्यक्रम की शुरुआत में किया था, इसलिए आप उत्तर के निचले भाग में संग्रहीत किए गए लंबे वेरिएंट का विश्लेषण कर सकते हैं, लेकिन तब मुझे महसूस हुआ कि एक सरल तरीका है।

कार्यक्रम में दो स्वतंत्र पेलोड होते हैं, जहां उनमें से एक विकिरण से क्षतिग्रस्त हो सकता था। मैं जांच करता हूं कि क्या एक बाइट को हटा दिया गया था, और क्या हटाए गए बाइट पेलोड की दूसरी प्रति से पहले था, कुछ निरपेक्ष स्मृति पतों के मूल्यों की जांच करके।

अगर कोई विकिरण नहीं देखा गया था, तो सबसे पहले हमें बाहर निकलने की जरूरत है:

    or a, (ix+endbyte) ; dd b6 21 ; a |= memory[ix+0x0021]
    jr nz, midbyte     ; 20 10    ; jump to a halt instruction if not zero

यदि किसी भी बाइट को हटा दिया गया था, तो सभी बाइट्स शिफ्ट $0020हो जाएंगे और अंतिम होगा 76, इसलिए $0021एक शून्य होगा। वस्तुतः कोई अतिरेक नहीं होने पर भी हम कार्यक्रम की शुरुआत को विकीर्ण कर सकते हैं:

  • यदि जंप ऑफसेट $10हटा दिया जाता है, तो विकिरण सही ढंग से पता लगाया जाएगा, कूद नहीं लिया जाएगा और ऑफसेट कोई फर्क नहीं पड़ेगा। अगले निर्देश के पहले बाइट का उपभोग किया जाएगा, लेकिन चूंकि यह बाइट हटाने के लिए प्रतिरोधी होने के लिए डिज़ाइन किया गया है, इसलिए यह कोई फर्क नहीं पड़ता।
  • यदि जम्प ओपकोड $20को हटा दिया जाता है, तो जंप ऑफ़सेट के $10रूप में डिकोड हो जाएगा djnz $ffe4(अगले निर्देश बाइट का उपयोग ऑफ़सेट के रूप में - ऊपर देखें), जो कि लूप इंस्ट्रक्शन है - डीक्रिमेंट बी, और परिणाम शून्य न होने पर कूदें। क्योंकि ffe4-ffffशून्य ( nopएस) से भरा है , और कार्यक्रम काउंटर चारों ओर घूमता है, यह कार्यक्रम की शुरुआत को 256 बार चलाएगा, और फिर अंत में जारी रहेगा। मैं इस काम से चकित हूं।
  • $ddवसीयत को हटाने से स्निपेट के बाकी डिकोड जैसे हो जाएंगे or (hl) / ld ($1020), hl, और फिर कार्यक्रम के अगले भाग में स्लाइड करें। orकिसी भी महत्वपूर्ण रजिस्टरों में परिवर्तन नहीं होगा, और क्योंकि HL इस बिंदु पर शून्य है, लिखने भी रद्द हो जाएगा।
  • $b6वसीयत को हटाने से बाकी डिकोड हो जाएगा ld ($1020), ixऔर ऊपर के रूप में आगे बढ़ेगा।
  • $21विल को हटाने से डिकोडर को खा जाएगा $20, djnzव्यवहार को ट्रिगर करेगा ।

ध्यान दें कि शून्य के लिए एकीकृत चेक के लिए धन्यवाद or a, (ix+*)पर दो बाइट्स का उपयोग करना सहेजता ld a, (**) / and a / and aहै।

अब हमें यह तय करने की आवश्यकता है कि निष्पादित करने के लिए पेलोड की दो प्रतियों में से कौन सी है:

    or (ix+midbyte)  ; dd b6 15
    jr z, otherimpl  ; 28 0c
    nop              ; 00
    ; first payload
    ld a, 'b'        ; 3e 62
    rst $0038        ; ff
    ld a, 'e'        ; 3e 65
    rst $0038        ; ff
    rst $0038        ; ff
    ld a, 'p'        ; 3e 70
    rst $0038        ; ff
midbyte:
    halt             ; 76
otherimpl:
    nop              ; 00
    ld a, 'b'        ; 3e 62
    ; ...            ; ...
    rst $0038        ; ff
endbyte:
    halt             ; 76

दो प्रतियों को एक एनओपी द्वारा अलग किया जाता है, क्योंकि एक रिश्तेदार कूद का उपयोग उनके बीच चयन करने के लिए किया जाता है, और विकिरण कार्यक्रम को इस तरह से स्थानांतरित कर सकता है जो गंतव्य के बाद पहले बाइट को छोड़ देगा। इसके अतिरिक्त, एनओपी को एक शून्य के रूप में एन्कोड किया गया है, जिससे शिफ्ट बाइट्स का पता लगाना आसान हो जाता है। ध्यान दें कि यदि स्विच स्वयं ही दूषित है, तो इससे कोई फर्क नहीं पड़ता कि कौन सा पेलोड चुना गया है, क्योंकि तब दोनों प्रतियां सुरक्षित हैं। चलो यह सुनिश्चित करते हैं कि यह एकतरफा स्मृति में नहीं जाएगा, हालांकि:

  • हटाया जा रहा है $dd से अगले दो बाइट्स डिकोड हो जाएंगे or (hl) / dec d। क्लोबर्स डी। कोई बड़ी बात नहीं है।
  • हटाने के $b6लिए एक अनिर्दिष्ट अब एन्कोडिंग पैदा करेगाdec d । ऊपर की तरह।
  • हटाने $15के $28बजाय ऑफसेट के रूप में पढ़ा जाएगा , और निष्पादन नीचे के रूप में आगे बढ़ेगा $0c
  • जब $28गायब हो जाता है, के $0cरूप में डिकोड किया जाता है inc c। पेलोड की परवाह नहीं है c
  • हटाना $0c- यही nop के लिए है। अन्यथा, पेलोड के पहले बाइट को जंप ऑफसेट के रूप में पढ़ा गया होगा, और यह कार्यक्रम एकतरफा मेमोरी में कूद जाएगा।

पेलोड अपने आप में बहुत सरल है। मुझे लगता है कि स्ट्रिंग का छोटा आकार इस दृष्टिकोण को लूप से छोटा बनाता है, और इस तरह से स्थिति-स्वतंत्र करना आसान है। eमें beepदोहराता है, इसलिए मैं दूर एक दाढ़ी कर सकते हैं ld a। इसके अलावा, क्योंकि बीच सभी स्मृति $0038और $8000ध्यान केंद्रित किया है, मैं इसे माध्यम से आते हैं और एक छोटी उपयोग कर सकते हैं rstके संस्करण callअनुदेश, जो केवल के लिए काम करता है $0, $8, $10और इतने पर, अप करने के लिए $38

पुराना दृष्टिकोण

64 बाइट्स

00000000: 2e3f 3f2e 3f3f 7e7e a7a7 201f 1e2b 2b1e  .??.??~~.. ..++.
00000010: 2b2b 6b00 7ea7 2814 003e 62cd 0080 3e65  ++k.~.(..>b...>e
00000020: cd00 80cd 0080 3e70 cd00 8076 003e 62cd  ......>p...v.>b.
00000030: 0080 3e65 cd00 80cd 0080 3e70 cd00 8076  ..>e......>p...v

58 बाइट्स

00000000: 2e39 392e 3939 7e7e a7a7 2019 3a25 00a7  .99.99~~.. .:%..
00000010: 2814 003e 62cd 0080 3e65 cd00 80cd 0080  (..>b...>e......
00000020: 3e70 cd00 8076 003e 62cd 0080 3e65 cd00  >p...v.>b...>e..
00000030: 80cd 0080 3e70 cd00 8076                 ....>p...v

53 बाइट्स

यह संपादित इतिहास में एक व्याख्या है, लेकिन यह बहुत अलग नहीं है।

00000000: 3a34 00a7 a720 193a 2000 a728 1400 3e62  :4... .: ..(..>b
00000010: cd00 803e 65cd 0080 cd00 803e 70cd 0080  ...>e......>p...
00000020: 7600 3e62 cd00 803e 65cd 0080 cd00 803e  v.>b...>e......>
00000030: 70cd 0080 76                             p...v

क्या होगा अगर: बीप के बजाय कोई भी गैर-खाली आउटपुट ठीक था

1 बाइट

v

haltकार्यक्रम को सामान्य रूप से करें, लेकिन यदि विकिरण इसे हटा देता है, तो मेमोरी शून्य से भरी होगी, $8000कई बार अनंत संख्या में निष्पादित होती है, बहुत सारे नल बाइट्स को प्रिंट करती है।


चूंकि aशून्य पर शुरू होता है, आप के or a, (N);बजाय उपयोग नहीं कर सकते ld a, (N); and a;? ऐसा लगता है कि आप इस तरह से बाइट्स के एक जोड़े को बचा सकते हैं।
नील

@ नील अच्छा सवाल! दुर्भाग्य से, Z80 पर, केवल लोड निर्देश इस तरह पते ले सकते हैं।
NieDzejkob

ओह, यह बहुत लंबा हो गया है क्योंकि मैंने कोई भी Z80 प्रोग्रामिंग की है ... शायद मैं सोच रहा था or a, (ix + N)?
नील

@ नील वास्तव में मौजूद है, और IX शून्य पर भी शुरू होता है ... दुर्भाग्य से, उस क्षेत्र में एक बाइट को बचाने से बाइट्स को इस तरह से शिफ्ट किया 20 19जाता है कि शुरुआत में यह बन जाता है 20 18, और 20एक बिना शर्त कूद को पीछे की तरफ हटा देता है, इसलिए एनओटी को कार्यक्रम में पहली छलांग के बाद जोड़ा जाना है, बाइट सेव को उलट देना है।
NieDzejkob

आह, यह शर्म की बात है। हालांकि जाँच के लिए धन्यवाद!
नील

8

> <> , 23 बाइट्स

<|o<"beep"/
>o<"beep"<\

इसे ऑनलाइन आज़माएं! सत्यापन।

यह वास्तव में आश्चर्यजनक रूप से आश्चर्यजनक है कि मुझे यह कितना कम मिला। एक त्रुटि के साथ समाप्त होता है।

गैर-गलत संस्करण, 29 बाइट्स

<<;oooo"beep"/
 ;oooo"beep"<\

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


4

क्लेन , प्रत्येक टोपोलॉजी में से एक, कुल 291 बाइट्स

देखने के बाद WW के जवाब का उपयोग कर001टोपोलॉजी , मैंने यह देखने का फैसला किया कि प्रत्येक टोपोलॉजी के लिए गीगर काउंटर करना कितना कठिन होगा। (स्पॉयलर: बहुत कठिन। यह पता लगाना मुश्किल है कि पॉइंटर हाथ के इशारों के बिना कहां जाएगा जो मुझे ऐसा दिखता है कि मुझे पता चल रहा है कि कौन सा हाथ मेरे बाएं है)

सत्यापन!

(मैंने एक कार्यक्रम लिखने के बारे में भी सोचा जो सभी टोपोलॉजी पर एक मान्य गीगर काउंटर है, लेकिन इसके लिए इंतजार करना पड़ सकता है। यदि कोई और भी प्रयास करना चाहता है, तो मैं 500 प्रतिनिधि इनाम की पेशकश कर रहा हूं)

000 और 010, 21 बाइट्स

<<@"peeb"/
.@"peeb"<\

ऑनलाइन कोशिश करें! और ऑनलाइन 010 की कोशिश करो!

यह मेरे ><>समाधान से पोर्ट किया गया है । यह स्पष्ट रूप से काम करता है 000, क्योंकि यह अधिकांश 2D भाषाओं के लिए डिफ़ॉल्ट टोपोलॉजी है, लेकिन मुझे आश्चर्य था कि यह भी काम करता है 010

001 और 011, 26 बाइट्स

!.<<@"peeb"/
.@"peeb"..<..

001 ऑनलाइन कोशिश करो! और ऑनलाइन 011 की कोशिश करो!

यह एक सीधे डब्ल्यूडब्ल्यू के जवाब से कॉपी किया गया है । धन्यवाद!

100, 21 बाइट्स

//@"peeb"\
@"peeb".</

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

101, 21 बाइट्स

//@"peeb"/
@"peeb".<!

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

110, 26 बाइट्स

<.<@"peeb"\\
.\@."peeb".\<

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

111, 24 बाइट्स

<<@"peeb"<\
...@"peeb"//

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

200, 21 बाइट्स

<<@"peeb"\
@"peeb".!/

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

201, 31 बाइट्स

\\.\.@"peeb"</./
./...@"peeb"<\

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

अब तक सबसे ज्यादा कष्टप्रद।

210, 26 बाइट्स

/\\@"peeb"</\
/@.."peeb"<\

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

211, 27 बाइट्स

\\."peeb"((</
!/@@<"peeb"<\

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

केवल वही जहां मुझे दाईं ओर से बीपर में प्रवेश करना था।


मैं ख़ुशी से उस इनाम को दूसरा दूंगा।
गेहूं जादूगर


2

रूनिक एनकाउंटर , 29 बाइट्स

>>yyLL@"peeb"/
     @"peeb"L\

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

अनिवार्य रूप से क्लेन 000 उत्तर या> <> उत्तर के समान है (मैंने क्लेन एक के साथ शुरू किया था)। वास्तव में केवल बदलाव की जरूरत थी< में Lऔर .में  (अन्यथा एक विलोपन एक गैर संकलन कार्यक्रम में परिणाम होगा की जरूरत 2,) (कमांड प्रतीकों में से अनुवाद), आईपी प्रवेश बिंदुओं डालने और डेला की प्रविष्टि yआदेश प्राप्त करने के लिए विलय करने के लिए दो आईपी (इस प्रकार केवल एक मुद्रण beep), फिर से, दो की जरूरत है। इसके अलावा लाइन की लंबाई समान रखने के लिए अतिरिक्त एनओपी सम्मिलित करना आवश्यक है। क्लेन आसानी से भी उपयोग करता है@ "प्रिंट और समाप्ति" के लिए ।

निचले बाएँ में व्हाट्सएप का उपयोग करने की कोई क्षमता नहीं, क्योंकि दिशा बदलने के लिए कोई भी परावर्तक विकिरण का पता लगाने की क्षमता को बाधित करता है। उदाहरण के लिए (26 बाइट्स, विकिरणित y):

/yLL@"peeb"/
\<<  @"peeb"L\

कोई भी आउटपुट प्रिंट नहीं करता है, बेंट एंट्री सेगमेंट के कारण निचली रेखा के टर्मिनेटर में फिर से प्रतिबिंब बनता है।



1

वम्पस , 37 34 32 31 बाइट्स

777*7..@ $o&4"beep"|"@peeb"4&o@

इसे ऑनलाइन आज़माएं! सत्यापन!

यह समाधान इस तथ्य का उपयोग करता है कि . कार्यक्रम की लंबाई के लिए एक मापांक मापता है।

वैकल्पिक रूप से बाइट्स की एक ही राशि के लिए


" @o&4"beep"}@
@o&4"beep"}$}  

इसे ऑनलाइन आज़माएं! सत्यापन!

यह एक अजीब और यहां तक ​​कि लंबाई के लिए सूचक की दिशा में अंतर का उपयोग करता है। (मैं वास्तव में नहीं जानता कि "नई लाइन हटाए जाने पर पहला वास्तव में कैसे काम करता है)


1

क्लेन (001), 26 बाइट्स

!.<<@"peeb"/
.@"peeb"..<..

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

सत्यापित करें!

व्याख्या

यह कार्यक्रम क्लेन की अनूठी टोपोलॉजी का विशेष रूप से 001 टोपोलॉजी का लाभ उठाता है, जो क्लेन बोतल है।

अनएडिटेड प्रोग्राम निष्पादन पथ का अनुसरण करता है:

नारंगी का रास्ता

कार्यक्रम से एक बाइट को हटाने से कार्यक्रम 4 तरीकों से प्रभावित हो सकता है (प्रत्येक एक अलग रंग में):

कार्यक्रम अनुभाग

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

लाल पथ

यदि नीला बाइट हटा दिया जाता है तो हमें बहुत ही सरल रास्ता मिल जाता है:

यहाँ छवि विवरण दर्ज करें

यदि नई लाइन हटा दी जाती है तो हमें रास्ता मिल जाता है:

हरा पथ

पीला पथ थोड़ा और अधिक जटिल है। चूंकि नीचे की रेखा शीर्ष रेखा से एक लंबी होती है, जब प्रोग्राम को निष्पादन की शुरुआत में चुकता किया जाता है, तो उन्हें एक ही आकार बनाने के लिए पहली पंक्ति के अंत में एक आभासी चरित्र जोड़ा जाता है। यदि दूसरी लाइन पर किसी भी बाइट को हटा दिया जाता है तो लाइन को छोटा कर दिया जाता है और उस वर्चुअल कैरेक्टर को नहीं जोड़ा जाता है। यह महत्वपूर्ण है क्योंकि !आम तौर पर आभासी चरित्र पर कूदता है, लेकिन इसकी अनुपस्थिति में इसके /बजाय कूदता है ।

पीला पथ


1
आप बंदरगाह मेरी सका ><>में समाधान 000के लिए 21 बाइट्स
जो राजा

@JoKing मुझे लगता है कि यह अपने जवाब के रूप में बेहतर होगा।
गेहूं जादूगर

1

बैकहैंड , 25 21 बाइट्स

vv""ppeeeebb""jjHH@

इसे ऑनलाइन आज़माएं! सत्यापन!

यह बैकहैंड की क्षमता का उपयोग करता है ताकि हर चरण को छोड़ने के लिए पॉइंटर स्टेप वैल्यू को बदल दिया जा सके और बड़े पैमाने पर रिड्यून्सी समस्या को हल किया जा सके। यह तब jआदेश की जांच करता है कि यदि कोड अंतिम वर्ण (या @, पड़ाव) पर कूदकर कोड इर्रिडिएटेड है , यदि नहीं, और यदि अंतिम हो तो जंप कर रहा Hहै।

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