Comments 35
Замечательная новость, достойная современного Хабра!
/пишу, в чем не согласен/ Эзотерика в программировании - это интересно, и чем упоротее, тем лучше. Мозги надо периодически взбивать, как подушку ;)
не гадю ;)
В связи с чем-то плюсик стоит, не помню уже...
Да, эзотерика - это классно, но когда она не столь примитивная. Кто-то уместил операционную систему в один килобайт - это круто, это новость. А код, как будто написанный на уроке информатики в седьмом классе - это не новость.
эзотерика - это классно, но когда она не столь примитивная
Красота в глазах смотрящего, как и крутость. Мне идея понравилась.
Offtopic:
На HN в комментариях люди делятся тем, что получилось нарисовать. На Хабре - пишут КГ/АМ. Интересное отличие в менталитете.
Жаль, что вы не потрудились раскрыть свою мысль.
Эзотерика интересна когда она раскрыта. Пример расписан и объяснён. В чем фишка показаны.
А не просто "вот еще один недоязык по фану".
Пожалуйста, привидите пример раскрытия в этом конкретном случае.
Набор команд и принцип работы обозначены. Пример работы приведён. Это - новость, а не статья-разбор.
Что такое "блок"? Почему n вложенных друг в друга блоков дают прямоугольник именно таких размеров?
Как именно работает смена цвета?
Хочется раскрытия этих тем прямо в статье, иначе статья преаращается в одну ссылку на документацию.
Ну т.е. параметризации вообще никакой? Чтобы нарисовать (аппроксимировать) две окружности разного размера, нужн описать две разные программы? Как-то грустно.
Вы правы. Язык минималистичный (читай ограниченный). Интересно, как бы вы добавили параметризацию?
Ну два параметра у нас всё же есть - масштаб одного шага вперёд и начальная ориентация пера. Но сейчас они привязаны ко всей программе, а точнее - к интепретатору языка.
Если бы можно было выполнить часть программы, задавая по разному эти два значения, было интересно. И если с начальным углов поворота проблем нет, так как можно просто вставить нужные инструкции поворота перед "вызовом подпрограммы", то с масштабом ничего не поделать.
Что-то до боли знакомое, хотя и чутка упрощённое
MoveTo(x, y)
LineTo(x, y, color)
Две команды.
Pixel(x,y,color)
всего одна
Слишком много параметров.
^ // инкрементируем цветовой код текущей ячейки сетки
+ // инкрементируем позицию текущей ячейки сетки
// rgb компоненты пикселя представлены тремя последовательными ячейками в сетке
Тут проблема с длиной строки, если сетка неизвестного размера по горизонтали, то картинка не воспроизведётся. Нужна третья команда. Либо перевод строки, либо задать длину строки либо что-то ещё...
Сетка может сразу фиксированной быть. Ну или перед началом секции рисования можно сделать секцию заголовка, где количество + обозначает ширину и завершается первой ^.
Фиксированная сетка это плохо. Секция заголовка решает проблему, но это уже не так изящно, к сожалению. Проще тогда задать длину строки и всё
Я предлагаю такое решение - инкрементация позиции в сетке происходит по спирали. Тогда размер сетки не важен.
6789
501
432
либо уголком
0136
247
58
9
Если есть два смежных края, то можно идти по диагоналям на бесконечной сетке:
(0, 0)
(0, 1), (1, 0)
(0, 2), (1, 1), (2, 0)
и так далее.
RunJSCode(code).
1 команда, 1 параметр + сделать можно много чего.
Напоминает «черепашку» для 6-7 классов :) поднять перо/опустить перо :) там тоже сокращения и ограничения
Так он даже не Тьюринг-полный. В отличии от P'', кстати. Язык, в котором нет условного выполнения кода - это и не язык программирования, в принципе.
С таким подходом, языком можно назвать и RLE, например. Или даже BMP - там вообще одна "команда" - "задать цвет пикселя в текущей точке и передвинуть виртуальный курсор на следующую".
Э. Они изобрели brainfuck? Который в силу тьюринг-полноты может всё, но реально используют его (в силу сложности, поскольку ассемблер по сравнению с ним - просто Copilot) именно для такого вот рисования.
Мои руководители могут уложиться в одну команду сделать заебись
Эх, помню на Yamaha MSX в Бейсике команда DRAW была, примерно с таким же синтаксисом. Конец 80ых прошлого века.
RR[FCCF[CCC]]FFCCF[CCC][FCCFF[CCC]]FF[FRR]CCF[CCC][FCCFF[CCC]]FCCFF[CCC][FCCF[CCC]][F[RRR]][FFCCF[CCC]][FCCFF[CCC]]FCCF[CCC][FRR]CCF[CCC][FCCFF[CCC]]FCCFF[CCC][FCCF[CCC]][F[RRR]]CCF[CCC]FCCF[[CCC]FFCCF][CCC]FFCCF[CCC]FFF
Представлен минималистичный язык для рисования состоящий всего из 5 команд