Bitsel Döngüsel Etiketi Benzet


11

Meydan okuma

Herhangi bir varsayılan G / Ç biçiminde iki dize verildiğinde aşağıdakileri yapın:

NOT: Zorluk ilk dizeye "veri" ve ikincisi "program" olarak anılacaktır.

  1. Programı sonsuz bir şekilde yinelenen sonsuz bir dizeyle değiştirin (örn. 10-> 1010101010...). Zorluk buna "sonsuz program" olarak değinecektir.
  2. Veriler boş olmasa da, sonsuz program üzerinde döngü yaparken aşağıdakileri yapın:

    a. Geçerli komut "0" ise, verilerdeki en soldaki biti silin. Veriler boşsa, "0" hiçbir şey yapmaz.

    b. Geçerli komut "1" ise, verilerdeki en soldaki bit bir ise, programdaki sonraki karakteri verilere ekleyin.

    c. Veriler şimdi boş değilse, verileri çıktılayın.

Test Durumları

Veri girişin sol tarafı ve program sağ tarafıdır.

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

notlar

  • Veri ve program sadece 0s ve 1s'den oluşacaktır
  • Durmayan veriler / programlar için programınızın durdurulması gerekmez.
  • Veri ve program girişte boş kalmayacak.
  • Birden fazla takip eden ve önde gelen yeni satırınız olabilir
  • Standart Loopholes yasaktır
  • Sen kullanabilirsiniz uygun herhangi bir I / O formatını

Her zaman olduğu gibi , en kısa kod kazanır !


@Sanchises Buna bir sınırda gibi görünüyor, ancak belirli bir nesilde sonucu elde etmelisiniz ve bu herhangi bir döngüsel etiket sistemi içindir.
MilkyWay90

ilk test durumunda, tanımı "verilerdeki en soldaki biti sil" olan cmd'ye 100gider . en soldaki bit olmaz100100 olmak 1?
Jonah

@Jonah Oh, bunu kaçırdım
MilkyWay90

(b) durumunda, eki yaparsanız, talimat işaretçisi bir veya iki karakter sağa hareket ediyor mu?
Sparr

@Sparr Sağa hareket ediyor. Mücadele etiketli bölüme bakın.
MilkyWay90

Yanıtlar:


4

Haskell, 77 71 62 bayt

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

Çevrimiçi deneyin!

Düzenleme: @xnor sayesinde -9 bayt.


1
İlk satırda yapabilirsiniz f:[e,f++take d q]!!p#q.
xnor

2

C # (Görsel C # Etkileşimli Derleyici) , 82 bayt

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

Çevrimiçi deneyin!


meraktan 48 ve 49'un önemi nedir?
Jonah

1
@Jonah 48, ASCII değeridir 0ve 49, ASCII değeridir1
Cehalet

burada 0 ve 1 kullanmamalısınız: P
sadece ASCII sadece

@ ASCII-sadece bir dizi değil, bir dize kullanıyorum.
Cehaletin Somutlaştırılması

@EmbodimentofIgnorance neden bir Listve Skip, veya bunun gibi bir şey kullanmıyorsunuz
sadece ASCII-sadece

1

J , 65 bayt

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

Çevrimiçi deneyin!

Bu daha sonra golf olabilir. 5Sonunda _gerçek programda sonsuz olacağını unutmayın , ancak durmadan örnekleri çalıştırmayı kolaylaştırmak için orada bıraktım.



1

05AB1E , 24 21 bayt

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

Programı ilk girdi olarak ve verileri ikinci girdi olarak alır.

Çevrimiçi deneyin.

Açıklama:

[             # 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

Yakut , 62 59 bayt

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

Çevrimiçi deneyin!

Nasıl

  • İlk biti kod cve verilerden alın d, arayın ave b. aSonuna geri koy c.
  • Geri koyun bbaşında dise a==1. Bu kısaltılabilir[b]*a
  • İlk baytını if csonuna koyun . Bu kısaltılabilir .da==1 and b==1c[0,a*b]
  • Daha fazla veriye sahipsek, yazdırın ve tekrarlayın.


0

Jöle , 40 bayt

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

Çevrimiçi deneyin!

Sondaki satırsonlarının iyi olduğunu varsaydım. Ben de girdi ve stdout için çıkış olarak iki sıfır ve bir liste listesi ile gitti.


0

Python 1 , 75 bayt

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

Çevrimiçi deneyin!


Güzel! Bir niggle: '100' verileri için, '0' programı için bu, boş dizeyi bir kez yazdırır: ancak c kuralı "Veriler şimdi boş değilse, verileri çıktılayın" der .
Chas Brown

@ChasBrown Küçük yazım hatası, takip eden yeni satırlar uygunsa OP'den açıklama bekliyorum
Bilgisizlik

@ChasBrown OP, birden fazla sondaki yeni satıra izin verildiğini söylüyor, buraya
Bilgisizlik

Ancak 1 ve 0'lık dizilere geçtikten sonra, şimdi []veri [1,0,0], program gibi yeni satır yerine boş bir dizi yazdırıyorsunuz [0].
Chas Brown

1
python 1? python 2 çalışmıyor mu?
Sadece ASCII sadece


0

C ++ (GCC) , 294 289 272 bayt

@Ceilingcat sayesinde -22 bayt

#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);}}}

Çevrimiçi deneyin!

Oldukça basit algoritma. Verileri bir kuyruğa kopyalar ve program boyunca tekrar tekrar döngüler. Bir "0" da, kuyruktaki ilk öğeyi (ilk "bit") kaldırır. 1'de, verinin ilk "biti" 1 ise programın sonraki "bitini" veriye ekler. Daha sonra veriler arasında dolaşır ve "bit" ile "bit" yazdırılır ve son olarak bir ardışık veri girişlerini ayırmak için boşluk.


@ceilingcat Zeki (ab) kullanımı c[1]! Güncellenmiş.
Neil
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.