बिटवाइज़ साइक्लिक टैग का अनुकरण करें


11

चुनौती

किसी भी डिफ़ॉल्ट I / O प्रारूप में दो तारों को देखते हुए, निम्नलिखित करें:

नोट: चुनौती "डेटा" के रूप में पहली स्ट्रिंग को संदर्भित करेगी और दूसरी को "प्रोग्राम" के रूप में संदर्भित किया जाएगा।

  1. प्रोग्राम को एक अनंत स्ट्रिंग में बदलें जो कि केवल प्रोग्राम को असीम रूप से दोहराया जाता है (जैसे 10-> 1010101010...)। चुनौती इसे "अनंत कार्यक्रम" के रूप में संदर्भित करेगी।
  2. हालांकि डेटा गैर-रिक्त है, अनंत प्रोग्राम पर लूपिंग करते समय निम्नलिखित करें:

    ए। यदि वर्तमान कमांड "0" है, तो डेटा में बाएं-सबसे बिट को हटा दें। यदि डेटा खाली है, तो "0" कुछ भी नहीं करता है।

    ख। यदि वर्तमान कमांड "1" है, तो प्रोग्राम के अगले चरित्र को डेटा में जोड़ें यदि डेटा में बाईं ओर सबसे बिट एक है।

    सी। यदि डेटा अभी खाली नहीं है, तो डेटा को आउटपुट करें।

परीक्षण के मामलों

डेटा इनपुट के बाईं ओर है और प्रोग्राम दाईं ओर है।

100, 0 --> 00, 0
1111, 1 --> 11111, 111111, 1111111, ...
10, 011 --> 0, 0, 0
1110, 011 --> 110, 1101, 11010, 1010...

टिप्पणियाँ

  • डेटा और प्रोग्राम में केवल 0s और 1s शामिल होंगे
  • ऐसे डेटा / प्रोग्राम के लिए जो रुकते नहीं हैं, आपके प्रोग्राम को रुकने की आवश्यकता नहीं है।
  • इनपुट में डेटा और प्रोग्राम खाली नहीं होगा।
  • आपके पास कई अनुगामी और अग्रणी नई समाचार हो सकते हैं
  • मानक ढीले निषिद्ध हैं
  • आप किसी भी सुविधाजनक I / O प्रारूप का उपयोग कर सकते हैं

हमेशा , सबसे छोटा कोड जीतता है !


@Sanchises एक सीमा रेखा की तरह लगता है कि डुप्लिकेट, लेकिन आपको एक निश्चित पीढ़ी में परिणाम प्राप्त करना होगा और यह किसी भी चक्रीय टैग प्रणाली के लिए है।
MilkyWay90

पहले परीक्षण के मामले में, cmd पर 100जाता है , जिसकी परिभाषा "डेटा में बाएं-सबसे बिट हटाएं" है। की वाम-पंथी सा नहीं होता हो ? 1001001
योना

@Jonah ओह, यह याद किया
MilkyWay90

मामले में (बी), यदि आप परिशिष्ट करते हैं, तो क्या निर्देश सूचक सही एक या दो वर्णों को स्थानांतरित करता है?
18

@ शेपर यह सही चलता है। चुनौती वाला अनुभाग देखें।
MilkyWay90

जवाबों:


4

हास्केल, 77 71 62 बाइट्स

f@(d:e)#(p:q)=f:[e,f++take d q]!!p#q
_#_=[]
a!b=tail$a#cycle b

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

संपादित करें: -9 बाइट्स @xnor के लिए धन्यवाद।


1
पहली पंक्ति में, आप कर सकते हैं f:[e,f++take d q]!!p#q
xnor

2

सी # (विज़ुअल सी # इंटरएक्टिव कंपाइलर) , 82 बाइट्स

m=>n=>{for(int i=0;m!="";Print(m=n[i++]<49?m.Substring(1):m[0]>48?m+n[i]:m))n+=n;}

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


जिज्ञासा से बाहर, 48 और 49 के महत्व क्या हैं?
जोना

1
@ जोना 48 का ASCII मान है 0, और 49 का ASCII मूल्य है1
अज्ञानता

क्या आपको यहां के बजाय 0 और 1 का उपयोग नहीं करना चाहिए: P
ASCII-only

@ ASCII- केवल मैं एक स्ट्रिंग का उपयोग कर रहा हूं, एक सरणी नहीं।
को अज्ञान

@EmbodimentofIgnorance क्यों एक का उपयोग नहीं Listऔर Skip, या ऐसा ही कुछ
ASCII-केवल

1

जे , 65 बाइट्स

(([:(][echo)(}.@[)`([,{.@[#1{],])@.({.@]));1|.])&>/^:(0<0#@{>)^:5

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

मैं इसे बाद में गोल्फ कर सकता हूं। नोट 5अंत _में वास्तविक कार्यक्रम में अनन्तता होगी , लेकिन मैंने इसे छोड़ दिया है ताकि गैर-रोक उदाहरणों को आसान बनाया जा सके।



1

05AB1E , 24 21 बाइट्स

[¹Nèi¬i¹N>è«}ë¦}DõQ#=

प्रोग्राम को पहले इनपुट के रूप में और डेटा को दूसरे इनपुट.इनपुट के रूप में लेता है।

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

स्पष्टीकरण:

[             # Start an infinite loop:
 ¹Nè          #  Get the N'th digit of the first (program) input
              #  (NOTES: N is the index of the infinite loop;
              #          indexing in 05AB1E automatically wraps around)
    i         #  If this digit is 1:
     ¬        #   Push the head of the current data (without popping it)
              #   (will take the second (data) input implicitly if it's the first iteration)
      i     } #   If this head is 1:
       ¹N   #    Get the (N+1)'th digit of the first (program) input
           «  #    And append it to the current data
    ë }       #  Else (the digit is a 0 instead):
     ¦        #   Remove the first digit from the current data
              #   (will take the second input (data) implicitly if it's the first iteration)
 DõQ          #  If the current data is an empty string:
    #         #   Stop the infinite loop
 =            #  Print the current data with trailing newline (without popping it)

1

रूबी , 62 59 बाइट्स

->c,d{p(d)while(a,*c=c;b,*d=d;c<<a;[]!=d=[b]*a+d+c[0,a*b])}

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

किस तरह

  • कोड cऔर डेटा से पहला बिट प्राप्त dकरें, उन्हें कॉल करें aऔर b। डालaके अंत में वापस दिया c
  • अगर bकी शुरुआत में वापस डाल दियाda==1 । इसे छोटा किया जा सकता है[b]*a
  • अगर cके अंत में पहला बाइट रखोda==1 and b==1 । इसे छोटा किया जा सकता है c[0,a*b]
  • यदि हमारे पास अधिक डेटा है, तो प्रिंट करें और दोहराएं।


0

जेली , 40 बाइट्स

;€Ø2œịxØ1œị$Ʋ$Ḋ€2,1œị$?1¦ṙ€1$2¦µ⁺1ịGṄƲ¿Ḣ

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

मैंने मान लिया है कि नई अनुगामी ठीक हैं। मैं भी शून्य की दो सूचियों और इनपुट के रूप में लोगों की एक सूची के साथ चला गया हूं, और आउटपुट को stdout करने के लिए।


0

पायथन 1 , 75 बाइट्स

a,b=input()
while a:b=b[1:]+b[:1];a=[a[1:],a+b[:1]*a[0]][b[0]];print a or''

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


अच्छा! एक niggle: डेटा '100' के लिए, प्रोग्राम '0', यह एक बार खाली स्ट्रिंग प्रिंट करेगा: लेकिन नियम c कहता है "यदि डेटा अभी खाली नहीं है , तो डेटा को आउटपुट करें।"
चास ब्राउन

@ChasBrown छोटे टाइपो, मैं ओपी से स्पष्टीकरण की प्रतीक्षा कर रहा हूं यदि अनुगामी newlines ठीक हैं
अज्ञानता का अवतार

@ChasBrown ओपी का कहना है कि कई नए कदमों की अनुमति दी गई है, यहाँ
अज्ञानता का अवतार

लेकिन 1 और 0 के सरणियों पर स्विच करने के बाद, अब आप []उदाहरण, डेटा [1,0,0], प्रोग्राम पर एक नई पंक्ति के बजाय एक खाली सरणी मुद्रित कर रहे हैं [0]
चेस ब्राउन

1
अजगर 1 अजगर 2 काम नहीं करता है?
केवल


0

सी ++ (जीसीसी) , 294 289 272 बाइट्स

-22 बाइट्स @ceilingcat की बदौलत

#import<cstdio>
#import<queue>
void a(char*e,char*p){std::queue<char>d;for(;*e;)d.push(*e++);for(char*c=p;d.size();c=*++c?c:p){*c-49?d.pop():d.front()-48?d.push(c[1]?c[1]:*p):a("","");if(d.size()){for(int i=0;i++<d.size();d.pop())d.push(putchar(d.front()));putchar(32);}}}

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

बहुत सीधा एल्गोरिदम। डेटा को एक कतार में कॉपी करता है, और प्रोग्राम के माध्यम से बार-बार लूप करता है। एक "0" पर, यह कतार में पहला तत्व (पहला "बिट") निकालता है। 1 पर, यह प्रोग्राम के अगले "बिट" को डेटा में जोड़ता है यदि डेटा का पहला "बिट" 1. है तो यह डेटा के माध्यम से लूप करता है, इसे "बिट" द्वारा "बिट" प्रिंट करता है, और अंत में प्रिंट करता है क्रमिक डेटा प्रविष्टियों को अलग करने के लिए स्थान।


@ceilingcat चतुर (ab) का उपयोग c[1]! अपडेट किया गया।
नील ए।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.