미지의 바쁜 비버


20

그 바쁜 비버들은 모두 엉망이되었습니다. 그들은 테이프 전체에 썼습니다. 이 속도로, 이웃은 우리에게 무제한 테이프 대출을 중단합니다.

바쁜 비버 게임을하는 새로운 방법이 필요합니다. 사용하는 모든 테이프를 망칠 수는 없습니다.

규칙

머리 만. 메모리 테이프는 양방향으로 제한이 없습니다. 입력 명령은 항상 읽으 므로 값을 지우는 데 사용할 수 있습니다.0

50 바이트 소스 제한

실행이 끝날 때 메모리는 모두 이어야합니다 .0

점수는 메모리 포인터의 시작 위치와 최종 위치 사이의 거리입니다. 점수가 이동 명령에 걸리면 점수는 입니다. 높을수록 좋습니다. 가능하면 정확한 값을 제공하고 그렇지 않으면 견적을 제공하십시오.nnn

32 바이트,22551

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

설명

-                                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[255]nn>1[n1,n1](n1)(n)10[n]2n1

이 예는 제출을 작성하는 데 사용되는 기술 중 일부를 보여주기위한 것입니다. 크기면에서 경쟁력이 없습니다.


3
@Okx 문제 없음-그것은 비판으로 의도되지 않았습니다. 임의의 코드 길이를 허용하는이 점수를하는 또 다른 방법이 있다면, 지금 시간이 답변에 오기 전에 그것을 찾을 수 있습니다 나는 현재 코드 골프 태그가 오해의 소지가 될 때이 태그를 다시거야.
trichoplax

3
더 많은 바이트를 사용하면 더 빠르게 증가하는 함수를 정의 할 수 있으므로 한계가 있습니다. 특히 50에 대한 이유가 없으며, 괜찮은 성장 (제 예의 지수보다 확실히 우수함)과 창의적인 솔루션에 대해서는 충분히 높지만 Beklemishev의 웜이나 다른 매우 빠른 성장에는 여전히 작습니다. // 그런데 내 태그를 수정 해 주셔서 감사합니다.
EPICI

2
배경에 대해서만 : 우리는 code golf의 최소 점수 를 피하려고 노력 하지만이 도전은 코드 골프가 아니며 바이트 수는 점수가 아니므 로이 경우 50 바이트 제한이있는 데 아무런 문제가 없습니다.
trichoplax

1
정보 : 다른 질문에서이 답변을 "사소하게 포팅" 하고 비슷한 점수를 얻을 수 있다고 생각 합니다.
user202729

1
@EPICI 이전의 바쁜 비버는 이미 흔적이 없었습니다.
조 킹

답변:


10

A(255,2)1=(22535)4

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

A[-[<+>>[-<[->+<]+>>]+<-]>[>]+[<]+<]A(m,n)1 - m, m, 1 <n times>mA(m,n)

프로그램의 동작을 모델링하기 위해 다음 Python 프로그램을 사용했습니다.

def a(M, N):
    assert M > 0
    m = [-M + 1, M]
    n = N
    while m[-1]:
        while m[-1] > 1:
            m[-1] -= 1
            m[-2] += 1
            while n:
                m.insert(-1, 1)
                n -= 1
            n = 1
        n += 2
        m.pop()
    return n

1
후행을 추가하여 점수를 높일 수 있습니다 >.
Jonathan Frech

와우, 매우 인상적
alan2here
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.