무지개 끝의 세포


31

우리는 모두 가장 유명하고 영향력있는 난해한 언어 중 하나 인 brainfuck을 알고 있거나 적어도 들어 본 적이 있습니다. 요즘 대부분의 구현에는 무한 테이프가 사용되지만 Urban Müller의 원래 컴파일러에는 30000 개의 셀 테이프가있었습니다. 약간의 알려진 사실 *은 테이프의 끝에 실제로 특별한 brainfuck 프로그램에서 상호 작용하지 않는 특별한 값이 있다는 것입니다.

이 값을 29999 >초와 a로 인쇄 할 수 있지만 .brainfuck은 짧고 간결한 솔루션으로 알려져 있으므로이 값을 최소 문자 수로 인쇄하는 것이 목표입니다.

*소설

규칙 :

  • brainfuck 지침에 대한 새로 고침 :
    • +/ -: 현재 셀 증가 / 감소, 255가 증가하면 255에서 0으로 줄 바꿈
    • </ >: 테이프에서 포인터를 좌우로 움직입니다.
    • .: 현재 셀의 값을 인쇄합니다.
    • [: ]셀의 값이 0이면 해당 항목으로 이동
    • ]: [셀의 값이 0이 아닌 경우 해당 항목으로 이동
  • 이 경우 ,원래 컴파일러는 EOF에서 셀을 변경하지 않고 그대로두기 때문에 아무것도 입력하지 않으며이 프로그램은 입력을받지 않아야합니다.
  • 테이프는 알 수없는 값을 포함하는 셀 30000을 제외한 모든 0으로 처음 채워집니다.
  • 포인터는 셀 1에서 시작하여 셀을 인쇄 한 셀 30000에서 끝나야합니다.
  • 1의 왼쪽과 30000의 오른쪽에있는 셀에는 정의되지 않은 동작이 있으므로 솔루션 이이 셀을 방문 하지 않아야합니다 .
  • 참고 30000의 값이 있다는 것이다 0이 아닌 세포가 작동하지 않습니다 칠 때까지 그렇게 단순히 반복, 0이 될 수 있습니다.
  • 당신은 인쇄해야 에만 세포 30000의 값을
  • 가장 짧은 솔루션이 승리합니다!
    • 타이 브레이커 (Tie-breaker)는보다 효율적인 프로그램이며 (최소 단계로 실행) 가장 빠른 제출 시간이 뒤 따릅니다.

팁 : Esolanging Fruit는 https://copy.sh/brainfuck 을 사용하여 코드를 테스트 할 것을 제안 합니다. 사양은이 문제에 설명되어 있으며 abort프로그램이 범위를 벗어나면 중지되도록 옵션을 선택할 수 있습니다 .


샌드 박스 (삭제됨)
Jo King

3
1 바이트 : .. 내가 이겼다.
Esolanging Fruit

1
@EsolangingFruit 내 망상을 제발 보내주세요 ...
Jo King

1
규칙을 "처음에는 모든 셀의 값을 알 수없는 마지막 셀을 제외하고 0의 값을 갖도록"변경하는 것이 좋습니다.
user202729

4
이 작업을 수행하는 사람을위한 팁 : copy.sh/brainfuck 은이 문제에 설명 된대로 BF를 구현하고 기본적으로 30k 테이프를 가지고 있기 때문에이 작업을 수행하는 데 가장 적합한 사이트 일 것입니다. 테이프 끝을 지나서 오른쪽으로 이동하면 인터프리터가 중단됩니다.
Esolanging 과일

답변:


17

54 바이트

------[>+++<--]>[->----[-[->+<]<[->+<]>>]<]>>>>>>>>>>.

119 x 252 = 29988. 간단한 중첩 루프.

내가 사용 이 도구를 포인터가 29,999에서 정지되었는지 확인합니다.


12

50 바이트

>+[>+[<]>->+]>-<<[>>-------[[>]+[<]>-]<<-]>>>[>]>.

여기 사용해보십시오!

첫 번째 섹션 ( >+[>+[<]>->+]>-<<)은 테이프를 다음과 같이 설정합니다.

0*12 121' 0 110

다음 섹션 ( [>>-------[[>]+[<]>-]<<-])은 121 번 반복 1되며 매번 테이프 끝에 249 초가 추가 됩니다. 수학에 빠르면이 121 * 249 결과가 30129 초임을 알 수 1있지만 첫 번째 반복에는 남은 110 이 테이프에 처리되고 테이프 에 ( 110-7) 103 만 추가 1되어 29983 만 있음을 의미 1합니다. 최종 테이프는 다음과 같습니다.

0*12 0' 0 0 1*29983 0 ???

그리고 마지막 >>>[>]>. 값을 인쇄합니다.

다른 참고 알고리즘 :

  • 252 * 119 = 29988 (50 바이트)
  • 163 * 184 = 29992 (56 바이트)
  • 204 * 147 = 29988 (60 바이트)
  • 153 * 196 = 29988 (56 바이트)
  • 191 * 157 = 29987 (57 바이트)
  • 254 * 118 = 29972 (56 바이트)
    • 여분의 바이트는 기본적으로 여분의 거리를 여행하기 때문에 이것은 50을 치는 다음에 가장 가까운 것으로 간주되는 것입니다. 118을 생성하고 14 개 이상의 셀을 이동하는 알고리즘을 찾을 수 있으면 이길 수 있습니다.

3

81

-[+>+[<]>++]<<+[-->-[-<]>]>-[>[->+[[->+<]<]>>>]<[-<<+>>]<<<-]>-------[[->+<]>-]>.

이것은 150 개의 세포만큼 200 번 움직입니다.

이것은 내가 원하는 것보다 훨씬 길며 골프에 심각한 장애물이 있습니다.

더 이상 내가 일하는 이유를 알지 못합니다.

이것은 그들 중 일부가 아마도 취소 할 수있는 지점까지 한 사람 한 사람에 대한 보상으로 가득 차 있습니다. 다양한 세그먼트를 추가하고 삭제하여 더 이상 특정 위치를 배치하는 이유를 더 이상 기억하지 못합니다 (예 : 첫 번째 부분이 테이프 셀을 200 및 150 대신 199 및 151로 초기화하는 이유는 무엇입니까?).

어쨌든 내 괴물 (또는 다른 사람)이 유용 할 수 있기를 바랍니다.

-[+>+[<]>++]<<+[-->-[-<]>]>-

0 0 0 199' 155

[
  n' k 0
  >[
    n k' j
    ->+[[->+<]<]>
    0' n k-1 j+1 OR
    n 0 0' j+1
    >>
  ]
  0*k n 0 0 k 0'
  <[-<<+>>]<<<-
  0*k n-1' k
]
>-------[[->+<]>-]>.

이것은 실제로 값을 인쇄하지 않으며 값이 양수이면 오버플로됩니다. 그러나 위대한 시도
Jo King

그런 다음에 .도움이 되겠습니까?
user202729 년

1
@JoKing 고쳤습니다.
Esolanging Fruit
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.