네 스파이라 링 도끼


9

숫자를 가져 와서 0, 1, 2, 3, 4, ...시계 방향으로 나선형으로 배열 하십시오. 아래쪽에서 시작하여 각 자리 를 별도의 사각형으로 씁니다 .

그런 다음 축을 나타내는 4 개의 고유하고 일관된 ASCII 문자 중 하나 (선택한 항목)와 입력 integer가 주어지면 해당 축을 따라 사각형을 선택하여 설명 된 순서 n의 첫 번째 n항을 출력합니다 .

예를 들어 아래는까지 나란히 배열 된 나선 29입니다. 우리가 사용하는 가정 u / d / l / r대표, 우리의 네 문자 up / down / left / right. 그런 다음 u입력으로 주어지면 우리는 0, 5, 1, 4 ...( n항의 y 축)을 최대 항까지 출력 합니다 . 우리가 대신 l입력으로 받았다면 , 그것은 0, 3, 1, 1 ...최대 n기간입니다.

  2---3---2---4---2---5---2
  |                       |
  2   1---3---1---4---1   6
  |   |               |   |
  2   2   4---5---6   5   2
  |   |   |       |   |   |
  1   1   3   0   7   1   7
  |   |   |   |   |   |   |
  2   1   2---1   8   6   2
  |   |           |   |   |
  0   1---0---1---9   1   8
  |                   |   |
  2---9---1---8---1---7   2

다음은 OEIS의 시퀀스입니다.

d 19
[0, 1, 1, 8, 3, 7, 6, 2, 1, 5, 1, 1, 6, 2, 2, 1, 3, 4, 0]

r 72
[0, 7, 1, 7, 4, 2, 8, 1, 1, 3, 1, 2, 0, 2, 3, 1, 3, 4, 6, 5, 5, 5, 7, 7, 8, 8, 9, 6, 8, 1, 1, 1, 2, 3, 1, 8, 0, 6, 1, 7, 0, 9, 2, 8, 4, 3, 2, 1, 1, 7, 2, 6, 2, 1, 3, 3, 5, 5, 3, 2, 2, 0, 4, 3, 2, 5, 4, 6, 5, 0, 5, 1]

u 1
[0]

규칙

  • 해당되는 경우 입력 / 출력이 해당 언어의 기본 정수 유형에 적합하다고 가정 할 수 있습니다.
  • 정수를 사용하여 네 개의 축을 나타내는 경우 규칙을 어 기지 않고 음수를 사용할 수 있습니다.
  • 입력 및 출력은 편리한 방법 으로 제공 할 수 있습니다 .
  • 전체 프로그램 또는 기능이 허용됩니다. 함수 인 경우 출력하지 않고 출력을 반환 할 수 있습니다.
  • 표준 허점 은 금지되어 있습니다.
  • 이것은 모든 일반적인 골프 규칙이 적용되며 가장 짧은 코드 (바이트)가 이깁니다.

두 방향으로 음의 정수를 사용할 수 있습니까?
mbomb007

@ mbomb007 물론입니다. 괜찮습니다.
AdmBorkBork

실용적이지는 않지만 앞에 오는 0을 제외하고 필요한 숫자가있는 정수를 반환 할 수 있습니까?
Outgolfer Erik

@AdmBorkBork 기본적으로 나는 그런 해결책을 염두에 두지 않고 그냥 생각했습니다. :)
Outgolfer Erik

챌린지는 출력에 의해 판단됩니다. 따라서 0이 포함되어 있지 않으면 문자열 출력에서 ​​0이 제외되면 잘못 계산하므로 잘못 될 것이라고 생각합니다. 파이썬은 선행 0을 가진 정수를 출력 할 수 있으므로 다른 언어는 사용하지 않는 것이 좋습니다.
mbomb007

답변:


5

파이썬 2 , 94 89 84 83 74 72 70 바이트

WolframAlpha를 사용하여 5 n > 4n 2 + 3n 의 상한 으로 충분하다고 판단했습니다. 그것은 9로 변경 될 수 n은 무료로. 더 큰 입력을 시도하려면 9*n*n대신 5**n메모리 부족을 피하기 위해 대신 사용하십시오 .

lambda d,n:["".join(map(str,range(5**n)))[x*(4*x+d)]for x in range(n)]

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

길 찾기 입력은 다음과 같습니다.

  • 3 : 맞다
  • -3 : 아래로
  • -1 : 왼쪽
  • 1 : 위로

Rod 덕분에 14 바이트
절약 Jonathan Allan 덕분에 2 바이트 절약



1

젤리 ,  19  18 바이트

mbomb007의 Python 답변 에서 5 n 트릭을 사용합니다.

4,0jḅɗ@€ị5*D€FʋṖ0;

n왼쪽에서 가져 오는 d정수 링크 와 다음에서 정수 :[-3,-1,1,3]:[v,<,^,>]

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

훨씬 더 빠르며 작은 n에 대해 segfault가 아닌 20 바이트 대안은 다음과 같습니다.

²×5D€ƲFị@4,0jḅɗ@€Ṗ0;

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

어떻게?

4,0jḅɗ@€ị5*D€FʋṖ0; - Link: integer, n; integer, d
     ɗ@€           - last three links as a dyad with sw@pped arguments for €ach (of implicit range [1,n])
4,0                -   literal list [4,0]
   j               -   join with d = [4,d,0]
    ḅ              -   convert from base n = 4*n^2+d*n+0
        ị          - index into...
              ʋ    - last four links as a monad:
         5         -   five
          *        -   exponentiate = 5^n
           D€      -   decimal list of each (in implicit range [1,5^n])
            F      -   flatten into a single list of the digits
               Ṗ   - pop (drop the final element)
                0; - prepend a zero

1

상당한 n에서 작동합니다 (예 : +1000)

자바 스크립트 (Node.js) , 104 바이트

f=(d,n)=>--n?[...f(d,n),C(n*(4*n+d))]:[0]
C=(n,N=i=0)=>n>N?C(n-N,(p=10**i)*9*++i):+((p+--n/i|0)+"")[n%i]

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

설명

  • 3 : 맞다
  • -3 : 다운 (댓글에 따라 -3이 합법적 임)
  • -1 : 왼쪽
  • 1 : 위로 (예 : @ mbomb007)

Champernowne 상수의 C- 번째 자리

________________________________________________________

덜 효율적인 방법 (1000 이상에서는 작동하지 않음)

자바 스크립트 (Node.js) , 81 바이트

f=(d,n)=>eval(`for(r=[],s=i=I="";I<n;)(s+=i++)[u=I*(4*I+d)]&&r.push(s[I++,u]),r`)

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


0

Stax , 13 바이트

â╞ê←τ"(]]⌐┘?N

실행 및 디버깅

방향으로 입력 한 다음 개수를 입력합니다. 오른쪽, 위,이다 아래로 떠났고, 1, 3, 5, 및 7각각. 제공된 세 가지 테스트 사례를 실행하는 데 1 분 정도 걸립니다.

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