(Случайно вдохновлено https://codegolf.meta.stackexchange.com/a/17272/42963 )
Учитывая прямоугольную матрицу цифр (то есть 0 - 9
), выведите «части» матрицы, как если бы цифры соединялись вместе, образуя один фрагмент, в порядке возрастания цифр. Кусочки гарантированно соединяются только ортогонально - ни одна деталь не соединится по диагонали. Всего будет максимум 10 штук (то есть одна 3
штука не появится дважды в одной матрице).
Например, с учетом матрицы
0 1 1 1
0 0 1 2
3 3 2 2
Ниже приведены фрагменты и пример вывода:
0
0 0
1 1 1
1
2
2 2
3 3
Интервалы важны для сохранения формы частей, но части не обязательно нуждаются во внутреннем интервале. Сами части должны как-то быть выделены непротиворечивым образом (например, новая строка между частями, удостовериться, что каждый из них является другим персонажем и т. Д.). Кроме того, посторонние пробелы (например, завершающие символы новой строки или начальные столбцы) не допускаются. Например, следующее также будет действительным:
0
00
111
1
2
22
33
или
#
##
###
#
#
##
##
Но следующее не будет (обратите внимание на пробелы позади 0
s):
0
0 0
Повороты или отражения также не допускаются. Например, вывод
1
111
для приведенной выше матрицы также недействительна.
Куски матрицы могут иметь отверстия или быть только одним элементом:
0 0 0 1
0 2 0 1
0 0 0 3
Или часть может быть целой матрицей:
0 0 0
0 0 0
Вот большой, более сложный тестовый пример:
1 1 1 1 1 2 2
3 4 4 4 2 2 2
5 5 4 4 2 0 0
5 6 6 6 6 7 7
5 6 8 8 6 6 7
9 6 6 6 7 7 7
И пример вывода:
00
11111
22
222
2
3
444
44
55
5
5
6666
6 66
666
77
7
777
88
9
Правила и ввод / вывод
- Вход и выход могут быть заданы любым удобным способом .
- Вы можете распечатать его в STDOUT или вернуть как результат функции.
- Либо полная программа или функция приемлемы.
- Требуются начальные пробелы для сохранения формы (например, форма «Т»
1
в примере), непротиворечивые пробелы для выделения частей и допускается одиночный завершающий перевод строки в конце, но другие пробелы не допускаются. - Можно смело предположить , что части пронумерованы
0
вN
смежно, а это означает , что (например)3
не будет пропущены в шесть частях матрицы. - Стандартные лазейки запрещены.
- Это код-гольф, поэтому применяются все обычные правила игры в гольф, и выигрывает самый короткий код (в байтах).
-1
или с пробелом, представляющим пустой пробел, или, если возможно, с отсутствием элемента)?0
в качестве значения заполнителя? Таким образом, каждый кусок будет выводиться с остальными значениями в матрице, установленными на0
-1
или каким-либо другим значением вместо ничего / пробелов не будет в порядке.' '
в таком случае следует использовать пробел ( )?Ответы:
05AB1E ,
2019 байтов-1 байт благодаря @ Mr.Xcoder .
Выводит 2D списки фигур (с
1
пробелами" "
) на новую строку.Попробуйте онлайн или проверьте все тесты или распечатайте все тесты .
Объяснение:
источник
Haskell,
133132129 байтПринимает матрицу как список строк и возвращает список списка строк.
Попробуйте онлайн!
источник
Желе , 18 байт
Попробуйте онлайн!
Возвращает список фрагментов, где
1
представляет часть фрагмента и' '
выполняет заполнение. Трейлинг' '
с удалены.источник
ẎQ=€
должны делать, хотя нам нужны фрагменты в порядке возрастания, поэтому9Ż=€
(если мы не должны включать «несуществующие фрагменты» в этом случаеẎQṢ=€
)9Ż=€
она не будет работать (я думаю, что «посторонние пробелы [...] не разрешены» распространяется и на массивы, поэтому я обрезаю их).Python 3 ,
271209206183176172191 байтПопробуйте онлайн!
Изменить: некоторая очистка и -5 благодаря @ Джонатан Фрех .
Изменить:
-3-26 еще раз благодаря @ Джонатан Фрех .Редактировать: -7 еще раз благодаря @ Джонатан Фрех .
Редактировать: +19: Как отметил @ nimi, ранее вывод имел неверный формат.
Ввод матрицы в виде списка списков:
Выводится список матриц:
Ungolfed:
источник
Python 2 ,
173172165 байтовПопробуйте онлайн!
-15 байт от наблюдения Ними .
В форме программы принимает в качестве входных данных список списков отдельных символов; вывод, печатая куски, найденные с использованием их характера.
источник
C # (.NET Core) ,
258, 238 байтБез LINQ.
РЕДАКТИРОВАТЬ: Embodiment Of Ignorance указывает на лучшие объявления вар! Ты ты.
Попробуйте онлайн!
источник
Python 2 , 291 байт
Попробуйте онлайн!
Ожидается, что в качестве входных данных указывается строка с кавычками. Полу смехотворный процент кода посвящен обработке ввода без пробелов / пробелов.
Un-golfing Объяснение:
источник
Сетчатка , 75 байт
Попробуйте онлайн! Объяснение:
Добавить цифру к входу. Это представляет счетчик цикла. Новая строка упрощает удаление завершающих пробелов.
Запретить вывод по умолчанию и повторить ровно 10 раз.
Продвиньте цифру цикла.
Выведите результат остальной части скрипта, но затем восстановите буфер.
Замените все цифры, которые не соответствуют цифре цикла, пробелами. (Поскольку здесь используется заглядывание вперед, и на данный момент не нужно заглядывать вперед, это также заменяет цифру цикла.)
Удалите все конечные пробелы.
Удалить все пустые строки.
Повторяйте, пока строка не начинается с цифры ...
... удалить первый символ в каждой строке.
Если что-то осталось, добавьте новую строку, чтобы отделить каждую фигуру от следующей. (Это сделано для того, чтобы избежать появления новых строк за пропущенными цифрами.)
источник
Древесный уголь , 43 байта
Попробуйте онлайн! Ссылка на подробную версию кода. Объяснение:
Читать входные данные в массив. (Это можно было бы удалить, если бы я использовал некрасивый формат ввода.)
Зациклите 10 цифр.
Получить строки, которые содержат эти цифры.
Убедитесь, что цифра была действительно найдена (чтобы предотвратить вывод ложных символов новой строки).
Выключите автоматическое заполнение.
Зациклитесь на найденных строках.
Цикл над каждым столбцом ...
... если текущий вводимый символ равен текущей цифре цикла, выведите его, иначе переместите курсор вправо.
Перейти к началу следующего ряда. Использование таких команд перемещения позволяет углю обрезать выход с обеих сторон.
Дамп и очистить холст готов к следующей цифре. Это позволяет различным цифрам иметь различное количество обрезки.
Я попробовал программный подход, но он весил 47 байтов, хотя это также было бы 43 байта в течение короткого промежутка времени при
Equals
векторизации:Попробуйте онлайн! Ссылка на подробную версию кода. Объяснение:
Выключите автоматическое заполнение.
Читать входные данные в массив.
Зациклите 10 цифр.
Сравните каждый символ с вводом и создайте логический массив, но затем отфильтруйте строки без совпадений.
Переберите оставшиеся строки и отрежьте от самого раннего совпадения в любой строке до самого последнего совпадения в текущей строке, затем сопоставьте логический массив обратно цифрам или пробелам, которые затем неявно печатаются как массив строк.
источник
Wolfram Language 101 байт
Должен быть намного более эффективный способ достигнуть этого.
источник
Perl 5, 97 байт
TIO
объяснение
источник
APL (Dyalog Unicode) , 38 байтов SBCS
Функция анонимного молчаливого префикса. Принимает числовую матрицу в качестве аргумента и возвращает список строк списков. Каждый список строк представляет собой фрагмент с разделенными пробелом символами
1
s. Ведущие и внутренние (но не конечные) пробелы являются пробелами.Попробуйте онлайн!
∪∘,
уникальные элементы равноправной (сплющенной) матрицы⊂{
…}¨
Для каждого из них⍵
вызовите следующую функцию со всей матрицей как⍺
:⍺=⍵
указать, где находится номер этой фигуры в матрице⊢
дать это (отделяется2
от⍺
){
…}⍣2
Примените следующую функцию дважды (⍵
это булева матрица):∨/
маска для строк, по крайней мере, с одним1
(подсвеченное по строкам OR-сокращение)⍵⌿⍨
использовать это для фильтрации строк⍉
транспонировать (поэтому мы делаем это на столбцах, а затем транспонировать обратно)' '@~
заменить пробелами в местах, где нет (т.е. где0
)⍕
форматировать как матрицу символов↓
разделить на список строк' +$'⎕R''
PCRE заменяет конечные пробелы (любое количество пробелов, за которыми следует конец строки) ничемисточник
Japt , 29 байт
Попробуйте онлайн!
Обновлен в соответствии с более строгим форматированием вывода.
Выводится в виде списка частей, каждый из которых представлен списком строк, используя 2 в качестве символа-заполнителя.
Объяснение:
источник
false
из внутренних списков. Вот пастбина, чтобы я мог лучше объяснить, что должно быть на выходе. Не стесняйтесь просить OP уточнить, но, насколько я понимаю из задачи, все конечные пробелы вообще не должны присутствовать в выходных данных.Python 3 , 133 байта
Попробуйте онлайн!
Принимает строку, разделенную новой строкой, возвращает список строк, разделенных новой строкой. Использует
textwrap.dedent
избавиться от ведущих пробелов.источник
Желе , 19 байт
Попробуйте онлайн!
Монадическая ссылка, принимающая матрицу в качестве входных данных и возвращающая список из одного рваного списка на элемент. Нижний колонтитул показывает это красиво, но я думаю, что вывод без этого согласуется с правилами вопроса.
источник