Конвертор из PNG в минималистичный язык рисования графики CFR[]
Общие сведения
CFR[] — минималистичный язык рисования графики, состоит из пяти команд:
C
— циклически поменять цвет (доступно восемь цветов)
F
— нарисовать одну точку выбранным цветом и сдвинуть позицию рисования в выбранном направлении
R
— повернуть направление рисование на 45°
[
]
— поворить указанное в скобках один раз (эта конструкция может быть вложенной)
Такая структура больше предназначена для генерации рекурентых штук, но мне было интересно попробовать сконвертировать на
этот язык что-нибудь растровое и решить задачу оптимизации, то есть научиться сворачивать инструкции в циклы.
Вот во что превращается один из тестовых примеров:
RR[[FC][CCC]]F[FC][CCC][FCFF[CCC]C]FF[FRR]CF[CCC]C[FCFF[CCC]C]FCFF[CCC]C[[FC][CCC]][F[RRR]][F[FC][CCC]][FCFF[CCC]C][FC][CCC][FRR]CF[CCC]C[FCFF[CCC]C]FCFF[CCC]C[[FC][CCC]][F[RRR]]CF[CCC]C[FC][CCC][F[FC][CCC]]F[FC][CCC]FFF
Посмотреть результат интерпретации этого кода можно онлайн по ссылке: https://susam.net/cfr.html
Запуск
Запустить программу можно компилятором языка Go при помощи следующей команды:
go run png2cfr.go pictures/frog.png