이진 사각형 대각선 시퀀스


20

바이너리 제곱 직교 시퀀스는 다음과 같이 구성된다 :

  1. 양의 자연수의 순서를 취하십시오.
    1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, ...
  2. 각 숫자를 이진수로 변환하십시오.

    1, 10, 11, 100, 101, 110, 111, 1000, 1001, 1010, 1011, 1100, 1101, 1110, 1111, 10000, 10001, ...

  3. 그들을 연결하십시오 :

    11011100101110111100010011010101111001101111011111000010001 ...

  4. 로 시작하여 n=1측면 길이가 증가하는 정사각형을 생성하십시오. n이 순서는 왼쪽에서 오른쪽으로, 위에서 아래로 시퀀스의 요소로 채워집니다.

    1
    1 0
    1 1
    1,000 
    10 1
    1 0
    1 1 1 1
    0 0 1
    0 1 1 
    0 1 0 1
    0 1 1 1
    0 1 1 0
    1 1 1 0
    1 1 1 1
    0 0 0 1
    ...

  5. 각 사각형의 대각선 (왼쪽에서 오른쪽 아래로)을 가져옵니다.

    1, 11, 100, 1011, 00111, ...

  6. 선행 0을 무시하고 10 진수로 변환합니다.

    1, 3, 4, 11, 7, ...

태스크

다음 방법 중 하나로 시퀀스를 출력하는 프로그램 또는 함수를 작성하십시오.

  • 시퀀스를 무한대로 반환하거나 인쇄하십시오.
  • 입력이 주어지면 시퀀스 i의 첫 번째 i요소를 반환하거나 인쇄하십시오 .
  • input이 주어지면 시퀀스 iith 요소 (0 또는 1 인덱스)를 반환하거나 인쇄합니다 .

어떤 출력 형식을 선택했는지 답으로 기재하십시오.

이것은 이며 각 언어에서 가장 짧은 답변이 이깁니다.

테스트 사례

시퀀스의 처음 50 개 요소는 다음과 같습니다.

1,3,4,11,7,29,56,141,343,853,321,3558,8176,3401,21845,17129,55518,134717,151988,998642,1478099,391518,7798320,8530050,21809025,61485963,66846232,54326455,221064493,256373253,547755170,4294967295,1875876391,2618012644,24710258456,6922045286,132952028155,217801183183,476428761596,51990767390,687373028085,1216614609441,7677215985062,15384530216172,22714614479340,15976997237789,0,256145539974868,532024704777005,601357273478135

답변:


10

껍질 , 15 14 바이트

zȯḋm←CtNCİ□ṁḋN

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

결과를 무한 목록으로 계속 인쇄합니다.

설명

목록에서 길이 n의 청크로 분할하고 각 청크의 헤드를 검색하는 것보다 목록에서 모든 n 번째 요소 를 얻는 더 좋은 방법이 있는지 궁금합니다 .

      tN          Get a list of all natural numbers except 1. (A)

             N    Get a list of all natural numbers.
           ṁḋ     Convert each to its binary representation and join them 
                  all into a single list.
         İ□       Get a list of squares of all natural numbers.
        C         Cut the list of bits into chunks of corresponding sizes. (B)

zȯ                Zip (A) and (B) together with the following function.
     C            Split the bit list (from B) into chunks of the given length
                  (from A).
   m←             Get the head of each chunk. This is the diagonal of the
                  bit list arranged as a square.
  ḋ               Interpret the resulting bits as binary digits and return
                  the result.

명확하게하기 위해 선형 형태를 길이 n + 1의 청크로 분할하고 각 청크의 첫 번째 요소를 검색하여 nxn 정사각형 의 대각선을 추출합니다 .

[[1 , 0 , 1 , 0
  0],[1 , 0 , 1
  1 , 0],[1 , 0
  0 , 1 , 0],[1]]



4

05AB1E , 19 17 16 바이트

°LbJsLn£θs>ô€нJC

°매우 느려지 3m°경향이 있으므로 링크에서 대체됩니다 .

온라인으로 사용해보십시오! 또는 테스트 스위트

설명

°L                 # push the range [1 ... 10^input]
  bJ               # convert each to binary and join to string
    sLn            # push the range [1 ... input]^2
       £θ          # split the binary string into pieces of these sizes and take the last
         s>ô       # split this string into chunks of size (input+1)
            €н     # get the first digit in each chunk
              JC   # join to string and convert to int

당신은 대체 할 수 없습니다 3m와 함께 n?
Outgolfer Erik

@EriktheOutgolfer : 응, 고마워! 나는 그것이 효과가 없다는 것을 확신했지만 이전 솔루션의 꼬임 때문일 수 있습니다. 같은 바이트 수 °이지만 훨씬 빠름 : P
Emigna

1에서 input ^ 2까지의 숫자는 충분하지 않습니다 . 파이썬에서와 같이 1 ~ 3을 입력하면 충분합니다.
ovs

@ovs : 아, 그렇기 때문에 이전에는 사용하지 않았습니다. 이번에는 처음 몇 항목 만 확인했습니다. 나는 이전 솔루션으로 되돌릴 것이다 (다행히 같은 바이트 수로)
Emigna

3

껍질 , 15 바이트

이것은 Martin의 대답에 다소 다른 접근 방식을 취합니다.

moḋz!NCNCṘNNṁḋN

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

설명:

              N   List of all natural numbers
            ṁḋ    Convert each to it's binary representation and flatten
         ṘNN      Repeat the list of natural numbers according the natural numbers:
                  [1,2,2,3,3,3,4,4,4,4,5,5,5,5,5...]
        C         Cut the list of bits into lists of lengths corresponding to the above
      CN          Cut that list into lists of lengths corresponding to the natural numbers
moḋz!N            For each in the list, get the diagonals and convert from binary.
m                   For each list in the list
   z!N              Zip it with natural numbers, indexing.
 oḋ                 Convert to binary

행동

ṁḋN : [1,1,0,1,1,1,0,0,1,0,1,1,1,0,1,1,1,1,0,0,0,1,0,0,1,1,0,1,0,1...]

ṘNN : [1,2,2,3,3,3,4,4,4,4,5,5,5,5,5,6,6,6,6,6,6,7,7,7,7,7,7,7,8,8...]

C : [[1],[1,0],[1,1],[1,0,0],[1,0,1],[1,1,0],[1,1,1,1],[0,0,0,1]...]

CN : [[[1]],[[1,0],[1,1]],[[1,0,0],[1,0,1],[1,1,0]]...]

m z!N : [[1],[1,1],[1,0,0],[1,0,1,1],[0,0,1,1,1],[0,1,1,1,0,1]...]

oḋ : [1,3,4,11,7,29,56,141,343,853,321,3558,8176,3401,21845...]


3

자바 (오픈 JDK 8) , 215 (212) 206 (202) 197 바이트

i->{String b="",t;int s=0,x=++i,j;for(;--x>0;s+=x*x);while(b.length()<s)b+=i.toString(++x,2);for(j=1,s=0;j<i;System.out.println(i.valueOf(t,2)),s+=j*j++)for(t="",x=s;x<s+j*j;x+=j+1)t+=b.charAt(x);}

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




2

젤리 , 16 바이트

RBFṁ
R²SÇṫ²C$m‘Ḅ

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

설명

RBFṁ  Helper link. Input: integer k
R     Range, [1, 2, ..., k]
 B    Convert each to a list of its binary digits
  F   Flatten
   ṁ  Mold to length k

R²SÇṫ²C$m‘Ḅ  Main link. Input: integer n
R            Range, [1, 2, ..., n]
 ²           Square each
  S          Sum
   Ç         Call helper link on the sum of the first n squares
       $     Monadic chain
     ²         Square n
      C        Complement, 1-n^2
    ṫ        Tail, take the last n^2 elements
        m    Modular indexing, take each
         ‘   (n+1)th element
          Ḅ  Convert from list of binary digits to decimal



1

젤리 , 18 바이트

Erik의 솔루션 과 완전히 다른 접근법 .

Ḷ²S‘ɓ*3B€Fṫ
Çm‘ḣµḄ

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

작동 원리

Ḷ²S'ɓ * 3B € Fṫ-도우미 링크 (모노 딕).

Ḷ-범위를 낮추고 [0, N)을 생성합니다.
 ²-벡터화 된 정사각형 (각 정사각형).
  S-합계
   '-젤리의 1 인덱싱을 설명하기 위해 증가합니다.
     ɓ-별도의 2 차원 체인을 시작합니다.
     * 3-3의 거듭 제곱에 대한 입력입니다.
       B €-각각을 이진수로 변환합니다.
         F-평평하게합니다.
          ṫ-꼬리. x [y-1 :] (1- 인덱스)를 반환합니다.

Çm'ḣµḄ-메인 링크 (모노 딕).

Ç-모나드로서의 마지막 링크.
 m '-모듈 식 입력 + 1. 목록에서 "입력 + 1"번째 요소를 가져옵니다.
   ḣ-머리. 자른 입력보다 색인이 높은 요소를 사용하여 위의 내용을 반환하십시오.
    µḄ-이진수를 정수로 변환합니다.

Jonathan Allan 덕분에 1 바이트를 절약했습니다 !


다이아 딕 체인을 사용하여 하나를 저장하여 다음을 제거하십시오 ³.Ḷ²S‘ɓ*3B€Fṫ
Jonathan Allan

@JonathanAllan 물론 감사합니다! 난 정말 그 트릭을 배워야한다
씨 Xcoder


0

Pyth ,  27  20 바이트

i<%hQ>s.BS^Q3s^R2QQ2

처음 몇 가지 테스트 사례를 확인하십시오.

가져 I에게 인덱스 시퀀스, 1 번째의 용어.

어떻게 작동합니까?

i<%hQ>s.BS^Q3s^R2QQ2   - Full program. Q represents the input.

         S^Q3          - Generate the (inclusive) range [1, Q ^ 3].
       .B              - Convert each to binary.
      s                - Join into a single string.
     >                 - Trim all the elements at indexes smaller than:
               ^R2Q      - The elements of the range [0, Q) squared.
              s          - And summed.
  %hQ                  - Get each Q + 1 element of the list above.
 <                     - Trim all the elements at indexes higher than:
                   Q   - The input.
i                   2  - Convert from binary to integer.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.