Pull to refresh

Изобретаем язык программирования для тренировки мозгов. Или эзотерический язык программирования за 5 минут

Reading time2 min
Views6.2K
Изучая вики по эзотерическим языкам я наткнулся на интересный язык программирования Piet. Отличительной особенностью которого является графическое представление программы. Например, эта программа выводит «Hello World!»
image
И показалось мне, что данная программа похожа на QR-Code.
image
Только Piet использует цветовую кодировку. А QR-Code использует комбинацию расположения точек.

«Да это же готовая программа» подумалось мне. Разбиваем поле на квадраты, так, чтобы в каждом квадрате поместилось 4 точки. Это дает нам 16 комбинаций. Огромное количество по сравнению с тем же Brainfuck!

Раз комбинаций много, то можно не сдерживать себя в выборе команд ЯП. Далее, смотрим на PATH, и видим, что он как нельзя лучше ложится в основу нового языка. Потому как состоит из 15 команд.

Остается только закодировать команды языка PATH комбинациями точек и немного изменить правила работы интерпретатора.

Словарь языка.

В скобках указан эквивалент языка PATH

(#) — прекратить выполнение программы.

(+) -увеличить на единицу текущую ячейку памяти.

(-) — уменьшить на единицу текущую ячейку памяти.

(}) — перейти к следующей ячейке памяти.

({) — перейти к предыдущей ячейке памяти.

(,) — ввести символ из стандартного ввода в текущую ячейку памяти.

(.) — напечатать символ из текущей ячейки памяти.

(/) — поменять направление движения указателя в зависимости направления движения:
  1. вправо — начинаем идти вверх
  2. вниз — начинаем идти влево
  3. влево — начинаем идти вниз
  4. вверх — начинаем идти вправо

(\) — поменять направление движения указателя в зависимости направления движения:
  1. вправо — начинаем идти вниз
  2. вниз — начинаем идти влево
  3. влево — начинаем идти вверх
  4. вверх — начинаем идти влево

(^) — если текущая ячейка равна нулю начинаем идти вверх.

(<) — если текущая ячейка равна нулю начинаем идти влево.

(>) — если текущая ячейка равна нулю начинаем идти вправо.

(v) — если текущая ячейка равна нулю начинаем идти вниз.

(!) — перепрыгнуть через ячейку.

— команда, которая ничего не делает, но хорошо заполняет пустое место.

Программа размещается в шаблоне QR-code, который представлен на рисунке ниже.



Здесь зеленым квадратом обозначено поле, где можно безопасно вписывать программу. Размер поля, в принципе не ограничен, но лучше использовать стандартные размеры, принятые в стандарте на QR код.
Программа начинает выполняться с места, обозначенного красным квадратом. Оставшееся место в поле программы можно заполнить рандомно чтобы было более похоже на QR-Code.

При запуске программы интерпретатор читает код программы начиная с верхнего левого угла и движется слева направо выполняя команды. И двигаться будет пока не встретит команду остановки.

Название языка также составим из частей исходных технологий — QR-PATH.

PS. В данный момент это концепт языка. Интерпретатора не существует.

PPS. В качестве основы можно было взять Data-Matrix. Но QR-коды более узнаваемы, поэтому программа на QR-PATH будет производить более неожиданный эффект.

Update.
В комментариях просили написать программу, которая выводит одно и тоже как QR-PATH и как QR-code.
Решение представлено здесь
Здесь привожу только конечный результат. К сожалению, внедрение программы лортит данные в исходном коде.


Update2.
Статью заминусовало приличное количество прочитавших ее. А критических замечаний в комментариях нет. Мне вот интересно, что не понравилось минусующим? Оформление, содержание?
Tags:
Hubs:
Total votes 84: ↑74 and ↓10+64
Comments23

Articles