Напишите программу или функцию, в которой матрица A (максимальное значение размеров матрицы равно 100) преобразуется в новую матрицу B. Каждый элемент новой матрицы B представляет собой сумму положительных соседей соответствующего элемента матрицы A ,
Рассматриваются только соседи в четырех ортогональных направлениях, а края не обвиваются.
Пример ввода:
1 2 3
4 -1 -2
-3 -4 10
1 2 10
Выход:
6 4 2
1 6 13
5 12 10
2 11 12
Правила:
- В качестве входных данных используйте целые числа.
- Это код-гольф , поэтому выигрывает самый короткий код в байтах.
Ответы:
MATL , 9 байт
Попробуйте онлайн!
объяснение
Входная матрица умножается соответствующей маской, чтобы сделать отрицательные значения равными 0. Затем применяется двумерная свертка, чтобы вычислить сумму соседей каждой записи.
источник
Октава,
464440 байтСохранено 2 байта благодаря ядру @flawr@ LuisMendo на 4 байта короче, чем @ flawr.
Так же, как ответ @ LuisMendo ! Только меньше ... гольф.
Вы можете увидеть это здесь на ideone .
источник
(x='aba')~=x'
вместо[0 1 0;1 0 1;0 1 0]
.*
- это поэлементное умножение матриц. Булева матрица, MATLAB в значительной степени не типизированная, рассматривается как числовая. ТакM>0
просто действует как маска.(x='aba')~=x'
, Это просто потрясающе @Luis!JavaScript (ES6),
9994 байтаПринимает и возвращает двумерный массив.
Редактировать: полностью переписан, когда я обнаружил, что аргументы по умолчанию работают, когда вы передаете явно неопределенное значение, например, когда вы индексируете конец массива.
источник
JavaScript (ES6),
9593 байтаисточник
Python с SciPy, 127 байт
Это вычисляет результат, используя метод Луиса Мендо .
Попробуйте онлайн
источник
Mathcad, байты
Использует стандартную двумерную свертку отфильтрованного массива с ядром 3х3. Варианты с отрицательными суммами элементов и диагональным ядром также добавляются как компенсация части для программы, которая не работает в течение наименьшего количества байтов.
Число байтов не введено, поскольку оценка Mathcad еще не определена. Однако, используя эквивалентность клавиатуры, это область из 28 байтов, при условии, что матричный ввод не учитывается в общем объеме.
Обратите внимание, что то, что вы видите на изображении выше, это то, как решение вводится и отображается в Mathcad.
источник
Желе,
232018 байтПопробуйте онлайн!
Алгоритм
Допустим, есть только одна строка: [1,2,3,4].
Допустим, A является результатом добавления нуля, т. Е. [0,1,2,3,4].
B является результатом удаления первого элемента, то есть [2,3,4].
Тогда конечный результат просто A + B векторизован, затем удаляется последний элемент.
Теперь алгоритм должен применить это к каждой строке, а также к каждому столбцу, а затем найти их векторизованную сумму.
Для каждого столбца ?! Я думал, что желе не поддерживает это ...
Ты прав. Поэтому я перенес его, применил к каждому ряду, а затем снова перенес.
Алгоритм удаления отрицательных чисел
Здесь вы просто добавляете к каждому числу их абсолют. Это эффективно устраняет отрицательные числа, удваивая каждое положительное число. Затем просто наполовину разделить всю матрицу.
источник
Pyth, 36 байт
Попробуйте онлайн!
Прямой перевод моего ответа в желе .
источник