Входные данные:
- Целое число
n
- Две квадратные матрицы одинакового размера (их ширина / высота кратна
n
)
Выход:
Одно из двух различных значений по вашему выбору, одно для истинных результатов и одно для ложных результатов (так что да, 1/0
вместо того , чтобы true/false
быть действительными выходными данными для языков, таких как Java, даже если они не считаются официальными значениями правдивых / ложных ).
Выходные данные truey / falsey указывают, можем ли мы переставить блоки размера n by n
в одной матрице, чтобы сделать ее равной другой матрице.
Пример:
Входные данные:
Matrix 1:
1 2 3 4 5 6
7 8 9 0 1 2
3 4 5 6 7 8
9 8 7 6 5 4
3 2 1 0 9 8
1 1 1 1 1 1
Matrix 2:
3 2 9 8 7 8
1 1 1 1 5 4
3 4 5 6 1 0
9 0 7 6 1 1
5 6 1 2 3 4
1 2 7 8 9 8
Integer n:
2
Выход: truthy
Зачем?
Если мы разделим матрицы на блоки 2 by 2
, мы увидим, что все блоки на одной матрице также могут быть найдены в другой матрице:
Matrix 1:
1 2 | 3 4 | 5 6
7 8 | 9 0 | 1 2
---------------
3 4 | 5 6 | 7 8
9 8 | 7 6 | 5 4
---------------
3 2 | 1 0 | 9 8
1 1 | 1 1 | 1 1
Matrix 2:
3 2 | 9 8 | 7 8
1 1 | 1 1 | 5 4
---------------
3 4 | 5 6 | 1 0
9 0 | 7 6 | 1 1
---------------
5 6 | 1 2 | 3 4
1 2 | 7 8 | 9 8
Правила соревнований:
- Можно предположить, что матрицы будут содержать только неотрицательные цифры (диапазон
[0,9]
) - Можно предположить, что ширина / высота матриц равны, и кратное
n
- Можно предположить,
n
что будет в диапазоне[1, 50]
, а ширина / высота матрицы находятся в диапазоне[1,100]
. - Отдельные блоки
n by n
можно использовать только один раз, чтобы определить, являются ли матрицы перестановками друг друга при разбиении на блокиn by n
. - Может быть несколько
n by n
одинаковых блоков. - Эти
n by n
блоки будут оставаться в той же ориентации , при проверке , если две матрицы перестановок друг от друга , когда разделение на блокиn by n
.
Основные правила:
- Это код-гольф , поэтому выигрывает самый короткий ответ в байтах.
Не позволяйте языкам кода-гольфа отговаривать вас от публикации ответов на языках, не относящихся к кодексу. Попробуйте придумать как можно более короткий ответ для «любого» языка программирования. - Стандартные правила применяются к вашему ответу с правилами ввода / вывода по умолчанию , поэтому вам разрешено использовать STDIN / STDOUT, функции / метод с правильными параметрами и типом возврата, полные программы. Ваш звонок.
- По умолчанию лазейки запрещены.
- Если возможно, добавьте ссылку с тестом для вашего кода (например, TIO ).
- Кроме того, добавление объяснения для вашего ответа настоятельно рекомендуется.
Тестовые случаи:
Input:
Matrix 1: Matrix 2: Integer:
1 2 3 4 5 6 3 2 9 8 7 8 2
7 8 9 0 1 2 1 1 1 1 5 4
3 4 5 6 7 8 3 4 5 6 1 0
9 8 7 6 5 4 9 0 7 6 1 1
3 2 1 0 9 8 5 6 1 2 3 4
1 1 1 1 1 1 1 2 7 8 9 8
Output:
truthy
Input:
Matrix 1: Matrix 2: Integer:
1 2 3 4 5 6 3 2 9 8 7 8 1
7 8 9 0 1 2 1 1 1 1 5 4
3 4 5 6 7 8 3 4 5 6 1 0
9 8 7 6 5 4 9 0 7 6 1 1
3 2 1 0 9 8 5 6 1 2 3 4
1 1 1 1 1 1 1 2 7 8 9 8
Output:
truthy
Input:
Matrix 1: Matrix 2: Integer:
1 2 3 4 5 6 3 2 9 8 7 8 3
7 8 9 0 1 2 1 1 1 1 5 4
3 4 5 6 7 8 3 4 5 6 1 0
9 8 7 6 5 4 9 0 7 6 1 1
3 2 1 0 9 8 5 6 1 2 3 4
1 1 1 1 1 1 1 2 7 8 9 8
Output:
falsey
Input:
Matrix 1: Matrix 2: Integer:
1 2 3 4 1 2 3 4 4
2 3 4 5 2 3 4 5
3 4 5 6 3 4 5 6
4 5 6 7 4 5 6 7
Output:
truthy
Input:
Matrix 1: Matrix 2: Integer:
1 2 3 4 3 4 3 4 2
2 3 4 5 4 5 4 5
3 4 5 6 1 2 5 6
4 5 6 7 2 3 6 6
Output:
falsey
Input:
Matrix 1: Matrix 2: Integer:
1 2 2 3 1
3 4 1 1
Output:
falsey
Input:
Matrix 1: Matrix 2: Integer:
0 8 1
Output:
falsey
Input:
Matrix 1: Matrix 2: Integer:
1 2 3 4 1 2 1 2 2
5 6 7 8 5 6 5 6
9 0 0 9 0 9 9 0
4 3 2 1 2 1 4 3
Output:
falsey
Input:
Matrix 1: Matrix 2: Integer:
1 2 1 2 9 5 1 2 2
3 4 3 4 7 7 3 4
8 3 9 5 1 2 8 3
6 1 7 7 3 4 6 1
Output:
truthy
Input:
Matrix 1: Matrix 2: Integer:
1 0 2 0 0 3 1 1 1 0 0 3 2
1 1 1 1 1 1 2 0 1 1 1 1
2 2 2 2 2 2 2 2 2 2 2 2
3 3 3 3 3 3 3 3 3 3 3 3
4 4 4 4 4 4 4 4 4 4 4 4
5 5 5 5 5 5 5 5 5 5 5 5
Output:
falsey
[ [ 0 ] ], [ [ 25 ] ], 1
присутствует? Я так понял,You can assume the matrices will only contain non-negative digits (range [0,9])
что значения матрицы только между 0 и 9?[0,9]
позже добавили это правило о диапазоне в Песочнице. Я изменил контрольный пример на[[0]],[[8]]
.Ответы:
Желе ,
109 байтПопробуйте онлайн! (или с предварительной обработкой для упрощения копирования и вставки из тестовых случаев)
Диадическая ссылка, принимающая список из двух матриц (в виде списков списков) слева и целое число справа, которое дает
1
или0
для истинности или ложности соответственно.Как?
источник
APL (Dyalog Extended) ,
191817 байт-2 благодаря нгн.
Анонимная молчаливая инфиксная функция. Принимает в
n
качестве левого аргумента и список двух матриц в качестве правого аргумента. Требуется нулевое индексирование (⎕IO←0
). Кстати, эта функция работает с массивами любого количества измерений.Попробуйте онлайн!
≡.{
…}
Идентичные результаты следующей функции, примененной к каждой матрице⍵
сn
as⍺
?≢⍵
размер матрицы⍳
индексы 0… размер – 1⍺|
остаток деления при делении наn
⊂
приложить для использования во всех измерениях⍵⊂⍨
используйте это для разбиения * матрицы на матрицу подматриц* начинается новое разбиение, когда соответствующий элемент меньше предыдущего; удаляет элементы, отмеченные нулем
,
разложить матрицу в список подматриц∧
Сортировать по возрастаниюисточник
(≢⍵)⍴⍺↑1
->0=⍺|⍳≢⍵
(с⎕io←0
)≡/{}¨
->≡.{}
Python 2 ,
108103 байтаПопробуйте онлайн!
источник
Perl 6 ,
94 6863 байтаПопробуйте онлайн!
Блок анонимного кода, который принимает входные данные
size, [matrix1, matrix2]
и возвращает логическое значениеTrue/False
. Там может быть более эффективный способ разбить матрицу на куски, чемrotor
.Объяснение:
источник
05AB1E , 14 байтов
Попробуйте онлайн!
источник
Java (JDK) , 221 байт
Попробуйте онлайн!
объяснение
Идея состоит в том, чтобы выбрать каждую маленькую ячейку как строку, которая сопоставима, а затем отсортировать эти строки и сравнить их по порядку.
кредиты
источник
for(j=0;j<l;){c[z=i/n+j/n*x]+=a[i][j];d[z]+=b[i][j++];}
? .. Вы можете снять скобки, поместив все в петлю. Кроме того,i=0
цикл in можно удалить, потому чтоi
при объявлении у вас уже 0.var d=new String[x*x];
может бытьvar d=c.clone();
вместо этого. 234 байта[
и]
на{
и}
и добавить ведущийnew int[][]
, и этого было бы достаточно. ;)i=0
был остаток, когда я сам заполнял массивы, а не использовал ихArrays.fill
. Спасибо :-) И за то, чтоclone
я думал об использовании этого, но я все еще думал, что это вернуло бы,Object
а не фактический тип. Я должен быть несколько версий поздно в этом вопросе;)Japt , 18 байт
Попробуйте онлайн!
Объяснение:
Шаг «Преврати его в строку» необходим, потому что Japt не сравнивает массивы по значению, а встроенная функция обхода не работает для многомерных массивов .
источник
A.e()
поработать с многомерными массивами; всегда хотел вернуться к нему. А покаÕmòV
->yòV
сэкономит вам байт.TSQL, 164 байта
Заполняя переменную таблицы, чтобы иметь ввод, это создание ввода и вставка данных не были включены в число байтов. Только фактический запрос для извлечения данных.
Гольф (не включая тестовый стол - его можно найти в версии без гольфа):
Ungolfed:
Попробуйте это
источник
JavaScript (ES6), 88 байт
Попробуйте онлайн!
Как?
Этот код:
Он использует ограничения, описанные в задаче:
Матрица состоит из отдельных цифр, поэтому мы можем просто объединить все ячейки подматрицы без какого-либо разделителя и все равно получить ее уникальное представление (например,
[[1,2],[3,4]]
можно сохранить как"1234"
).или как код JS:
y / n << 7 | x << n
комментарии
источник
Древесный уголь ,
5449 байтПопробуйте онлайн! Ссылка на подробную версию кода. Принимает ввод как массив двумерных массивов одинакового размера. Вывод 1 при успехе, ничего при сбое. Объяснение:
Предположим, успех.
Цикл над массивами.
Разделите массив на
n
фрагменты размера.Обведите каждый столбец.
Извлеките фрагмент столбца для каждой строки фрагмента строки и сохраните полученную подматрицу в списке.
Пока список не пуст, удалите последний кусок списка, который при нормальных обстоятельствах приходит из второго массива.
Подсчитайте количество вхождений этого фрагмента в первой половине списка, который в обычных условиях содержит оставшиеся фрагменты из первого массива.
Если ненулевое значение, удалите первое вхождение этого чанка из списка.
Если ноль, то очистите вывод, сделав его ложным.
источник
J , 55 байт
Попробуйте онлайн!
Ужасное решение, просто заставил его работать - у меня нет сил играть в гольф ...
источник
Haskell,
7473 байтаПримечание: TIO не установлен
Data.Lists
, поэтому я используюData.List
вместо этого добавленную отсутствующую функциюchunksOf
: попробуйте онлайн!источник
C # (интерактивный компилятор Visual C #) , 186 байт
Попробуйте онлайн!
-1 благодаря @KevinCruijssen!
Меньше гольф-кода:
источник
j++
может быть удалено и может быть помещено в,+=c[i][j++]+" ";
чтобы сохранить байт.PHP ,
186163162 байтаПопробуйте онлайн!
Как и все хорошие испытания, я начал думать, что это довольно легко, и это вызвало у меня некоторые изгибы. Прекрасно сделано @Kevin Cruijssen!
Разбивает матрицу на строки, содержащие значения для каждого блока. Массивы затем сортируются и сравниваются на равенство.
Ungolfed:
Выход
источник
Красный ,
148,147,142 байтаПопробуйте онлайн!
источник