вход
Ваш вход в этот вызов представляет собой список целочисленных пар. Они представляют юго-западные углы единичных квадратов на плоскости, а список представляет их объединение как подмножество плоскости. Например, список
[(0,0),(1,0),(0,1),(1,1),(2,1),(1,2),(2,2)]
представляет красный набор на этой картинке:
Выход
Yor output - это список целочисленных четверок, представляющих прямоугольные подмножества плоскости. Более конкретно, четверка (x,y,w,h)
повторяет прямоугольник ширины w > 0
и высоты h > 0
, юго-западный угол которого равен (x,y)
. Прямоугольники должны формировать точное покрытие входной области, в том смысле, что каждый из единичных квадратов является подмножеством некоторого прямоугольника, каждый прямоугольник является подмножеством области, и два прямоугольника могут перекрываться только на своих границах. Чтобы запретить тривиальные решения, покрытие не должно содержать два прямоугольника, которые можно объединить в больший прямоугольник.
Например, список
[(0,0,2,1),(0,1,3,1),(1,2,2,1)]
представляет собой юридическое покрытие
указанного региона, тогда как покрытие
[(0,0,2,2),(2,1,1,1),(1,2,1,1),(2,2,1,1)]
является незаконным, поскольку соседние квадраты 1 на 1 могут быть объединены:
правила
Вы можете дать полную программу или функцию. Точное форматирование ввода и вывода не имеет значения, в пределах разумного. Самый короткий счет байтов побеждает, и стандартные лазейки запрещены. Вам предлагается предоставить объяснение вашего алгоритма и некоторые примеры выходных данных.
Тестовые случаи
U-образная область:
[(0,0),(0,1),(0,2),(0,3),(0,4),(0,5),(1,0),(1,1),(1,2),(1,3),(1,4),(1,5),(2,0),(2,1),(3,0),(3,1),(4,0),(4,1),(4,2),(4,3),(4,4),(4,5),(5,0),(5,1),(5,2),(5,3),(5,4),(5,5)]
Большой треугольник:
[(0,0),(0,1),(0,2),(0,3),(0,4),(0,5),(0,6),(0,7),(0,8),(0,9),(1,0),(1,1),(1,2),(1,3),(1,4),(1,5),(1,6),(1,7),(1,8),(2,0),(2,1),(2,2),(2,3),(2,4),(2,5),(2,6),(2,7),(3,0),(3,1),(3,2),(3,3),(3,4),(3,5),(3,6),(4,0),(4,1),(4,2),(4,3),(4,4),(4,5),(5,0),(5,1),(5,2),(5,3),(5,4),(6,0),(6,1),(6,2),(6,3),(7,0),(7,1),(7,2),(8,0),(8,1),(9,0)]
Квадрат с отверстиями:
[(0,0),(0,1),(0,2),(0,3),(0,4),(0,5),(0,6),(0,7),(0,8),(1,0),(1,1),(1,2),(1,3),(1,4),(1,5),(1,6),(1,7),(1,8),(1,9),(2,0),(2,1),(2,2),(2,3),(2,4),(2,5),(2,6),(2,7),(2,8),(2,9),(3,0),(3,1),(3,2),(3,4),(3,5),(3,6),(3,7),(3,8),(3,9),(4,0),(4,1),(4,2),(4,3),(4,4),(4,5),(4,6),(4,7),(4,8),(4,9),(5,0),(5,1),(5,2),(5,3),(5,4),(5,5),(5,7),(5,8),(5,9),(6,1),(6,2),(6,3),(6,5),(6,6),(6,7),(6,8),(6,9),(7,0),(7,1),(7,2),(7,3),(7,4),(7,5),(7,6),(7,7),(7,8),(7,9),(8,0),(8,1),(8,2),(8,3),(8,4),(8,5),(8,6),(8,7),(8,8),(8,9),(9,0),(9,1),(9,2),(9,3),(9,4),(9,5),(9,6),(9,7),(9,8),(9,9)]
Отключенные регионы:
[(0,0),(0,1),(0,2),(0,3),(0,4),(0,5),(0,6),(0,7),(0,8),(1,0),(1,1),(1,2),(1,3),(1,4),(1,6),(1,7),(1,8),(1,9),(2,1),(2,2),(2,3),(2,4),(2,5),(2,6),(2,7),(2,8),(2,9),(4,0),(4,1),(4,2),(4,4),(4,5),(4,6),(4,7),(4,8),(4,9),(5,0),(5,1),(5,2),(5,3),(5,4),(5,5),(5,6),(5,7),(5,8),(5,9),(6,0),(6,1),(6,2),(6,4),(6,5),(6,6),(6,7),(6,8),(6,9),(8,0),(8,1),(8,2),(8,3),(8,4),(8,5),(8,6),(8,7),(8,8),(8,9),(9,0),(9,1),(9,2),(9,3),(9,7),(9,8),(9,9),(10,0),(10,1),(10,2),(10,3),(10,4),(10,5),(10,6),(10,7),(10,8),(10,9)]
контрольник
Используйте эту программу Python 2, чтобы проверить ваше решение. Он берет из STDIN список кортежей (входные данные) и список четверок (ваши выходные данные), разделенные запятой.
Я также написал эту программу на Python 2 для генерации картинок, и вы тоже можете ее использовать. Он берет из STDIN список кортежей или четверок и создает файл с именем out.png
. Требуется библиотека PIL. При желании вы можете изменить размер ячеек сетки и ширину линий опоясывания.