Вызов:
Дана матрица NxN, где и одну из восьми различных «опций складывания», выведите двумерный массив / список с вычтенными значениями.
Восемь вариантов складывания: слева направо; справа налево; сверху донизу; снизу-вверх; к верхнее-левое-bottomright; topright к bottomleft; bottomleft к topright; bottomright к нижнему правому углу.
Пошаговые примеры:
Матрица ввода:
[[ 1, 3, 5, 7],
[ 0, 8, 6, 4],
[ 1, 1, 1, 1], (a'th row in the explanation below)
[ 1,25, 0,75]]
С опцией сворачивания сверху вниз мы выводим следующее как результат:
[[ 1,-7,-5,-3],
[ 0,22,-5,68]]
Зачем? Сгибаем сверху вниз. Поскольку размеры матрицы равны, у нас нет среднего слоя для сохранения как есть. 'Й строка будет вычтена по ( с - 1 ) -й строкой (были бы ( - 2 ) -й строкой для нечетных матриц размерности); так становится . Затем ( a + 1 ) -я строка будет вычтена ( a - 2 ) -й строкой (была бы ( a - 3 ) -й строкой для матриц нечетного измерения); так[1, 1, 1, 1]
[1-0, 1-8, 1-6, 1-4]
[1, -7, -5, -3]
[1, 25, 0, 75]
[1-1, 25-3, 0-5, 75-7]
становится [0, 22, -5, 68]
.
Вместо этого, используя опцию сворачивания снизу-вверх-на-вершину (с той же матрицей ввода выше), мы выводим следующее как результат:
[[-74, 2, 1, 7],
[ 0, 7, 6],
[-24, 1],
[ 1]]
Со следующими складными вычитаниями:
[[1-75, 3-1, 5-4, 7],
[ 0-0, 8-1, 6],
[1-25, 1],
[ 1]]
Правила соревнований:
- Вы можете использовать любые восемь разных букв
[A-Za-z]
или разных чисел в диапазоне для вариантов свертывания. Числа или , вероятно, являются наиболее распространенными вариантами, но если вы хотите использовать разные числа в пределах диапазона для некоторых интеллектуальных вычислений, не стесняйтесь делать это. Пожалуйста, укажите, какие варианты фальцовки вы использовали в своем ответе. - Матрица ввода всегда будет квадратной матрицей NxN, поэтому вам не нужно обрабатывать прямоугольные матрицы NxM. также всегда будет не менее 2, поскольку пустая матрица или матрица 1x1 не могут быть сложены.
- Вход матрицы всегда будет содержать неотрицательные числа в диапазоне (поэтому числа на выходе будут в диапазоне ).
- При (анти-) диагональном сгибе или нечетном вертикальном / горизонтальном сгибании средний «слой» останется неизменным.
- Ввод / вывод является гибким. Может быть 2D массивом / списком целых чисел; может быть возвращено или напечатано в виде строки с разделителями-пробелами; Вы можете изменить матрицу ввода и заменить числа, которые должны быть пропущены,
null
или число вне[-999, 999]
диапазона, чтобы указать, что они пропали; и т. д.
Основные правила:
- Это код-гольф , поэтому выигрывает самый короткий ответ в байтах.
Не позволяйте языкам кода-гольфа отговаривать вас от публикации ответов на языках, не относящихся к кодексу. Попробуйте придумать как можно более короткий ответ для «любого» языка программирования. - Стандартные правила применяются к вашему ответу с правилами ввода / вывода по умолчанию , поэтому вам разрешено использовать STDIN / STDOUT, функции / метод с правильными параметрами и типом возврата, полные программы. Ваш звонок.
- По умолчанию лазейки запрещены.
- Если возможно, добавьте ссылку с тестом для вашего кода (например, TIO ).
- Кроме того, добавление объяснения для вашего ответа настоятельно рекомендуется.
Тестовые случаи:
Входная матрица 1:
Input-matrix (for the following eight test cases):
[[ 1, 3, 5, 7],
[ 0, 8, 6, 4],
[ 1, 1, 1, 1],
[ 1,25, 0,75]]
Input-folding option: left-to-right
Output: [[2,6],[-2,4],[0,0],[-25,74]]
Input-folding option: right-to-left
Output: [[-6,-2],[-4,2],[0,0],[-74,25]]
Input-folding option: top-to-bottom
Output: [[1,-7,-5,-3],[0,22,-5,68]]
Input-folding option: bottom-to-top
Output: [[0,-22,5,-68],[-1,7,5,3]]
Input-folding option: topleft-to-bottomright
Output: [[7],[6,-1],[1,-7,-2],[1,24,0,74]]
Input-folding option: topright-to-bottomleft
Output: [[1],[-3,8],[-4,-5,1],[-6,21,-1,75]]
Input-folding option: bottomleft-to-topright
Output: [[1,3,4,6],[8,5,-21],[1,1],[75]]
Input-folding option: bottomright-to-topleft
Output: [[-74,2,1,7],[0,7,6],[-24,1],[1]]
Входная матрица 2:
Input-matrix (for the following eight test cases):
[[17, 4, 3],
[ 8, 1,11],
[11, 9, 7]]
Input-folding option: left-to-right
Output: [[4,-14],[1,3],[9,-4]]
Input-folding option: right-to-left
Output: [[14,4],[-3,1],[4,9]]
Input-folding option: top-to-bottom
Output: [[8,1,11],[-6,5,4]]
Input-folding option: bottom-to-top
Output: [[6,-5,-4],[8,1,11]]
Input-folding option: topleft-to-bottomright
Output: [[3],[1,7],[11,1,-10]]
Input-folding option: topright-to-bottomleft
Output: [[17],[4,1],[8,-2,7]]
Input-folding option: bottomleft-to-topright
Output: [[17,-4,-8],[1,2],[7]]
Input-folding option: bottomright-to-topleft
Output: [[10,-7,3],[-1,1],[11]]
A-Za-z
или любое целое число в диапазоне[-999,999]
, поэтому порядок не имеет значения. И извините, но вы должны вывести правильный сгиб на основе ввода, поэтому вывод всех восьми не разрешен.Ответы:
Октава ,
256248244248 байтПопробуйте онлайн!
-2 байта (и немного прибавки) благодаря Луису Мендо
+2 байта за счет коррекции на туберкулез
1-индексированные операции для значений b от 1 до 8:
Это вызвало у меня головную боль, позже я сделаю это правильно
источник
rows(a)
вместоsize(a,2)
Желе ,
3934 байтаВозможно, возможно дальнейшее игра в гольф, комбинируя некоторые из двух «функций».
... да: -5 спасибо Ник Кеннеди!
Попробуйте онлайн!
Двоичная ссылка, принимающая целое число (инструкция) и список списков чисел (матрица).
Как?
Ссылка создает код Jelly, который затем оценивается с использованием M в качестве входных данных ...
Каждый из восьми вариантов тогда:
Каждый из них (кроме
0
и4
) применяет преобразование кM
использованию некоторых изZ
(транспонировать),Ṛ
(обратный) иU
(обратный каждый); затем одна из двух функций (см. ниже), затем обратное преобразование настройки (если оно было) реализовано с помощью обратного кода.Две внутренние функции:
источник
JavaScript (ES6),
149 ... 133128 байт(matrix)(d)
NaN
Попробуйте онлайн!
комментарии
источник
Желе ,
7134 байтаПопробуйте онлайн!
Тестирование
Полная программа. Правильный аргумент - это матрица. Левый аргумент - это тип сгиба:
Переписан для использования 5-битного биективного двоичного кода в качестве входных данных. Обратите внимание, что приведенная выше программа не будет работать несколько раз.
источник
Октава ,
482 байта, 459 байтовВходные данные для определения направления складывания:
1) слева направо
2) снизу вверх
3) справа налево
4) сверху вниз
5) от tr до bl
6) от br до tl
7) от bl до tr
8) от tl до br
Каждый вызов генерирует только указанный сгиб, а не все (что, вероятно, заняло бы меньше байтов). Самая большая проблема заключается в том, что в этом случае я не могу понять, как складывать сгибы 1-4 и 5-8 в одну и ту же петлю. Но, по крайней мере, октава имеет красивые матрицы.
Попробуйте онлайн!
Подавление вывода стоит байтов, поэтому игнорируйте все, что не является оператором return (ans =).
источник
Древесный уголь ,
7877 байтПопробуйте онлайн! Ссылка на подробную версию кода. Используются следующие варианты складывания:
Сложенные значения заменяются пустыми строками. Объяснение:
Поверните массив четыре раза.
Сложите массив горизонтально, когда это необходимо.
Сложите массив по диагонали, когда это необходимо.
Выведите массив, как только он вернется в исходное положение.
источник