Разве это не раздражает, когда вы делаете снимок, но фон отвлекает от фактического содержания изображения? Я бы сказал, что это так. Мне нужно знать, сколько я должен обрезать, чтобы избавиться от этой проблемы! Но - как обычно - я довольно ленив, поэтому мне нужен кто-то, чтобы сделать это для меня ...
Задача и правила
Учитывая двоичную матрицу, представляющую изображение, выведите размеры (ширину и высоту) наименьшей подматрицы, которая содержит все с в исходной матрице. Суб-матрица представляет собой блок смежных записей из исходной матрицы. Эквивалентно, это новая матрица, сформированная путем перекрытия поднабора смежных строк и поднабора смежных столбцов оригинала.
- Допускается также принимать ширину и высоту матрицы в качестве входных данных.
- На входе гарантированно содержится хотя бы один .
- Вы можете получить ввод и предоставить вывод любым стандартным методом , при этом отметив, что эти лазейки по умолчанию запрещены. Это код-гольф , поэтому постарайтесь выполнить задачу за наименьшее количество байтов, которыми вы можете управлять на выбранном вами языке .
пример
Контрольные примеры
Вход | Выход [[0,1,0,0,0,1,0]] -> (5,1) или (1,5) [[0,0,0,0,0], [0,1,0,1,0], [0,0,1,0,0]] -> (3,2) или (2,3) [[1,1,1,1], [0,0,0,0], [0,0,0,0], [1,0,0,0]] -> (4,4) [[0,0,0,0,0,0], [0,1,0,1,0,1], [0,0,0,0,0,0]] -> (5,1) или (1,5) [[0,0,0,0,0], [0,1,0,1,0], [0,0,1,0,0], [0,1,0,1,0], [ 0,0,0,0,0]] -> (3,3) [[0,0,0,0,0,0], [0,1,0,1,0,0], [0,1,1,0,1,1], [0,0,1, 0,1,0], [0,0,0,0,0,0]] -> (5,3) или (3,5)
code-golf
array-manipulation
matrix
binary-matrix
Мистер Xcoder
источник
источник
Ответы:
MATL , 5 байтов
Попробуйте онлайн! Или проверьте все тестовые случаи .
объяснение
источник
APL (Dyalog Unicode) , 10 байтов SBCS
Функция анонимного молчаливого префикса.
Попробуйте онлайн!
⍸
показатели 1с.(
…)
Примените к этому следующую молчаливую функцию:⌊/
минимальный (самые низкие у координаты и низкие х координаты)⌈/-
максимальный минус, который (это дает нам диапазон)1+
один плюс это (быть включительно)источник
Октава ,
57 5645 байтЗдесь
find
делается тяжелая работа: этоfinds
индексы строк и столбцов ненулевых записей. Тогда нам просто нужно найти разницу между максимумом и минимумом (плюс один) для каждого из них отдельно.Спасибо @beaker и @AndrasDeak за -1 байт, а @LuisMendo за -11 байт!
Попробуйте онлайн!
источник
Python 2 ,
9286 байтПопробуйте онлайн!
источник
Желе , 7 байт
Попробуйте онлайн!
Как это устроено
источник
Python 2 ,
6355 байт-8 с помощью Винсента (взять матрицу ввода как массив Numpy)
Безымянная функция , принимающая 2-d Numpy массив целых чисел (в
{0,1}
) , который возвращает список целых чисел,[width,height]
.Попробуйте онлайн!
Не-Numpy версия в 63 байта (принимает список списков целых чисел в
{0,1}
):Попробуйте онлайн!
Как?
Для матрицы,
a
,for
каждая (v
) из транспонированной,zip(*a)
иa
сам находят высоту , необходимую ( с учетом транспонирования Это шириной).Отображение
max
черезv
дает список нулей и единиц, представляющих, если каждая строкаv
содержит какие-либо из них. Строковое представление этого списка найдено с помощью backticks (`...`
), это дает строку с начальным[
, затем нулями и единицами, разделенными,
(запятая + пробел). Мы нарезаем эту строку, начиная с индекса один, с шагом в три,[1::3]
получая нам строку только из нулей и единиц, что позволяет нам использовать строковую функциюstrip
для удаления внешних нулей (strip('0')
).Например:
источник
Сетчатка 0.8.2 , 83 байта
Попробуйте онлайн! Объяснение:
Удалить начальные и конечные нулевые строки.
Удалите все
0
буквы в строках над последним. Удалите все1
s два, но измените цифру внизу на следующей строке на a1
в этом случае. Это поразрядно или по строкам.Подсчитайте количество строк как количество новых строк плюс 1 и количество столбцов как количество цифр между первым и последним 1.
источник
J , 31 байт
Попробуйте онлайн!
Объяснение:
источник
q / kdb +, 16 байт
источник
Mathematica, 34 байта
Чистая функция. Принимает вложенный список целых чисел в качестве входных данных и возвращает список из двух целых чисел (высота, сопровождаемая шириной) в качестве выходных данных. Символ Unicode - это U + F3C7 для
\[Transpose]
.источник
R ,
4846 байтПопробуйте онлайн!
-2 байта сохранены Джузеппе.
источник
05AB1E ,
119 байтов-2 байта благодаря @ Mr.Xcoder .
Попробуйте онлайн или проверьте все тесты .
Объяснение:
источник
ζ‚Oε0Û0Üg
экономит 2 байта.Желе , 9 байт
Попробуйте онлайн!
источник
Haskell , 76 байт
Попробуйте онлайн!
источник
Japt
1615 байтПопробуйте или запустите все тесты
объяснение
источник
Рубин , 60 байт
Попробуйте онлайн!
источник