때로는 brainfuck 코드를 작성할 때 디버깅 을 장려 하기 위해 필요한 것보다 더 길게 만들어야 할 필요가 있다고 생각합니다 . 당신은 ><
거기에 a 를 두들겨서 그것을 할 수 있지만, 그게 무슨 재미입니까? 코드를 읽는 사람을 혼동 시키려면 더 길고 적은 NOPey가 필요합니다.
Brainfuck 빠른 소개
Brainfuck 은 Urban Müller가 1993 년에 만든 난해한 프로그래밍 언어로 극도의 미니멀리즘으로 유명합니다. (위키 백과)
Brainfuck은 8 가지 명령을 기반으로하는 언어입니다 +-><,.[]
. 코드는 Turing 머신과 같이 실행됩니다 : 값을 변경할 수있는 무한 테이프. 이 도전에서 우리는 처음 네 가지에 중점을 둘 것입니다.
+ increment the value at the pointer
- decrement the value at the pointer
> move the pointer right
< move the pointer left
Brainfuck NOP
brainfuck NOP는 어떤 상태에서도 실행될 때 상태에 영향을 미치지 않는 일련의 brainfuck 문자입니다. 위에서 언급 한 4 개의 문자로 구성됩니다.
도전
문제는 실행될 때 주어진 길이의 무작위 brainfuck NOP를 생성하는 프로그램이나 함수를 작성하는 것입니다.
입력
음이 아닌 짝수 인 정수를 입력으로받습니다 n
. (NOP는 홀수로 불가능합니다 n
.)
산출
길이의 임의의 brainfuck NOP를 출력합니다 n
.
규칙
- NOP의 정의 : 프로그램의 출력이 brainfuck 프로그램의 어느 시점 에든 삽입 될 때, 상기 프로그램의 동작은 어떠한 방식으로도 변하지 않아야합니다. 즉, 인터프리터의 상태를 변경해서는 안됩니다.
- 예를 들어
+>-<
두 셀의 값을 다시 변경하지 않고 변경하기 때문에 올바르지 않습니다. 게시하기 전에 솔루션에 대한 솔루션을 테스트하십시오. - 또한
+>-<->+<
NOP 만 제거하면 아무것도 줄일 수 없습니다><
<>
+-
-+
. 따라서 이들을 서로 삽입하는 알고리즘은 사용할 수 없습니다.
- 예를 들어
- 길이의 모든 유효한 NOP
n
는 출력에 0이 아닌 가능성이 있어야합니다. 그러나 분포가 균일 할 필요는 없습니다. - 문제의 해석기는 임의의 정밀 세포로 된 무한한 두 배의 테이프를 가지고 있습니다. 즉, 양방향으로 무한대로 이동하고 각 셀을 무한대로 증감시킬 수 있습니다.
- 프로그램은 내 컴퓨터에서 = 100 동안 1 분 이내에
n
완료되어야 하므로 가능한 모든 NOP를 생성하고 하나를 선택하지 않습니다. - 유효하지 않은 입력 (정수가 아닌, 음수, 홀수 등)이 주어지면 충돌을 포함하여 원하는 모든 작업을 수행 할 수 있습니다.
채점
이것은 code-golf 이므로 바이트 단위의 최단 답변이 이깁니다.
예
n
= 4에 대한 모든 유효한 출력은 다음과 같습니다 .
++-- +-+- +--+ --++ -+-+ -++-
>><< ><>< ><<> <<>> <><> <>><
><+- ><-+ <>+- <>-+
>+-< >-+< <+-> <-+>
+><- -><+ +<>- -<>+
+->< -+>< +-<> -+<>
n
= 20에 대한 몇 가지 가능한 출력은 다음과 같습니다 .
+>>->+<->-<<<->>++<<
>+>-<+<->+-<>->+<-<+
+--+-++--++-+--+-++-
>>>>>>>>>+-<<<<<<<<<
.
부작용이 ,
있으며를 사용하지 않고는 복구 할 수없는 값을 덮어 씁니다 []
. 그러나 []
값을 0으로 설정합니다. 또한 []
영향을받는 셀이 처음에 0이라는 것을 확신 할 수 없다면 값을 덮어 씁니다 (따라서 복구하기 위해 다른 것이 필요 합니다). 그러나와 같은 셀을 검색해야 [>]
하며 원래 위치로 안정적으로 돌아갈 수 없습니다.
+-<>
당신이 요청 한대로 사용하지 않는 brainfuck NOP가 있습니다 :a