Прогресування стовпців матриць


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
              ...

Кожен новий рядок матриці будується, починаючи з zнулів, де 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 = 15і x = 6, вихід буде [1, 3, 4, 10, 11, 0].

Для введення n = 29і x = 15, вихід буде [1, 0, 6, 8, 15, 0, 0, 34, 39, 0, 0, 0, 0, 0, 120].

Для введення n = 99і x = 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

JavaScript (ES6), 45 байт

Здійснює введення в синтаксис currying (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оскільки результат sapply вже не є матрицею. це виправлення дорого цікаво, чи є гольфіст?
JayCe

О, так, ти маєш рацію. Ну, на щастя, є!
Джузеппе

Для циклу, так! І ви пограли в 4 байти :)
JayCe

@JayCe та моя оригінальна думка була індексувати зовнішню repз nвсередині sapply, які зберегли байти, але потім я згадав , що forцикли коротше , sapplyтак як я не мав би визначити функцію.
Джузеппе



2

MATL , 25 18 байт

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

Спробуйте в Інтернеті!

Дякуємо Луїсу Мендо за те, що виграли 6 байт!

Це по суті MATL порт моєї R відповіді.

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.
Збережено 2 байти завдяки BMO, але все ж не так коротко, як відповідь BMO.
Моя перша спроба використання лушпиння.
Спробуйте в Інтернеті!





1

Желе , 11 байт

ṖS+R¬;$)⁹ịⱮ

Спробуйте в Інтернеті!

-1 завдяки Джонатану Аллану .

Аргумент 1: x
Аргумент 2: n + 1


0ṁ;Ɗ-> ¬;$зберігає байт.
Джонатан Аллан

@JonathanAllan І я підозрюю, що цього ще недостатньо. Принаймні, я зняв принизливе ’R... (тобто, принаймні, для мене) Дивне, що протягом останніх кількох днів я замислювався над послідовністю Чт-Морз (яка, в Желі, міститься ;¬$).
Ерік Аутгольфер


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

Java 8, 65 63 60 байт

n->x->{for(;x>0;)System.out.println(n/x%2*(n%x+x*--x/2+1));}

nє 0-індексованим, x1-індексованим, виводить номери з новим рядком з обмеженим та оберненим.

Порт @ JavaScript (ES6) відповідь Arnauld в .

Спробуйте в Інтернеті.
Симпатичний друкований результат у правильному порядку на 8 6 байт довше: Спробуйте в Інтернеті.


0

Haskell, 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.