Это 2-мерная версия этого вопроса .
Дан непустой 2-мерный массив / матрица, содержащий только неотрицательные целые числа:
Выведите массив с удаленными окружающими нулями, то есть наибольшим непрерывным подмассивом без окружающих нулей:
Примеры:
Input:
[[0, 0, 0, 0, 0], [0, 0, 0, 1, 0], [0, 0, 0, 0, 1], [0, 0, 1, 1, 1], [0, 0, 0, 0, 0]]
Output:
[[0, 1, 0], [0, 0, 1], [1, 1, 1]]
Input:
[[0, 0, 0, 0], [0, 0, 0, 3], [0, 0, 0, 0], [0, 5, 0, 0], [0, 0, 0, 0]]
Output:
[[0, 0, 3], [0, 0, 0], [5, 0, 0]]
Input:
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
Output:
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
Input:
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
Output:
[]
Input:
[[0, 0, 0, 0], [1, 1, 1, 1], [0, 0, 0, 0]]
Output:
[[1, 1, 1, 1]]
Input:
[[0, 1, 0, 0], [0, 1, 0, 0], [0, 1, 0, 0]]
Output:
[[1], [1], [1]]
Input:
[[1, 1, 1, 1], [1, 2, 3, 1], [1, 1, 1, 1]]
Output:
[[1, 1, 1, 1], [1, 2, 3, 1], [1, 1, 1, 1]]
code-golf
array-manipulation
alephalpha
источник
источник
:)
Просто сложно сделать это коротким.[[0, 0, 0, 0], [0, 0, 0, 0], [1, 1, 1, 1], [0, 0, 0, 0]]
(результат, имеющий ширину / высоту1
)Ответы:
MATL , 3 байта
Попробуйте онлайн! Или проверьте все тестовые случаи .
объяснение
источник
(implicit)
.Wolfram Language (Mathematica) , 42 байта
Попробуйте онлайн!
Клеточные автоматы действительно являются ответом на жизнь , вселенную и все . 1
Как?
CellularAutomaton
принимает входной массив и необязательное значение фона. Таким образом,{#,0}
указывает, что правило клеточного автомата должно применяться к входу, предполагая фон0
s.Здесь важно урезать
CellularAutomaton
вывод, чтобы не было границы фоновых ячеек (потому что в противном случае вывод лежит на бесконечной плоскости).Код применяет правило
{Null, {}, {0, 0}}
- применяя головуNull
к соседу 0-го радиуса каждой ячейки (то есть только к центру: самой ячейке) - точно0
раз. Результатом этого является исходный ввод, но с удаленным фоном (т.е. обрезка окружающих0
s).1. Посмотрите на счет моего ответа? ;)
источник
JavaScript (ES6), 98 байт
Попробуйте онлайн!
Как?
Чтобы преодолеть отсутствие встроенного zip - файла , мы определяем функцию g (), которая может работать со строками или столбцами входной матрицы a [] в зависимости от значения глобального флага z .
g () ищет минимальный индекс m и максимальный индекс M либо непустых строк (если z не определено), либо непустых столбцов (если z определен) и возвращает соответствующий фрагмент либо самой матрицы, либо данной строки матрицы.
Обобщить:
.map(z=g)
комментарии
источник
Haskell ,
6261 байтПопробуйте онлайн!
foldr(zipWith(:))e
сe=[]:e
это немного корочеtranspose
, иsnd.span(all(<1))
капли , ведущие списки нулей из списка списка. Какtranspose
следуетreverse
из 2D-списка, равного повороту на 90 °, кодf.f.f.f
всего лишь в четыре раза сбрасывает ведущие списки нулей и вращается .источник
Pyth , 13 байт
Попробуйте онлайн!
источник
=_CQ
будет работать на месте=Q_CQ
.Желе , 10 байт
Попробуйте онлайн!
источник
Брахилог ,
24222019 байтПопробуйте онлайн!
Выводит матрицу результатов в виде массива массивов или false для пустого вывода.
(Спасибо @Fatalize за предложение встроенного предиката и сохранение 1 байта.)
объяснение
Предикат 0 (основной):
Предикат 1:
источник
{s.h+>0∧.t+>0∧}\↰₁\
. (это верно практически для любого ответа на брахилоге, предикаты на новых строках действительно реализуются только в том случае, если вы хотите написать более читаемые вещи).R ,
96 10097 байтПопробуйте онлайн!
~
Помощник принимает неотрицательный вектор и возвращает вектор сFALSE
для «внешнего вида»0
S вектора иTRUE
для позитивов и любого «интерьера»0
с. Эта функция применяется к суммам строк и столбцов входной матрицы.~
и!
использовать синтаксический анализ операторов R.Исправлено в соответствии с комментарием @ DigEmAll, но с некоторыми байтами, возвращенными из @ J.Doe
источник
drop=F
как я сделал, иначе эти 2 теста вернут вектор вместо строки и столбца: попробуйте онлайн!drop=F
. Все еще под тонной!R ,
8979 байтПопробуйте онлайн!
Спасибо @ngm за код тестовых случаев и @ J.Doe за сохранение 10 байтов!
drop=F
параметр из-за поведения R по умолчанию, превращающего одну строку / матрицу col в векторы ...источник
range
и настраивая индексациюAPL (Dyalog Classic) ,
1715 байтПопробуйте онлайн!
источник
Python 2 , 71 байт
Возвращает путем изменения ввода. Список должен быть передан в качестве ввода.
Попробуйте онлайн!
Python 2 , 77 байт
Это также изменяет ввод, но это работает ....
Попробуйте онлайн!
источник
Wolfram Language (Mathematica) , 66 байт
Попробуйте онлайн!
Теперь работает, заполняя массив нулями (спасибо @JungHwanMin)!
Второе спасибо @JungHwanMin за сохранение 4 байта
источник
Желе , 12 байт
Попробуйте онлайн!
Как функция.
источник
Wolfram Language (Mathematica) , 48 байтов
Попробуйте онлайн!
Делать это нормальным способом.
источник
\[Transpose]
не могу здесь работать.Шелуха , 11 байт
Попробуйте онлайн!
Я чувствую, что некоторые байты можно сбрить, укоротив
!5¡
часть.Как это работает
Повторно применяйте функцию, описанную ниже, собирая результаты в бесконечном списке. Затем получите5го элемент. Другими словами, примените функцию к входу 4 раза.
Отобразите текущую версию входных данных и: переверните каждый из них после удаления самого длинного префикса, содержащего только нули (удаление этого префикса выполняется с помощью функции Husk's
↓
, которая обрезает самый длинный цикл последовательных элементов с начала список, который дает правдивые результаты при запуске через функцию, а именно¬
, логическое нет).Транспонировать, заменяя отсутствующие записи на 0 .
источник
Сетчатка , 87 байт
Попробуйте онлайн! Объяснение:
Пока хотя бы один ряд не начинается с нуля ...
... удалить ведущий ноль из каждого ряда.
Пока хотя бы один ряд не заканчивается нулем ...
... удалить конечный ноль из каждой строки.
Удалить ведущие ряды нулей.
Удалите конечные ряды нулей или последний оставшийся ноль.
источник
Древесный уголь , 48 байтов
Попробуйте онлайн! Ссылка на подробную версию кода. Включает 15 байтов для форматирования. Объяснение:
Повторите 4 раза.
Повторите, пока массив не пуст, но его последняя строка суммируется с нулем ...
Удалите последнюю строку из массива и выведите строку длины его суммы, то есть ничего.
Если массив не пустой, транспонируйте его.
Отформатируйте массив для отображения. (Стандартный вывод будет
Iθ
вместо этого.)источник
JavaScript,
144140129127 байт140 -> 129 байт, спасибо @Arnauld
Алгоритм
источник
some/some
вместоfindIndex/find
и переупорядочивая объявления вспомогательных функций, чтобы избавиться от круглых скобок вокруг (теперь единственного) аргумента основной функции.[[]]
так что t гарантированно сможет работатьw[0]
.Python 2 ,
118116 байтПопробуйте онлайн!
Добавлено:
источник
s=sum
в лямбда-определенииPHP (> = 5,4),
200194186184 байта(-6 байт, возвращая
null
вместо пустого массива)(-8 байт благодаря Титу )
(-2 байта с вызовом по ссылке благодаря Титу )
Попробуйте онлайн!
Как?
Находит минимальный и максимальный индекс для строк (
$m
&$M
) и столбцов ($n
&$N
) и заменяет входные данные вложенным массивом из$m,$n
to$M,$N
(это вызов по ссылке).источник
if($C){$m>$r&&$m=$r;$M>$r||$M=$r;$n>$c&&$n=$c;$N>$c||$N=$c;}
while($m<=$M)$o[]=array_slice($a[$m++],$n,$N-$n+1);
&&
и||
я уверен, что смогу использовать этот трюк и в других местах.$a=
вместоreturn
.Октава,
4849 байтПопробуйте онлайн!
Найдите ненулевые точки и переставьте их в новую разреженную матрицу.
источник
К (нгн / к) , 22 байта
Попробуйте онлайн!
источник
J , 24 байта
Попробуйте онлайн!
объяснение
источник
Рубин ,
7363 байтаПопробуйте онлайн!
Редактировать: упрощено, также предыдущая версия рухнула для всех
0
хКак это работает:
0
sисточник
&.sum<0
вместо&.sum<1
.Октава ,
7874 байтаПопробуйте онлайн!
объяснение
Это поворачивает матрицу на
90
градусы (x=rot90(x)
) достаточное количество раз (for k=1:... end
). Число поворотов кратно4
, поэтому конечная матрица имеет исходную ориентацию. В частности, число вращений4
умножается на количество нулей в матрице (nnz(~x)*4
).Для каждого поворота, если есть один или несколько столбцов слева, состоящих только из нулей, они удаляются (
x=x(:,~~cumsum(any(x,1)))
).То, что осталось от матрицы после этого процесса, выводится функцией (
function x=f(x)
).источник
Stax , 14 байт
Запустите и отладьте его
Альтернатива, также 14 байтов
Запустите и отладьте его
источник
PHP, 188 байт
звоните по ссылке.
сломать
источник
Чисто , 73 байта
Попробуйте онлайн!
Очень похоже на ответ Хаскелла Лайкони .
источник
Python 2 , 86 байт
Попробуйте онлайн!
Принимает список списков, возвращает список кортежей.
объяснение
Злоупотребляет чертовски из списка понимания. Это эквивалентный расширенный код:
источник
Japt
-h
,2311 байтПопытайся
объяснение
источник