갇힌 기사 순서


10

소개

가장 최근의 비디오 인 The Trapped Knight-Numberphile 에서 영감을 얻어 도전을했습니다.

트래핑 나이트 시퀀스는 1부터 길이 2016의 유한 정수 시퀀스이며, 다음의 구조 규칙이있다 :

  1. 다음과 같은 방법으로 숫자 나선을 작성하십시오.
17 16 15 14 13 ...
18  5  4  3 12 ...
19  6  1  2 11 ...
20  7  8  9 10 ...
21 22 23 24 25 ...
  1. 1에 기사를 배치하십시오.
  2. 체스 규칙에 따라 이전에 방문하지 않은 가장 작은 숫자로 기사를 그리드로 이동하십시오 (예 : 수직으로 2 대, 수평으로 1 대 또는 그 반대).
  3. 기사가 붙을 때까지 반복하십시오.

처음 세 단계는 다음과 같습니다.

1 단계

 17  [16]  15  [14]  13 
[18]   5    4    3  [12]
 19    6  < 1>   2   11 
[20]   7    8    9  [10]
 21  [22]  23  [24]  25 

가능한 이동은 10, 12, 14, 16, 18, 20, 22, 24이며, 그 중에서 가장 작은 것은 10이므로 두 번째 항은 10입니다.

2 단계

  4  [ 3]  12  [29]  54
( 1)   2   11   28  [53] 
  8    9  <10>  27   52 
[23]  24   25   26  [51] 
 46  [47]  48  [49]  50 

가능한 이동은 1 , 3, 23, 29, 47, 49, 51, 53이며 가장 작은 것은 3이므로 세 번째 항은 3입니다.

3 단계

 35  [34]  33  [32]  31 
[16]  15   14   13  [30] 
  5    4  < 3>  12   29 
[ 6] ( 1)   2   11  [28] 
  7  [ 8]   9  (10)  27 

가능한 이동은 6, 8, 10 , 16, 28, 30, 32, 34이며, 그 중에서 가장 작은 것이 6이므로 네 번째 항은 6입니다.

순서는 다음과 같습니다.

1 10 3 6 9 4 7 2 5 8 11 14 ...

그리고 끝

... 2099 2284 2477 2096 2281 2474 2675 2884 3101 2880 2467 2084

도전

입력으로 범위 [1, 2016](또는 [0, 2015]0- 인덱싱이 사용 된 경우) 의 정수를 수신하여 가장 짧은 프로그램 또는 함수를 작성 하여 트랩 된 기사 순서로 해당 인덱스의 숫자를 출력하십시오. 0 인덱스 또는 1 인덱스로 시퀀스를 인덱싱하도록 선택할 수 있지만 사용하는 인덱싱 체계를 지정해야합니다.

테스트 사례 (1 색인)

n    | s(n)
-----+-----
   1 |    1
   2 |   10
   3 |    3
   6 |    4
  11 |   11
  21 |   23
  51 |   95
 101 |   65
 201 |  235
 501 |  761
1001 | 1069
2001 | 1925
2016 | 2084

가능한 모든 출력에 대해서는 이 페이지 를 참조 하십시오 .

승리 기준

각 언어의 가장 짧은 코드가 승리합니다. 표준 허점에 대한 제한 사항이 적용됩니다.



1
@Arnauld이 질문은 (표시된대로) 나의 것에서 영감을 얻었으며, 더 빨리 메인으로 갈 수있었습니다. 또한,이 시퀀스는 유한하기 때문에, 골프의 일부 양상은 그 점에서 상이 할 수있다.
Shieru Asakoto

1
다른 순서도 유한하며 정사각형에서 정지12851850258
Jo King

2
@JoKing 글쎄, 그러나 이것은 매우 빨리 멈추기 때문에 정수 범위가 더 작은 esolang에서 답을보고 싶습니다 (16 비트 정수를 구현하는 esolang이 있습니까?)
Shieru Asakoto

1
글쎄,이 질문이 샌드 박스에 처음으로 게시되었다고해서 그 속담이 다른 질문 일 것이라는 의미는 아닙니다 .
Luis felipe De jesus Munoz

답변:


4

자바 스크립트 (ES7)  182  181 바이트

f=(n,[x,y]=[2,1],a=[...Array(4e3)].map((_,n)=>[1,-1].map(s=>(i&1?-s:s)*(i+s*n-(n>0?n:-n)>>1),i=n**.5|0,n-=i*++i)))=>n--?f(n,a.find(([X,Y],j)=>(i=j,(x-X)*(y-Y))**2==4),a,a[i]=[]):i+1

온라인으로 사용해보십시오!

어떻게?

The Wildebeest에 대한 나의 대답의 약간 수정 된 버전 은 확실히 그보다 짧습니다 (그리고 빠릅니다). 그러나 다른 접근법을 시도하고 싶었습니다. 또한 일부 esolang 에서이 방법을 구현하는 것이 더 쉽다고 생각합니다 .

연산:

  1. 3199
  2. (엑스,와이)

    ((엑스엑스)×(와이와이))2=4

    (엑스,와이)

    |엑스엑스|=1|와이와이|=2|엑스엑스|=2|와이와이|=1

  3. (엑스,와이)=(엑스,와이)

  4. 2 단계에서 다시 시작하거나 완료된 경우 마지막으로 찾은 색인을 반환합니다.


Node.js , 155 바이트

n=>(g=(x,y)=>n--?g(Buffer('QHUbcdWJ').map(m=c=>g[i=4*((x+=c%6-2)*x>(y+=c%7-2)*y?x:y)**2,i-=(x>y||-1)*(i**.5+x+y)]|i>m||(H=x,V=y,m=i))|H,V,g[m]=1):m+1)(1,2)

온라인으로 사용해보십시오!


3

05AB1E , 53 바이트

Xˆ0UF2D(Ÿ0KãʒÄ1¢}εX+}Dε·nàDtyÆ+yO·<.±*->}D¯KßDˆkèU}¯θ

32θ+1

온라인으로 시도 하거나 더 많은 테스트 사례를 확인 하십시오 (가장 큰 테스트 사례의 경우 시간 초과).

설명:

링크 된 Wildebeest 답변에 대한 설명을 참조하십시오 . 수정 된 부분은 다음과 같습니다.

2D    # Get a list in the range [-2,2]: [-2,-1,0,1,2]

그리고 후행 :

θ       # Only leave the last item of the list

편집 : 그의 JavaScript (ES7) 답변에서 @Arnauld 의 접근 방식 의 포트는 다음과 같습니다 (현재).

05AB1E , 57 56 바이트

0D‚DˆUF64D(ŸãΣ·nàDtyÆ+yO·<.±*->}©ʒX-Pn4Q}¯¡˜2£DˆU}®J¯Jk>θ

온라인으로 시도 하거나 더 많은 테스트 사례를 확인 하십시오 (가장 큰 테스트 사례의 경우 시간 초과).

설명:

‚%                # Create a pair of zeros: [0,0]
                  # (by pairing the (implicit) input with itself,
                  #  and then using modulo (implicit) input)
  DˆU             # Set both variable `X` to this, and add it to the global_array
F                 # Loop the (implicit) input amount of times:
 64D            #  Create a list in the range [-64,64]
      ã           #  Create each possible pair of `x,y`-coordinates
       Σ·nàDtyÆ+yO·<.±*->}
                  #  Sort this list in a spiral
        ©         #  Save it in the register (without popping)
 ʒ      }         #  Filter the list of coordinates by:
  X-              #   Subtract the coordinate of variable `X`
    P             #   Take the product
     n            #   Take the square
      4Q          #   Check if its equal to 4
                  # Since 05AB1E cannot remove inner lists, we use a workaround:
         ¯¡       # Split this list on each coordinate in the global_array
           ˜      # Flatten the entire list
            2£    # Only leave the first two integers as `x,y`-coordinate
                  # (if 05AB1E could remove inner lists, this would've been `¯Kн` instead)
              DˆU # Replace variable `X` with this, and add it to the global_array
                # After the loop: push all coordinates sorted in a spiral from the register
  J               # Join each coordinate together to a string
   ¯J             # Push the global_array, and also join them together to a string
                  # (if 05AB1E could index inner lists, both `J` could have been removed)
     k            # Get the index of each item of the global_array in the spiral list
      >           # Increase the 0-indexed index by 1 to make it 1-based
       θ          # And only leave the last one (which is output implicitly)

Σ·nàDtyÆ+yO·<.±*->}엑스,와이


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