Учитывая список чисел [ a 1 a 2 ... a n ] , вычислите сумму всех матриц Aᵢ, где Aᵢ определяется следующим образом ( m - максимум всех aᵢ ):
1 2 ⋯ (i-1) i (i+1) ⋯ n
+----------------------------
1 | 0 0 ⋯ 0 aᵢ aᵢ ⋯ aᵢ
2 | 0 0 ⋯ 0 aᵢ aᵢ ⋯ aᵢ
. . . . . . . .
. . . . . . . .
aᵢ | 0 0 ⋯ 0 aᵢ aᵢ ⋯ aᵢ
aᵢ₊₁ | 0 0 ⋯ 0 0 0 ⋯ 0
. . . . . . . .
. . . . . . . .
m | 0 0 ⋯ 0 0 0 ⋯ 0
пример
Учитывая вход, [2,1,3,1]
мы строим следующую матрицу:
[2 2 2 2] [0 1 1 1] [0 0 3 3] [0 0 0 1] [2 3 6 7]
[2 2 2 2] + [0 0 0 0] + [0 0 3 3] + [0 0 0 0] = [2 2 5 5]
[0 0 0 0] [0 0 0 0] [0 0 3 3] [0 0 0 0] [0 0 3 3]
Правила и ввод / вывод
- Вы можете предположить, что ввод не пуст
- Вы можете предположить, что все входы неотрицательны (0≤)
- входными данными могут быть матрица 1 × n (или n × 1), список, массив и т. д.
- аналогичным образом вывод может быть матрица, список списков, массив и т. д.
- Вы можете принимать и возвращать входные данные через любой формат ввода / вывода по умолчанию
- ваша заявка может быть полной программой или функцией
Контрольные примеры
[0] -> [] or [[]]
[1] -> [[1]]
[3] -> [[3],[3],[3]]
[2,2] -> [[2,4],[2,4]]
[3,0,0] -> [[3,3,3],[3,3,3],[3,3,3]]
[1,2,3,4,5] -> [[1,3,6,10,15],[0,2,5,9,14],[0,0,3,7,12],[0,0,0,4,9],[0,0,0,0,5]]
[10,1,0,3,7,8] -> [[10,11,11,14,21,29],[10,10,10,13,20,28],[10,10,10,13,20,28],[10,10,10,10,17,25],[10,10,10,10,17,25],[10,10,10,10,17,25],[10,10,10,10,17,25],[10,10,10,10,10,18],[10,10,10,10,10,10],[10,10,10,10,10,10]]
Ответы:
Желе ,
105 байтПопробуйте онлайн!
Как это работает
источник
R , 80 байт
Попробуйте онлайн!
Принимает входные данные от стандартного ввода; печатает
0x1
матрицу для ввода0
, которая печатает какисточник
F
это встроенная глобальная переменная, начальное значение которой равноFALSE
. Здесь он приводится к 0 и используется в качестве начального значения кумулятивной суммы. Этот ответ демонстрирует причину не использоватьF
иT
за исключением кода, специально разработанного, чтобы никогда не использоваться на самом деле!Haskell ,
706651 байтПопробуйте онлайн!
источник
JavaScript (ES6),
8879 байтВозвращает
[]
за[0]
.Попробуйте онлайн!
источник
APL (Dyalog Unicode) , 8 байтов SBCS
Полная программа. Запрашивает stdin для списка, печатает матрицу на стандартный вывод.
Использует метод Денниса .
Попробуйте онлайн!
⎕
STDIN⍴⍨¨
r eshape-селфи каждого↑
смешать список списков в матрицу, заполнив нулями⍉
транспонирования+\
накопленная построчная суммаЭто
⍉
не имеет никакого значения для вычислений, поэтому его можно было бы опустить и\
изменить⍀
на сумму по столбцам, а не по строкам.источник
Python 2 , 85 байт
Попробуйте онлайн!
источник
Октава , 64 байта
Попробуйте онлайн!
Объяснение:
Еще раз: выражения в списке аргументов и eval используются в одной функции :)
Он принимает в
x
качестве входных данных и создает две одинаковые матрицы, заполненные нулями, с размерамиk=a=zeros(length(x),max(x))
. Это достигается путем добавления горизонтального вектораx
с вертикальным вектором с1:max(x)
неявным расширением размеров до двумерного массива, а затем умножения его на ноль.~(x+...)
к сожалению, не работает, так как это заставляетa
быть логическим массивом в остальной части функции.for i=x
это цикл, который для каждой итерации делаетi=x(1)
, тоi=x(2)
и так далее.a(1:i,k++:end)
является частью матрицы, которая должна обновляться для каждой итерации.1:i
вектор, указывающий, какие строки должны быть обновлены Еслиi=0
, то это будет пустой вектор, поэтому ничего не будет обновлено, иначе это так1, 2 ...
.++k:end
увеличиваетk
матрицу на единицу и создает диапазон от первого значения этой матрицы (1,2,3...
) до последнего столбцаa
матрицы.+=i
добавляет текущее значение кa
.end,a
завершает цикл и выводитa
.источник
GolfScript , 39 байт
Попробуйте онлайн!
Использует алгоритм Денниса .
источник
Wolfram Language (Mathematica) , 42 байта
Попробуйте онлайн!
источник
Java 10, 142 байта
Попробуйте онлайн.
источник
Рубин , 50 байтов
Попробуйте онлайн!
источник
Пари / ГП , 60 байт
Попробуйте онлайн!
источник