비트 단위 순환 태그 시뮬레이션


11

도전

기본 I / O 형식의 두 문자열이 제공되면 다음을 수행하십시오.

참고 :이 문제는 첫 번째 문자열을 "데이터"로, 두 번째 문자열을 "프로그램"이라고합니다.

  1. 프로그램을 무한 반복되는 무한 문자열로 변경하십시오 (예 : 10-> 1010101010...). 도전은 이것을 "무한 프로그램"이라고 언급 할 것이다
  2. 데이터가 비어 있지 않은 동안 무한 프로그램을 반복하면서 다음을 수행하십시오.

    ㅏ. 현재 명령이 "0"이면 데이터에서 가장 왼쪽 비트를 삭제하십시오. 데이터가 비어 있으면 "0"은 아무 작업도 수행하지 않습니다.

    비. 현재 명령이 "1"이면 데이터의 가장 왼쪽 비트가 1 인 경우 프로그램의 다음 문자를 데이터에 추가하십시오.

    씨. 데이터가 지금 비어 있지 않으면 데이터를 출력하십시오.

테스트 사례

데이터는 입력의 왼쪽이고 프로그램은 오른쪽입니다.

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

메모

  • 데이터와 프로그램은 0과 1로만 구성됩니다
  • 중단되지 않는 데이터 / 프로그램의 경우 프로그램을 중단 할 필요가 없습니다.
  • 입력에서 데이터 및 프로그램이 비어 있지 않습니다.
  • 여러 개의 후행 및 선행 줄 바꿈이있을 수 있습니다.
  • 표준 허점 은 금지되어 있습니다
  • 편리한 I / O 형식을 사용할 수 있습니다

와 언제나처럼 , 짧은 코드의 승리 !


@Sanchises 그것과 중복되는 경계선처럼 보이지만 특정 세대에서 결과를 가져와야하며 이는 순환 태그 시스템입니다.
MilkyWay90

첫 번째 테스트 사례에서는 cmd 100로 이동합니다 10. 0정의는 "데이터에서 가장 왼쪽 비트를 삭제합니다." 가장 왼쪽 비트하지 않을 1001?
요나

@Jonah 오, 그것을 놓쳤다
MilkyWay90

(b)의 경우 추가를하면 명령 포인터가 한두 문자 오른쪽으로 이동합니까?
Sparr

@Sparr 그것은 오른쪽으로 이동합니다. 도전 과제 섹션을 참조하십시오.
MilkyWay90

답변:



2

C # (Visual C # 대화식 컴파일러) , 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
@Jonah 48은의 ASCII 값 0이고 49는 ASCII 값입니다1
무지의 구현

대신 0과 1을 사용해서는 안됩니다 : P
ASCII 전용

@ASCII 전용 배열이 아닌 문자열을 사용하고 있습니다.
무지의 실시

@ ListSkip같은 것을 사용하지 않는 이유는 무엇입니까?
ASCII 전용

1

J , 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.
  • if b의 시작 부분에 다시 넣으십시오 . 이것은 단축 될 수 있습니다da==1[b]*a
  • 의 첫 번째 바이트를 넣어 c의 끝 부분에 d있는 경우 a==1 and b==1. 이를 단축 할 수 있습니다 c[0,a*b].
  • 더 많은 데이터가 있으면 인쇄하고 반복하십시오.



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''

온라인으로 사용해보십시오!


좋은! 문제 : 데이터 '100', 프로그램 '0'의 경우 빈 문자열을 한 번 인쇄합니다. 그러나 규칙 c는 "데이터가 비어 있지 않으면 데이터를 출력합니다." 라고 말합니다 .
Chas Brown

@ChasBrown 작은 오타, 후행 줄 바꿈이 괜찮다면 OP의 설명을 기다리고 있습니다.
무지의 구현

@ChasBrown OP는 여러 후행 줄 바꿈이 허용된다고 말합니다. 여기를
무지의 구현

그러나 1과 0의 배열로 전환 한 후 이제 []data [1,0,0], program 에 줄 바꿈 대신 빈 배열을 인쇄합니다 [0].
Chas Brown

1
파이썬 1? 파이썬 2가 작동하지 않습니까?
ASCII 전용


0

C ++ (gcc) , 294 289 272 바이트

@ceilingcat 덕분에 -22 바이트

#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 인 경우 프로그램의 다음 "비트"를 데이터에 추가합니다. 그런 다음 데이터를 반복하여 "비트"로 "비트"를 인쇄하고 마지막으로 a를 인쇄합니다. 연속적인 데이터 입력을 분리하기위한 공간.


@ceilingcat Clever (ab) 사용 c[1]! 업데이트되었습니다.
Neil A.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.