Эта задача заключается в написании интерпретатора для языка описания картин Мондриана (MPDL).
Определение языка
Язык работает со стеком прямоугольников. Прямоугольник определяется его верхней левой координатой и нижней правой координатой. Координаты должны быть целыми числами. Стек инициализируется одним прямоугольником с атрибутами(1,1,254,254)
Каждая команда имеет следующий формат:
<character><integer>
Есть три команды:
v<integer>
: выполнить вертикальное разбиение последнего прямоугольника в стеке в позиции, указанной параметром (в процентах). Исходный прямоугольник удаляется из стека и заменяется двумя новыми прямоугольниками, которые являются результатом разделения. Левый прямоугольник помещается в стек, затем правый прямоугольник. Поскольку координаты прямоугольника являются целыми числами, дроби должны быть округлены до наибольшего меньшего целого числа.
h<integer>
: горизонтальное разделение. Верхний прямоугольник помещается в стек, затем нижний прямоугольник.
c<integer>
: удаляет последний прямоугольник из стека и рисует его в цвет, заданный в качестве параметра. 1 = белый, 2 = красный, 3 = синий, 4 = желтый
Вызов
Напишите программу, которая принимает в качестве параметра описание рисования и создает растровое представление прямоугольников размером 256x256. Прямоугольники должны быть разделены 3-пиксельной черной линией. Один или два пикселя прямоугольника должны иметь его не черные пиксели, скрытые границей черных пикселей.
Ввод может быть прочитан как параметр или как файл, до вас. Команды должны быть разделены пробелом. Можно предположить, что входной файл имеет правильный синтаксис и не имеет конечных или начальных пробелов, вкладок и т. Д. Вывод может быть непосредственно отображен на экране или сохранен в файле, до вас.
Самый короткий код выигрывает.
Тестовое задание
Следующий источник:
v25 h71 v93 h50 c4 c1 c1 c2 h71 c3 h44 c1 c1
Должен производить Композицию II красного, синего и желтого цветов :
v30 v50 c1 c5 h70 v50 c1 c3 c2
.
v
иh
аргументы должны быть в пикселях