Вызов:
Учитывая квадратную матрицу ввода A , заполните матрицу одной строкой и одним столбцом со всех четырех сторон.
- Значение каждого элемента в верхней и нижней строке должно быть суммой элементов в каждом соответствующем столбце.
- Значение каждого элемента в левом и правом столбце должно быть суммой элементов в каждой соответствующей строке.
- Значение элементов в левом верхнем и правом нижнем углу должно быть суммой элементов на диагонали
- Значение элементов в правом верхнем и нижнем левом углу должно быть суммой элементов в анти-диагонали.
Пример:
A =
1 5 3
3 2 4
2 5 5
Output:
8 6 12 12 7
9 1 5 3 9
9 3 2 4 9
12 2 5 5 12
7 6 12 12 8
Объяснение:
Верхний левый и нижний правый элементы представляют собой сумму диагонали 1 + 2 + 5 = 8 . Верхний правый и нижний левый элементы представляют собой сумму антидиагональности 2 + 2 + 3 = 7 .
Верхний и нижний ряд (кроме углов) представляют собой сумму каждого из столбцов в A : 1 + 3 + 2 = 6 , 5 + 2 + 5 = 12 и 3 + 4 + 5 = 12 . Аналогично, левый и правый столбец (кроме углов) представляют собой сумму каждой из строк A : 1 + 5 + 3 = 9 , 3 + 2 + 4 = 9 и 2 + 5 + 5 = 12 .
Входные данные:
- Непустая квадратная матрица с неотрицательными целыми числами.
- Дополнительный формат
Выход:
- Матрица дополняется, как описано выше
- Необязательный формат, но он должен совпадать с форматом ввода
Тестовые случаи:
Используйте предложения в этом задании, если вы хотите преобразовать формат ввода в более подходящий (например [[1, 5],[0, 2]]
).
0
----------------
0 0 0
0 0 0
0 0 0
1 5
0 2
----------------
3 1 7 5
6 1 5 6
2 0 2 2
5 1 7 3
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
----------------
65 65 65 65 65 65 65
65 17 24 1 8 15 65
65 23 5 7 14 16 65
65 4 6 13 20 22 65
65 10 12 19 21 3 65
65 11 18 25 2 9 65
65 65 65 65 65 65 65
15 1 2 12
4 10 9 7
8 6 5 11
3 13 14 0
----------------
30 30 30 30 30 30
30 15 1 2 12 30
30 4 10 9 7 30
30 8 6 5 11 30
30 3 13 14 0 30
30 30 30 30 30 30
Это код-гольф , поэтому выигрывает самое короткое решение на каждом языке . Пояснения приветствуются.
источник
Ответы:
Октава , 64 байта
Спасибо Тому Карпентеру за то, что он сохранил 4 байта и исправил ошибку, которая была у меня в оригинальном коде!
Попробуйте онлайн!
Объяснение:
Обратите внимание, я написал это задолго до того, как отправил вызов.
источник
Желе , 27 байт
Попробуйте онлайн!
источник
MATL ,
2726 байтПопробуйте онлайн! Или проверьте все тестовые случаи .
объяснение
источник
APL (Dyalog) , 37 байт
Попробуйте онлайн!
1 1∘⍉
диагональ (горит сворачивание обеих осей в одну)d←
сохранить эту функцию как d и применить его к аргументу+⌿
добавить столбец суммыd∘⌽,
prepend d применяется к обратному аргументу(
…)⍪
Сложить следующее:+/,⊢,+/
суммы строк, неизмененный аргумент, суммы строк(
…)⍪
Сложить следующее:d,+⌿,d∘⌽
применяется к аргументу, суммы столбцов, d применяется к обратному аргументуисточник
Желе , 26 байт
Попробуйте онлайн!
Выглядит удивительно иначе , чем решение Эрика .
Мне наконец удалось понять, как
¦
работает (отладка кода Jelly, смеется). Жаль, что в моем случае это требует€
работыÇ
.объяснение
Код использует три ссылки. Первая вспомогательная ссылка дополняет вектор своей суммой на обоих концах, вторая вспомогательная ссылка фиксирует два угла матрицы, и главная ссылка вызывает их соответствующим образом.
источник
Python 3 , 155 байт
Это предложение @LeakyNun, которое экономит 54 байта . Затем я сам немного поиграл в гольф.
Попробуйте онлайн!
Исходное решение - Python 3 , 216 байт
Попробуйте онлайн!
источник
Python 2 ,
268250184174 байта10 благодаря Стьюи Гриффину
Попробуйте онлайн!
Некоторые пояснения Входные данные загружаются в виде матрицы. Сначала код вычисляет сумму каждого столбца и каждой строки, используя numpy.sum. Затем он вычисляет сумму диагонали по numpy.trace. После этого он получает другую диагональ, переворачивая матрицу влево-вправо. Наконец, он использует numpy.vstack и numpy.hstack для склеивания частей.
источник
R, 129 байт
Анонимная функция, которая принимает квадратную матрицу в качестве входных данных. Я отправлю объяснение, если есть интерес.
источник
PHP , 211 байт
Попробуйте онлайн!
расширенный
источник
Python 3 , 125 байт
Попробуйте онлайн!
Слегка разгульный
Это принимает входные данные, отформатированные в виде массива, а затем использует инструменты индексации
np.c_
иnp.r_
для создания нового массива за один раз.np.trace
иnp.sum
используются для расчета сумм по диагонали и везде, соответственно.T
используется для выполнения транспонирования до и после объединения сумм, потому что это короче, чем создание всех массивов 2-мерными и использованиеnp.r_
.m[::-1]
сохраняет байты при сравненииrot90(m)
илиfliplr(m)
для поиска трассы для второй диагонали.источник
JavaScript (ES6), 170 байт
Ввод и вывод - это двумерный массив чисел.
Разъяснения
Тестовый фрагмент
Ввод / вывод был отформатирован с помощью новых строк и вкладок.
источник
LOGO , 198 байт
Функция
f
принимает матрицу в виде 2D-списка, а затем выводит полученную матрицу.g
это вспомогательная функция.источник