그 바쁜 비버들은 모두 엉망이되었습니다. 그들은 테이프 전체에 썼습니다. 이 속도로, 이웃은 우리에게 무제한 테이프 대출을 중단합니다.
바쁜 비버 게임을하는 새로운 방법이 필요합니다. 사용하는 모든 테이프를 망칠 수는 없습니다.
규칙
머리 만. 메모리 테이프는 양방향으로 제한이 없습니다. 입력 명령은 항상 읽으 므로 값을 지우는 데 사용할 수 있습니다.
50 바이트 소스 제한
실행이 끝날 때 메모리는 모두 이어야합니다 .
점수는 메모리 포인터의 시작 위치와 최종 위치 사이의 거리입니다. 점수가 이동 명령에 걸리면 점수는 입니다. 높을수록 좋습니다. 가능하면 정확한 값을 제공하고 그렇지 않으면 견적을 제공하십시오.n
예
32 바이트,
-[-[[>]+>+[<]>-[[>]<+<+[<]>-]]>]
설명
- Initialize the list to [255].
[ ] Repeat as long as the list is not empty.
[- ] Decrement the left end. We need to shrink the numbers so it ends eventually.
[ [ ] ] Skip if 0 already.
[ [[>] ] ] Move to the cell past the right end.
[ [ + ] ] Make this cell 1.
[ [ > ] ] Go right again.
[ [ + ] ] Make this cell 1. We've now appended [1, 1].
[ [ [<]> ] ] Go back to the first nonzero cell on the left.
[ [ - ] ] And decrement it.
[ [ [ ]] ] We will need to transfer the rest of the number from the left to the right, so keep looping.
[ [ [[>]< ]] ] Go to the last nonzero cell on the right.
[ [ [ +<+ ]] ] Increment this and the one on the left. These are the cells we appended earlier. We transfer to them.
[ [ [ [<]> ]] ] Go back to the first nonzero cell on the left, which we are transferring from.
[ [ [ -]] ] Decrement here on the left to balance out the incrementing on the right.
[ >] We end the iteration on a now empty cell. Move right, the new left end is there.
우리는리스트 시작 . 반복 할 때마다 목록의 왼쪽에서 값을 사용하고 인 경우 오른쪽에 을 추가합니다. 이 추가 된 숫자 는 원래 보다 낮으므로 이 될 때까지 더 작아 져 확장되지 않고 소비됩니다. 따라서 프로세스는 결국 이며 메모리 는 모두 종료 됩니다. 그러나 각 단계에서 해당 수의 사본 수가 두 배가됩니다. 리스트 초기화 된이 프로그램의 점수 는 입니다.N , N > 1 [ N - 1 , N - 1 ] ( N - 1 ) ( N ) 1 0 [ N ] 2 N - 1
이 예는 제출을 작성하는 데 사용되는 기술 중 일부를 보여주기위한 것입니다. 크기면에서 경쟁력이 없습니다.