Эта задача заключается в написании интерпретатора для языка описания картин Мондриана (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 красного, синего и желтого цветов :
v
иh
аргументы должны быть в пикселяхv30 v50 c1 c5 h70 v50 c1 c3 c2
.Ответы:
Perl 5 + ImageMagick - 297
С чего начать:
Принимает ввод в командной строке и генерирует
a.gif
.источник
Haskell - 335
Программа читает инструкцию как одну строку из стандартного ввода , если это недопустимо, дайте мне знать.
Компилируется в программу, которая принимает флаги -w width -h height -o outputfile .Выводит файл "a.svg", если это не сразу понятно из кода. Поскольку на выходе получается векторное изображение, оно не «идеально подходит для пикселей».Я впервые работаю с пакетом Diagrams, не стесняйтесь указывать на любые ошибки, которые я допустил. Особенно хороший бэкэнд, который позволил бы мне выводить меньше кода.
Вы можете увидеть некоторые из первых шагов, которые я предпринял при разработке кода, по адресу http://paste.hskll.org/get/1737 . Он отличается от приведенного выше кода в импорте и не содержит main, поскольку paste.hskll.org предоставляет собственную среду main и среду рисования.
источник
Питон -
434 405 377 364361Мой первый питон гольф. Это, вероятно, можно улучшить много, поэтому любая обратная связь приветствуется.
источник
a+=[x]
вместоa.append(x)
. И разделение не нуждается в аргументе при разделении пробелами.HTML + JavaScript ES6 (407)
Протестировано с Firefox 32.0.3
источник
x.charAt(0)
->x[0]
;x.substr
->x.slice
;white yellow
->#fff #ff0
;document.getElementById("c")
->c
... и болееHTML + JavaScript (ES6) 335
Слишком похоже на ответ @mika - маркировка CW.
источник