그들로부터 시작


18

엄격하게 양의 정수 n이 주어지면 다음 단계를 수행하십시오.

  1. n 1 s 의 배열 A 를 만듭니다 .
  2. A 에 하나의 요소 만있는 경우 종료하십시오. 그렇지 않으면 첫 번째 요소부터 A의 각 쌍을 합계로 바꾸고 A 의 길이가 홀수 인 것처럼 마지막 요소를 그대로 두고이 단계를 반복하십시오.

출력은 첫 단계에서 마지막 단계까지 각 단계 후에 A 의 상태를 포함해야합니다 . 의 사용 표준 허점은 금지되어 있습니다. 이것은 문제이므로 각 언어에서 가장 적은 바이트를 가진 솔루션이 승리합니다.

테스트 사례

이 예제의 출력에서 ​​각 줄은 상태입니다. 합리적인 형식으로 출력 할 수 있습니다.

입력: 1

[1]

입력: 4

[1, 1, 1, 1]
[2, 2]
[4]

입력: 13

[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
[2, 2, 2, 2, 2, 2, 1]
[4, 4, 4, 1]
[8, 5]
[13]

입력: 15

[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
[2, 2, 2, 2, 2, 2, 2, 1]
[4, 4, 4, 3]
[8, 7]
[15]

이 질문 아이디어를 역순으로 복사 할 수 있습니까? 주어진 숫자 n, 단계적으로 A를 출력하고 n 1에 도달 할 때까지 계속?
pixma140

9
@ pixma140 출력이 뒤 바뀌면 본질적으로 같은 도전이 될 것입니다. 수정은 사소합니다.
아웃 골퍼 에릭 11

답변:



4

MATL , 10 바이트

:g`t2estnq

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

작동 원리

:     % Input n (implicit). Range [1 2 ... n]
g     % Convert to logical. Gives [1 1 ... 1]
`     % Do...while
  t   %   Duplicate
  2   %   Push 2
  e   %   Reshape as 2-column matrix, in column-major order, padding with 0 if needed
  s   %   Sum of each column
  t   %   Duplicate
  n   %   Number of elements
  q   %   Subtract 1. This will be used as loop condition
      % End (implicit). If top of the stack is not zero run new iteration
      % Display stack, bottom to top (implicit)

4

파이썬 3 , 57 바이트

def f(i,j=1):print(i//j*[j]+[i%j][:i%j]);i>j and f(i,j*2)

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

파이썬 2 , 51 바이트

def f(i,j=1):print i/j*[j]+[i%j][:i%j];i>j>f(i,j*2)

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

tsh 덕분에 총 -6 바이트

재귀 기능. 각 단계에 2대해 합은 주어진 정수보다 작거나 같은 의 거듭 제곱 목록을 구성합니다 . 그런 다음보다 큰 경우 나머지를 추가합니다 0.


1
파이썬 3 61 바이트 : def f(i,j=1):l=i//j*[j]+[i%j][:i%j];print(l);i>j and f(i,j*2); 파이썬 2 55 바이트 :def f(i,j=1):l=i/j*[j]+[i%j][:i%j];print l;i>j>f(i,j*2)
tsh

@tsh 물론입니다. 감사합니다! i>j이전 솔루션에서 작동하지 않았으며 나중에 시도하는 것을 잊었습니다.
Jitse


3

아르 자형 , 65 바이트

주세페 덕분에 -1 바이트.

n=scan();while(T<2*n){cat(rep(+T,n%/%T),if(n%%T)n%%T,"\n");T=2*T}

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

%/%%%k=2^in%/%kkn%%k21

여기 내가 사용하고 T대신 k으로 초기화되기 때문에, TRUE1로 변환되는 난 아직도 인쇄해야 +T대신 T의 벡터 피하기 위해 TRUE출력에들.


약 5 분, 거의 60 바이트 나에게 이길 수 있지만 ... 주세페가 맞습니다. 마지막 단계는 출력하지 않습니다.
Sumner18

@ Sumner18 지금 수정해야합니다.
Robin Ryder

+T다음보다 짧습니다T+0
Giuseppe

@ 주세페 감사합니다, 나는 무언가를 잊고 있다는 것을 알았습니다.
Robin Ryder

3

Pyth , 10 바이트

.u+McN2m1

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

.u          # Apply until a result is repeated, return all intermediate steps: lambda N,Y:
  +M        # map by + (reduce list on +):
    cN2     # chop N (current value) into chunks of 2, last one is shorter if needed
       m1Q  # map(1, range(Q)) (implicit Q = input)

FryAmTheEggman 덕분에 -1 바이트







2

자바 스크립트, 55 바이트

f=(n,t=1,r=n)=>r>t?t+[,f(n,t,r-t)]:n>t?r+`
`+f(n,t+t):r

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

이것은 기본적으로 다음 코드의 골프 버전입니다.

function f(n) {
  var output = '';
  t = 1;
  for (t = 1; ; t *= 2) {
    for (r = n; r > t; r -= t) {
      output += t + ',';
    }
    output += r;
    if (n <= t) break;
    output += '\n';
  }
  return output;
}


2

Brachylog , 17 바이트

;1j₍ẹẉ₂{ġ₂+ᵐ}ⁱ.ẉȮ

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

끔찍하게 긴이이기 때문에, 나는 여전히 사용하는 영리한 조금 느낌 .ẉȮ: 길이가 1이 될 경우 확실한 방법 뭔가를 인쇄를 한 후 확인 ẉ₂l1, ẉ₂~g또는 ẉ₂≡Ȯ의 경우 마지막에이 필요하기 때문에 ẉ₂통합하여 입력 및 출력 인쇄 하기 전에Ȯ 길이 1의 목록으로 미리 제한되어 있으므로 입력이 길이 1의 목록이 아닌 경우 통합이 실패합니다. 술어의 끝에서이 기능은 다음과 ẉ₂같이 피할 수 있습니다. 아래 첨자 대신 출력 변수 사용 : .ẉȮ먼저 출력 변수와 입력을 통합 한 다음 출력 변수를 인쇄 한 다음 출력 변수를로 통합합니다 Ȯ.


2

Stax , 10 바이트

Çë⌐ⁿ┤5π»Å╡

실행 및 디버깅

순서:

  1. 0 기반 범위를 생성하십시오.
  2. 모든 항목이 0이 될 때까지 각 요소를 반복해서 반으로 줄입니다.
  3. 각 고유 한 배열의 실행 길이를 계산하십시오.

주석이 달린 출처 :

r       main:[0 .. 5] 
{{hmgu  main:[[0 .. 5], [0, 0, 1, 1, 2, 2], [0, 0, 0, 0, 1, 1], [0, 0, 0, 0, 0, 0]] 
m:GJ    main:"1 1 1 1 1 1" 

1

, 19 바이트

NθIE↨⊖⊗θ²E⪪Eθ¹X²κLλ

온라인으로 사용해보십시오! 링크는 자세한 버전의 코드입니다. 숯의 기본 출력 형식 (줄당 하나의 숫자)을 사용하고 하위 배열은 서로 이중 간격을 갖습니다. 설명:

Nθ                  Input `n` into a variable
       θ            `n`
      ⊗             Doubled
     ⊖              Decremented
    ↨   ²           Converted to base 2 (i.e. ceil(log2(input)))
   E                Map
           Eθ¹      List of `1`s of length `n`
          ⪪         Split into sublists of length
               ²    Literal `2`
              X     To power
                κ   Loop index
         E          Map over each sublist
                 Lλ Take the length
  I                 Cast to string for implicit print


1

펄 6 , 38 바이트

{1 xx$_,*.rotor(2,:partial)>>.sum...1}

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

지금 기억하지 못하는 부분 회전에 대한 지름길이 있습니다 ...

설명:

{                                    }  # Anonymous code block
                                 ...    # Return a sequence
 1 xx$_,            # Starting with a list of 1s with input length
        *           # Where each element is
         .rotor(2,:partial)        # The previous list split into chunks of 2 or less
                           >>.sum  # And each chunk summed
                                    1  # Until the list is length 1



0

가이아 , 12 바이트

ċ)¦⟨:q2/Σ¦⟩ª

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

ċ)¦		| generate array of n 1's (really, generate array of n 0's and increment each)
   ⟨      ⟩ª	| do the following until you get to a fixed point:
    :q		| dup and print with a newline
      2/	| split into groups of 2, with last group possibly being smaller
	Σ¦	| take the sum
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.