Это изображение было сделано путем наложения 7 разноцветных прямоугольников друг на друга:
Черный и бордовый прямоугольники свободны , то есть над ними нет никаких других прямоугольников.
Напишите программу, которая принимает изображение, подобное этому, и удаляет любой свободный прямоугольник, выводя полученное изображение.
пример
Если вы запустили свою программу на изображении выше и продолжали повторно запускать ее на выходе, она может развиваться следующим образом.
Прогон 1 - черные удалены (мог быть бордовым):
Прогон 2 - Maroon удален (только выбор):
Прогон 3 - Желтый удален (только выбор):
Прогон 4 - Синий удален (мог быть зеленым):
Прогон 5 - Зеленый удален (только выбор):
Прогон 6 - Браун удален (только выбор):
Прогон 7 - красный удален (только выбор):
Любые дополнительные прогоны должны давать одинаковое белое изображение.
Надеемся, что Stack Exchange не сжал без потерь ни одно из этих изображений.
Изображение всегда будет иметь белый фон, и каждый прямоугольник будет иметь уникальный цвет RGB, который не является белым.
Вы можете предположить, что изображение всегда можно интерпретировать как набор перекрывающихся прямоугольников. В частности, вы можете предположить, что для определенного цвета пиксель с этим цветом, ближайшим к верхней части изображения, является частью верхнего края прямоугольника этого цвета. То же самое относится к нижнему, левому и правому краям.
Так, например, на этом изображении верхний край красного прямоугольника будет чуть ниже нижнего края желтого прямоугольника, так как оранжевый прямоугольник покрывает старый красный верхний край:
На этом изображении красный прямоугольник может быть удален первым (наряду с черным / бордовым / оранжевым / серым):
Когда порядок нижних прямоугольников неоднозначен, вы можете дать им любой порядок.
Например, левое изображение здесь может стать средним или правым:
Вывод не должен иметь парадоксальных совпадений (поэтому возможно сделать это с помощью алгоритма художника ). Так что на этом изображении ( спасибо user23013 ), он должен быть зеленым под оранжевым прямоугольником:
дополнительные детали
- Изображение и прямоугольники могут иметь любые размеры.
- Прямоугольники могут касаться границы изображения.
- Может быть до 256 3 - 1 прямоугольника.
- Если вход полностью белый, то выход должен быть также.
- Вы можете использовать библиотеки изображений.
- Входными данными должны быть имя файла изображения или необработанные данные изображения. Это может быть из стандартного ввода или командной строки.
- Вывод может быть записан в тот же или другой файл изображения, выгружен сырым в стандартный вывод или просто отображен.
- Разрешен любой распространенный формат изображения без потерь цвета .
Представление с наименьшим количеством байтов выигрывает.