Brainfuck 파생 상품
간단한 Brainfuck 같은 프로그래밍 언어를 정의 해 봅시다 . 셀에는 양방향 테이프가 있으며 각 셀에는 1 비트가 있습니다. 모든 비트는 처음에는 0입니다. 테이프에는 처음에 위치 0에 움직이는 헤드가 있습니다. 프로그램은 문자 <>01!
에서 다음과 같은 의미로 왼쪽에서 오른쪽으로 실행되는 문자열입니다 .
<
머리를 왼쪽으로 한 단계 이동합니다.>
머리를 오른쪽으로 한 단계 이동합니다.0
현재 셀에 0을 넣습니다.1
현재 셀에 1을 넣습니다.!
현재 셀을 뒤집습니다.
루프가 없으므로 n 문자 의 프로그램은 정확히 n 단계 후에 종료됩니다 . 실행이 끝날 때 모든 셀에 0이 포함되어 있으면 프로그램이 지루하고 1 이상이 있으면 흥미 롭습니다 . 테이프의 크기가 지정되지 않았으므로 구현에 따라 양방향 무한대이거나 회보.
예제 프로그램
프로그램을 고려하십시오 1>>>!<<<<0>!>>>!
. 무한 테이프에서는 다음과 같이 실행됩니다.
v
00000000000000 Put 1
v
00000100000000 Move by >>>
v
00000100000000 Flip
v
00000100100000 Move by <<<<
v
00000100100000 Put 0
v
00000100100000 Move by >
v
00000100100000 Flip
v
00000000100000 Move by >>>
v
00000000100000 Flip
v
00000000000000
결국 모든 셀은 0 이므로이 프로그램은 지루합니다. 이제 길이가 4 인 원형 테이프에서 동일한 프로그램을 실행 해 봅시다.
v
0000 Put 1
v
1000 Move by >>>
v
1000 Flip
v
1001 Move by <<<< (wrapping around at the edge)
v
1001 Put 0
v
1000 Move by > (wrapping back)
v
1000 Flip
v
0000 Move by >>>
v
0000 Flip
v
0001
이번에는 값 1의 셀이 있으므로 프로그램이 흥미 롭습니다! 우리는 프로그램이 지루하거나 흥미로운 지 여부는 테이프의 크기에 달려 있음을 알 수 있습니다.
작업
귀하의 입력은 <>01!
위의 프로그래밍 언어의 프로그램을 나타내는 비어 있지 않은 문자열 입니다. 문자 배열도 허용되는 입력 형식입니다. 무한 테이프에서 실행될 때 프로그램은 지루합니다. 출력물은 프로그램이 흥미 진진한 테이프 길이 목록이됩니다. 프로그램 길이보다 짧은 테이프에서만 프로그램을 테스트하면됩니다.
각 언어에서 가장 적은 바이트 수를 가진 솔루션이 승자입니다. 표준 코드 골프 규칙이 적용됩니다.
테스트 사례
> : []
110 : []
1>0<! : [1]
0>>1>0<<>! : [1]
1>>>!<<<<0>!>>>! : [2, 4]
!<!<><<0>!>!<><1!>>0 : [2]
>>!>><>001>0<1!<<!>< : [1, 2, 3]
1!><<!<<<!!100><>>>! : [1, 3]
!!1>!>11!1>>0<1!0<!<1><!0<!<0> : [3, 4]
<><<>>!<!!<<<!0!!!><<>0>>>>!>> : [1, 2, 4]
0>>><!<1><<<0>!>>!<<!!00>!<>!0 : [3]
0000!!!!><1<><>>0<1><<><<>>!<< : []
!>!>!>!>!>1>!>0<!<!<!<0<!<0<!<!<!<1>!>0<<! : [1, 2, 5, 7]
<!!>!!><<1<>>>!0>>>0!<!>1!<1!!><<>><0<<!>><<!<<!>< : [1, 2, 4, 5]
!>1<<11<1>!>!1!>>>0!!>!><!!00<><<<0<<>0<<!<<<>>!!> : [1, 2, 3, 5, 6]
<>01!
?