Вам будет дана квадратная матрица целых чисел M и другого натурального п , строго меньшие , чем размер M . Ваша задача - сгенерировать все квадратные подматрицы M размера n .
Для целей этого вызова, квадратная подматрица представляет собой группа смежных строк и столбцов содержатся в М .
Форматы ввода / вывода
Вы можете выбрать любой другой разумный формат, это только некоторые примеры.
вход
- Матрица в нативном типе матрицы (если она есть у вашего языка)
- 2D-массив (массив 1D-массивов, каждый из которых соответствует одной строке / одному столбцу)
- 1D массив (так как матрица всегда квадратная)
- Строка (вы выбрали интервал, но не злоупотребляйте этим) и т. Д.
Выход
- Матрица матриц.
- 4D массив, где каждый элемент (3D список) представляет подматрицы в строке / столбце.
- 3D-массив, где каждый элемент (2D-список) представляет подматрицу.
- Строковое представление результирующих подматриц и т. Д.
Спекуляции
- Вы можете взять размер из M в качестве входных данных тоже. Гарантированно будет минимум 2 .
- Ориентация вывода произвольна: вы можете выбрать вывод подматриц в виде списков столбцов или списков строк, но ваш выбор должен быть согласованным.
- Вы можете соревноваться на любом языке программирования и можете принимать и выводить данные любым стандартным методом , при этом отмечая, что эти лазейки по умолчанию запрещены.
- Это код-гольф , поэтому выигрывает самое короткое представление (в байтах) для каждого языка .
пример
Учитывая n = 3 и М :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
Возможные подматрицы 3x3 :
+ ------- + + -------- + 1 2 3 4 1 2 3 4 | 1 2 3 | 4 1 | 2 3 4 | + -------- + + -------- + | 5 6 7 | 8 5 | 6 7 8 | | 5 6 7 | 8 5 | 6 7 8 | | 9 10 11 | 12 9 | 10 11 12 | | 9 10 11 | 12 9 | 10 11 12 | + ------- + + -------- + | 13 14 15 | 16 13 | 14 15 16 | 13 14 15 16 13 14 15 16 + -------- + + -------- +
Таким образом, результат будет:
[[[1, 2, 3], [5, 6, 7], [9, 10, 11]], [[2, 3, 4], [6, 7, 8], [10, 11, 12]], [[5, 6, 7], [9, 10, 11], [13, 14, 15]], [[6, 7, 8], [10, 11, 12], [14, 15, 16]]]
Как отмечено выше, вывод:
[[[1, 5, 9], [2, 6, 10], [3, 7, 11]], [[2, 6, 10], [3, 7, 11], [4, 8, 12]], [[5, 9, 13], [6, 10, 14], [7, 11, 15]], [[6, 10, 14], [7, 11, 15], [8, 12, 16]]]
также будет приемлемо, если вы решите возвращать субматрицы в виде списков строк.
Контрольные примеры
Входы M, n :
[[1,2,3],[5,6,7],[9,10,11]], 1
[[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]], 3
[[100,-3,4,6],[12,11,14,8],[0,0,9,3],[34,289,-18,3]], 2
[[100,-3,4,6],[12,11,14,8],[9,10,11,12],[13,14,15,16]], 3
И соответствующие выходные данные (подматрицы приведены в виде списков строк):
[[[1]],[[2]],[[3]],[[5]],[[6]],[[7]],[[9]],[[10]],[[11]]]
[[[1,2,3],[5,6,7],[9,10,11]],[[2,3,4],[6,7,8],[10,11,12]],[[5,6,7],[9,10,11],[13,14,15]],[[6,7,8],[10,11,12],[14,15,16]]]
[[[100,-3],[12,11]],[[-3,4],[11,14]],[[4,6],[14,8]],[[12,11],[0,0]],[[11,14],[0,9]],[[14,8],[9,3]],[[0,0],[34,289]],[[0,9],[289,-18]],[[9,3],[-18,3]]]
[[[100,-3,4],[12,11,14],[9,10,11]],[[-3,4,6],[11,14,8],[10,11,12]],[[12,11,14],[9,10,11],[13,14,15]],[[11,14,8],[10,11,12],[14,15,16]]]
Или, как списки столбцов:
[[[1]],[[2]],[[3]],[[5]],[[6]],[[7]],[[9]],[[10]],[[11]]]
[[[1,5,9],[2,6,10],[3,7,11]],[[2,6,10],[3,7,11],[4,8,12]],[[5,9,13],[6,10,14],[7,11,15]],[[6,10,14],[7,11,15],[8,12,16]]]
[[[100,12],[-3,11]],[[-3,11],[4,14]],[[4,14],[6,8]],[[12,0],[11,0]],[[11,0],[14,9]],[[14,9],[8,3]],[[0,34],[0,289]],[[0,289],[9,-18]],[[9,-18],[3,3]]]
[[[100,12,9],[-3,11,10],[4,14,11]],[[-3,11,10],[4,14,11],[6,8,12]],[[12,9,13],[11,10,14],[14,11,15]],[[11,10,14],[14,11,15],[8,12,16]]]]
code-golf
array-manipulation
matrix
Мистер Xcoder
источник
источник
Ответы:
05AB1E , 8 байтов
Попробуйте онлайн!
объяснение
источник
MATL , 4 байта
Входы
n
, тогдаM
.Выходными данными является матрица, где каждый столбец содержит все столбцы подматрицы.
Попробуйте онлайн!
объяснение
Более серьезно,
t
принимает ввод n неявно и дублирует его в стеке.h
объединяет обе копии n , создавая массив [n, n] . неявноYC
принимает входные данные M , извлекает все его блоки [n, n] размера и размещает их в виде столбцов в главном порядке столбцов. Это означает, что столбцы каждого блока располагаются вертикально, чтобы сформировать один столбец.источник
APL (Dyalog Unicode) , 26 байтов SBCS
Анонимный инфикс лямбда, принимающий n в качестве левого аргумента и M в качестве правого аргумента.
Попробуйте онлайн!
{
...}
анонимная лямбда, где⍺
левый аргумент и⍵
правый аргумент:⊢⍵
привести правильный аргумент (⊢
отделяется⍺ ⍺
от⍵
)⊢⌺⍺ ⍺
вся⍺
матрица с размерностью⍺
подматрица , включая те , перекрывая края (те дополняются нулями)(
...)↓
Поместите следующие числовые элементы вдоль первых двух измерений:⍺÷2
половина⍺
¯1+
отрицательный плюс, что⌈
округлять2⍴
циклически г eshape в список из двух элементовs←
хранить вs
(для с твердолобых)-
отрицать (т.е. падение сзади)s↓
сбрасыватьs
элементы по первому и второму измерениям (спереди)источник
APL (Dyalog Unicode) , 31 байт
Попробуйте онлайн!
Другой подход, чем у Адама.
источник
⍉
для нетривиальных случаев, то вы действительно освоили программирование массивов.R 75 байт
Попробуйте онлайн!
Берет
M
,N
иS
размер матрицы.Печатает полученные матрицы в stdout;
drop=F
необходимо, так что вN=1
случае, когда индексирование не удаляетdim
атрибут и выдаетmatrix
вместо avector
.источник
J ,
118 байт-3 байта благодаря милям
Попробуйте онлайн!
источник
<;._3~,~
и вместо этого используется хук, чтобы связать размер с самим собой, а затем обрезает и вставляет каждый из них, поскольку матрица матриц разрешена в качестве выходных данных.Haskell , 67 байт
Попробуйте онлайн!
источник
Желе , 5 байт
Использует формат вывода 4D. Для 3D, добавьте
Ẏ
по 6 байт .Попробуйте онлайн!
Как это устроено
источник
ṡ€Zṡ€
.Брахилог , 13 байт
Попробуйте онлайн!
Это возвращает списки столбцов.
Технически,
tN&s₎\;Ns₎
это генерирующий предикат, который объединяет свой вывод с любой из этих подматриц. Мы используем{…}ᶠ
только выставлять все возможности.объяснение
источник
Stax , 10 байт
Запустить его
Ascii представление той же программы
Это работает так.
источник
JavaScript (ES6), 91 байт
Принимает ввод в синтаксисе карри
(a)(n)
. Возвращает результаты в виде списков строк.Контрольные примеры
Показать фрагмент кода
источник
APL (Dyalog Classic) ,
2423 байтаПопробуйте онлайн!
результат - матрица матриц, хотя форматирование вывода Dyalog не делает это очень очевидным
введите matrix (
⎕
), превратите каждый элемент во собственную вложенную матрицу (⍪¨
), возьмите конкатенации префиксов по row (,\
) и column (⍪⍀
), введите n (⎕
), удалите первые n-1 строк и столбцов вложенных матриц ((¯1-t←-2⍴⎕)↓
), возьмите правый нижний угол n-n-n от каждой матрицы (t∘↑¨
)источник
Рубин , 63 байта
Попробуйте онлайн!
Это лямбда, принимающая 2D-массив и int, возвращающая 3D-массив.
Ungolfed:
источник
Python 2 , 91 байт
Попробуйте онлайн!
источник
def f(a,n):R=range(len(a)+1-n);print[[r[i:i+n]for r in a[j:j+n]]for i in R for j in R]
сохраняет пять.