행렬 열의 진행


17

무한 행렬을 고려하십시오.

0  1  0  1  0  1  0  1  0  1  0  1  0  1  0  1
0  0  2  3  0  0  2  3  0  0  2  3  0  0  2  3
0  0  0  4  5  6  0  0  0  4  5  6  0  0  0  4 ...
0  0  0  0  7  8  9 10  0  0  0  0  7  8  9 10
0  0  0  0  0 11 12 13 14 15  0  0  0  0  0 11
              ...

행렬의 각 새 행은 z0 으로 시작하여 구성 됩니다. 여기서 z해당 행에서 사용하는 양수의 길이입니다. 양수는 1행을 반복 할 때마다 추가 숫자 로 시작 하고 증가하고 추가하여 구성됩니다 . 그 패턴은 오른쪽으로 무한 반복됩니다. 예를 들어, 첫 번째 행이 시작 0, 1, 0, 1...되고 두 번째 행이 시작됩니다 0,0, 2,3, 0,0, 2,3.... 패턴에 따라 세 번째 행이 시작됩니다 0,0,0, 4,5,6, 0,0,0, 4,5,6....

두 개의 입력으로 정수 감안 n하고 x, 출력 제 (최상위) x의 번호를 n상기 매트릭스의 열 번째. (열에 대해 0 또는 1 인덱싱을 선택할 수 있으며 제출할 항목을 지정하십시오.)

예를 들어, 입력 n = 0(0 인덱싱)의 경우 열은 완전히 0s이므로 출력은 x 0s입니다.

입력 n = 15x = 6의 경우 출력은입니다 [1, 3, 4, 10, 11, 0].

입력 n = 29x = 15의 경우 출력은입니다 [1, 0, 6, 8, 15, 0, 0, 34, 39, 0, 0, 0, 0, 0, 120].

입력 n = 99x = 25의 경우 출력은입니다 [1, 3, 4, 0, 15, 0, 0, 0, 37, 55, 56, 0, 87, 93, 0, 0, 151, 163, 176, 0, 0, 0, 0, 0, 325].

I / O 및 규칙

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

답변:


4

자바 스크립트 (ES6), 45 바이트

카레 구문으로 입력을 (n)(x)받습니다.

n=>g=x=>x?[...g(x-1),n/x&1&&n%x+x*~-x/2+1]:[]

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

어떻게?

직접 수식을 사용하여 열 n (0- 인덱스) 및 행 x (1- 인덱스) 에서 셀 값을 가져옵니다 .

n / x & 1 &&     // is this cell zero or non-zero?
n % x +          // column modulo row --> increment for a non-zero value at this position
x * ~-x / 2 + 1  // minimum value of non-zero values for this row:
                 // ∑(i=1...x-1)(i) + 1 = x(x - 1) / 2 + 1

3

R , 80 76 바이트

버그를 지적한 @JayCe에게 감사합니다!

function(n,x)for(a in 1:x)print(rep(c(rep(0,a),((y=sum(1:a))-a+1):y),,n)[n])

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

에 대해 1 기반 색인 생성을 사용 n합니다. 골퍼 알고리즘이 존재할 가능성이 높지만 rep순진한 솔루션을 가능하게합니다.


n=1더 이상 행렬에 적용되지 않기 때문에 오류가 발생합니다 . 이 수정 은 비용이 많이 듭니다. 골퍼가 있는지 궁금합니다.
JayCe

네 맞아요 운 좋게도 하나 있습니다!
주세페

for 루프, 그래! 그리고 당신은 프로세스에서 4 바이트를 골프 :)
JayCe

그래 @JayCe 내 원래 생각은 가장 바깥 쪽 인덱스했다 repn내부 sapply바이트를 저장 한은, 그러나 나는 것을 기억 for루프보다 짧은 sapply내가 함수를 정의 할 필요가없는 것이기 때문이다.
주세페



2

MATL , 25 18 바이트

x:"@:t~ys:b@-)h1G)

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

6 바이트를 골라 낸 Luis Mendo에게 감사합니다!

이것은 본질적으로 R 답변의 MATL 포트입니다.

x		 % implicit input, read n and delete
:		 % implicit input, read x and push [1..x]
"		 % for loop with i = 1..x
 @:		 % push [1..i]
   t		 % duplicate
    ~		 % logical negate, turn to array of zeros
		 % stack: [[1..i], [0 .. (i times)]]
     y		 % duplicate from below
		 % stack: [[1..i], [0 .. (i times)], [1..i]]
      s:	 % sum and range
		 % stack: [[1..i], [0 .. (i times)], [1..(i * (i + 1)/2)]]
	b	 % bubble up
		 % stack: [[0 .. (i times)], [1..(i * (i + 1)/2)], [1..i]]
	 @-	 % push i and subtract. This will be used as a modular index to get the last i elements
		 % stack: [[0 .. (i times)], [1..(i * (i + 1)/2)], [1-i..0]]
	   )	 % index into array modularly to get the last i elements
		 % stack: [[0 .. (i times)], [(i-1)*i/2 + 1, .. (i * (i + 1)/2)]]
	    h	 % horizontally concatenate the array
	     1G) % push n and index modularly, leaving the result on the stack
		 % implicit end of for loop. The stack now contains the appropriate elements in order
		 % implicit end. Print stack contents


1

껍질 , 14 바이트

↑!Tzo¢+MRN0CNN

인수 n(첫 번째)는 1- 색인이며 온라인으로 시도하십시오!

또는 ↑!TṠzo¢+†K0CNN동일한 바이트 수로 사용할 수 있습니다 .

설명

↑!Tz(¢+)MRN0CNN -- example inputs n=4, x=3
            C N -- cut the natural numbers: [1,2,3,4,…]
             N  -- | using the natural numbers
                -- : [[1],[2,3],[4,5,6],[7,8,9,10],…]
        M N     -- map over the naturals
         R 0    -- | replicate 0 that many times
                -- : [[0],[0,0],[0,0,0],[0,0,0,0],…]
   z(  )        -- zip these two lists
      +         -- | concatenate
     ¢          -- | cycle
                -- : [[0,1,0,1,…],[0,0,2,3,0,0,2,3,…],…]
  T             -- transpose: [[0,0,0,0,…],[1,0,0,0,…],[0,1,0,0,…],[1,3,4,0,…],…]
 !              -- index into that list using n: [1,3,4,0,…]
↑               -- take x: [1,3,4]

1

껍질 , 21 19 바이트

↑mȯ!⁰¢§+`R0§…ȯ→Σ←ΣN

인수를 n(1 인덱스)로 취한 다음을 사용 x합니다.
BMO 덕분에 2 바이트를 절약했지만 BMO의 대답만큼 짧지는 않습니다.
Husk를 사용하려는 첫 번째 시도입니다.
온라인으로 사용해보십시오!





1

젤리 , 11 바이트

ṖS+R¬;$)⁹ịⱮ

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

덕분에 -1 Jonathan Allan .

인수 1 : x
인수 2 : n + 1


0ṁ;Ɗ-> ¬;$바이트를 저장합니다.
Jonathan Allan

@JonathanAllan 그리고 아직 충분하지 않은 것 같습니다. 적어도 나는 굴욕을 제거했습니다 ’R... (적어도 나를 위해) 이상한 것은 지난 며칠 동안 Thue-Morse 시퀀스 (Jelly에 포함되어 있음 ;¬$)를 생각하고 있다는 것입니다 .
아웃 골퍼 에릭 11


0

, 19 바이트

IE…·¹N§⁺Eι⁰EιL⊞Oυωη

온라인으로 사용해보십시오! 링크는 자세한 버전의 코드입니다. 설명:

    ¹               Literal 1
     N              First input (`x`) as a number
  …·                Inclusive range
 E                  Map (value `i`, 0-indexed counter `k`)
         ι          Current value
        E           Map over implicit range
          ⁰         Literal 0 (i.e. create array of `i` zeros)
            ι       Current value
           E        Map over implicit range
                 ω  Arbitrary variable
                υ   Predefined array
              ⊞O    Push
             L      Length
       ⁺            Concatenate arrays
      §           η Index by second input (`n`)
I                   Cast to string and implicitly print on separate lines

스 니펫 은 더미 값을 루프로 전달할 때마다 배열에 더미 값을 푸시하고 결과 배열의 길이를 가져가는 편리한 방법으로 EιL⊞Oυω다음 i정수를 생성합니다 .



0

하스켈, 67 바이트

i#l=cycle((++)=<<(0<$)$[i..l-1]):l#(l+l-i+1)
n!x=take x$(!!n)<$>1#2

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

i#l                  -- function # builds the infinite matrix
                     -- input: i and l are lowest and highest+1 non-zero number of
                     -- the current line
   = cycle           -- for the current line, repeat infinitely
           [i..l-1]  --   the non-zero numbers of the line appended 
     (++)=<<(0<$)    --   to a list of 0s with the same length
   :                 -- append next row of the matrix
     l#(l+l-i+1)     --   which is a recursive call with i and l adjusted

n!x =                -- main function
              1#2    -- create matrix
      (!!n)<$>       -- pick nth element of each row
  take x             -- take the first x numbers thereof
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.