Прогрессирование матричных столбцов


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 байт

Принимает ввод в синтаксис карри (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так как результат Saply в матрице. это исправление является дорогостоящим. Интересно, есть ли один игрок в гольф?
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.
Благодаря BMO сохранено 2 байта, но все же не так коротко, как ответ BMO.
Моя первая попытка использования шелухи.
Попробуйте онлайн!





1

Желе , 11 байт

ṖS+R¬;$)⁹ịⱮ

Попробуйте онлайн!

-1 спасибо Джонатану Аллану .

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


0ṁ;Ɗ-> ¬;$сохраняет байт.
Джонатан Аллан

@JonathanAllan И я подозреваю, что этого еще недостаточно. По крайней мере, я убрал унизительное ’R... (то есть, по крайней мере, для меня). Странная вещь заключается в том, что в течение последних нескольких дней я думал о последовательности Туэ-Морса (которая содержится в Jelly ;¬$).
Эрик Outgolfer


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));}

n0 индексируется, x1 индексируется, выводит числа с новой строкой, разделенные и перевернутые.

Порт ответа @ Arnauld's JavaScript (ES6) .

Попробуйте онлайн.
Печатный результат в правильном порядке на 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.