Для каждой строки, а затем столбца матрицы мы можем добавить дополнительную запись с суммой двух последних записей в этой строке или столбце. Например, со следующей входной матрицей:
[ 1 1 1 ]
[ 2 3 4 ]
Результирующая матрица будет:
[ 1 1 1 2 ]
[ 2 3 4 7 ]
[ 3 4 5 9 ]
Учитывая ввод целого числа N и матрицы [X, Y] размером не менее 2x2, выполните описанное выше расширение N раз и выведите результат. Полученная матрица всегда будет иметь размер [X + N, Y + N].
Примеры:
Input: Output:
2, [ 0 0 ] [ 0 0 0 0 ]
[ 0 0 ] [ 0 0 0 0 ]
[ 0 0 0 0 ]
[ 0 0 0 0 ]
3, [ 1 1 1 ] [ 1 1 1 2 3 5 ]
[ 2 3 4 ] [ 2 3 4 7 11 18 ]
[ 3 4 5 9 14 23 ]
[ 5 7 9 16 25 41 ]
[ 8 11 14 25 39 64 ]
2N
время цикла больше, чем дваN
раза?2*
(постфиксная запись). Возможно, он должен иметь встроенный односимвольный символ, он часто используется. Также2^
(квадрат). Но у меня не хватает места для кода :-)J, 19 байт
Это определяет наречие, которое берет число слева и производит глагол с матрицей справа. Для второго примера это дает
объяснение
источник
К, 23 байта
В бою:
Попробуй это здесь .
источник
{x
и трейлингy}
Желе,
151312 байт-1 байт @Dennis
Как и в ответе @LuisMendo на MATL, это передвигает массив перед выполнением преобразования вдоль одной оси. Поэтому нам нужно вызывать функцию 2 * n раз.
Попробуй это здесь .
источник
ES6, 134 байта
Объяснение:
источник
Haskell, 67 байт
Пример использования:
Как это работает:
источник
sudo apt-get install haskell-platform
и запускаюghci
REPL, который дает мнеPrelude>
подсказку. Когда я вставляю,o%m=m++[o(+)(last m)$last$init m]
я получаю<interactive>:2:4: parse error on input '='
. Можете ли вы дать мне небольшой учебник по запуску этого из исходного файла или из REPL?o%m=...
строку (и только эту строку) в файл с именем, скажем такfib-matrix.hs
. Затем вы можете использовать:l fib-matrix.hs
команду,ghci
чтобы загрузить определения и вызвать функцию main, как описано в моем примере использования. - Или использоватьlet o%m=... in ( (!!). ... ) [[1,1,1]...] 3
.f=
перед второй строкой:f=(!!).iterate...
сохранить обе строки в файле и загрузить его черезl: <filename.hs>
. После этого вы можете позвонитьf [[1,1,1],[2,3,4]] 3
и т.д.CJam,
1716 байтовФормат ввода - это сначала матрица (в виде двумерного массива в стиле CJam), а затем число итераций.
Проверьте это здесь.
объяснение
Оказывается, это то же самое решение, что и у всех остальных:
источник
Серьезно, 20 байтов
Принимает матрицу ввода (в виде 2D списка), затем
N
. Выводит 2D список.Эта версия по какой-то причине не работает на онлайн-переводчике, но работает с этим предварительным коммитом .
Версия, которая работает онлайн, для 23 байтов:
Принимает ввод в обратном порядке (
N
затем матрица).Попробуйте онлайн!
Я добавлю объяснение после того, как немного посплю. Работать с ошибками интерпретатора никогда не бывает весело.
источник
Pyth,
1312 байтПопробуйте онлайн. Тестирование.
Использует тот же алгоритм для большинства ответов. Принимает в качестве входных данных матрицу в виде двумерного массива в первой строке и
n
во второй строке.объяснение
источник
Matlab, 60 байт
Сначала я возился с причудливыми методами индексации Matlab (т. Е.
A(end+1,:)=sum...
), Прежде чем понял, что в этом редком случае простая конкатенация на самом деле дешевле в Matlab. Жаль, что мне пришлось преобразовать это в реальную функцию. Должен работать и с Octave.Я предполагаю, что это яркий пример того, как не создавать алгоритмы. Для A = 2x2, n = 1000 этот алгоритм уже занимает 5 секунд на моем ноутбуке, n = 2000 - это почти 50 секунд! (или приблизительно 30 с, если A -
gpuArray
спасибо моему надежному Quadro 1000M)источник
f([0,1;2,3],1000)
f.m
. 2) Началоoctave
. 3) Вставьтеload f.m; f([1,1,1;2,3,4],3)
в подсказку REPL - у меня работает.Ява, 2179 байт
Только что отработал: - Этот код на языке Java.
источник
{}
в верхней части окна редактирования - это автоматически сделает этот префикс.Python, 103
105байтАнонимная функция берет список из списка и переходит к рекурсивной функции
f
. Выходнойf
сигнал транспонируется и затем передается снова, затем выходной сигнал второго повторного транспонирования. Вывод представляет собой список кортежейСохранено два байта благодаря bakuriu
источник
n>0
может быть простоn
, так как вы начинаете с положительногоn
и когда вы достигаете0
его значение ложно.APL (Dyalog Classic) , 17 байтов
Попробуйте онлайн!
источник
Perl 6 ,
87 7371 байтИспользование:
источник
perl6
дает мне некоторые ошибки . Я новичок в Perl - что я делаю не так?my &code = ->\c,\m{ … }
чтобы прояснить, что->\c,\m{ … }
необходимо заменить приведенным выше кодом. Я обычно использую неявные$_
или@_
явные параметры-заполнители,$^a
потому что они, как правило, короче. Я просто не думал об этом. Также убедитесь, что вы используете достаточно новую версию ($*PERL.compiler.version !before 2015.12
)m:
и пробелом). Вы также можете напрямую отправить msg camelia