Изучая вики по эзотерическим языкам я наткнулся на интересный язык программирования Piet. Отличительной особенностью которого является графическое представление программы. Например, эта программа выводит «Hello World!»
![image](http://esoteric.voxelperfect.net/w/images/6/63/Piet_Hello_World.gif)
И показалось мне, что данная программа похожа на QR-Code.
![image](https://habrastorage.org/getpro/habr/post_images/ed2/44b/a2b/ed244ba2bf40c2a8003b2202a8a0a6d7.gif)
Только Piet использует цветовую кодировку. А QR-Code использует комбинацию расположения точек.
«Да это же готовая программа» подумалось мне. Разбиваем поле на квадраты, так, чтобы в каждом квадрате поместилось 4 точки. Это дает нам 16 комбинаций. Огромное количество по сравнению с тем же Brainfuck!
Раз комбинаций много, то можно не сдерживать себя в выборе команд ЯП. Далее, смотрим на PATH, и видим, что он как нельзя лучше ложится в основу нового языка. Потому как состоит из 15 команд.
Остается только закодировать команды языка PATH комбинациями точек и немного изменить правила работы интерпретатора.
В скобках указан эквивалент языка PATH
(#) — прекратить выполнение программы.
(+) -увеличить на единицу текущую ячейку памяти.
(-) — уменьшить на единицу текущую ячейку памяти.
(}) — перейти к следующей ячейке памяти.
({) — перейти к предыдущей ячейке памяти.
(,) — ввести символ из стандартного ввода в текущую ячейку памяти.
(.) — напечатать символ из текущей ячейки памяти.
(/) — поменять направление движения указателя в зависимости направления движения:
(\) — поменять направление движения указателя в зависимости направления движения:
(^) — если текущая ячейка равна нулю начинаем идти вверх.
(<) — если текущая ячейка равна нулю начинаем идти влево.
(>) — если текущая ячейка равна нулю начинаем идти вправо.
(v) — если текущая ячейка равна нулю начинаем идти вниз.
(!) — перепрыгнуть через ячейку.
— команда, которая ничего не делает, но хорошо заполняет пустое место.
Программа размещается в шаблоне QR-code, который представлен на рисунке ниже.
![](https://habrastorage.org/r/w1560/storage1/6b33b2b1/1646cbea/37173735/bc1c5cae.png)
Здесь зеленым квадратом обозначено поле, где можно безопасно вписывать программу. Размер поля, в принципе не ограничен, но лучше использовать стандартные размеры, принятые в стандарте на QR код.
Программа начинает выполняться с места, обозначенного красным квадратом. Оставшееся место в поле программы можно заполнить рандомно чтобы было более похоже на QR-Code.
При запуске программы интерпретатор читает код программы начиная с верхнего левого угла и движется слева направо выполняя команды. И двигаться будет пока не встретит команду остановки.
Название языка также составим из частей исходных технологий — QR-PATH.
PS. В данный момент это концепт языка. Интерпретатора не существует.
PPS. В качестве основы можно было взять Data-Matrix. Но QR-коды более узнаваемы, поэтому программа на QR-PATH будет производить более неожиданный эффект.
Update.
В комментариях просили написать программу, которая выводит одно и тоже как QR-PATH и как QR-code.
Решение представлено здесь
Здесь привожу только конечный результат. К сожалению, внедрение программы лортит данные в исходном коде.
![](https://habrastorage.org/r/w1560/getpro/habr/post_images/92e/ac3/566/92eac35664caf8afa29cb5e291f45a84.png)
Update2.
Статью заминусовало приличное количество прочитавших ее. А критических замечаний в комментариях нет. Мне вот интересно, что не понравилось минусующим? Оформление, содержание?
![image](http://esoteric.voxelperfect.net/w/images/6/63/Piet_Hello_World.gif)
И показалось мне, что данная программа похожа на QR-Code.
![image](https://habrastorage.org/getpro/habr/post_images/ed2/44b/a2b/ed244ba2bf40c2a8003b2202a8a0a6d7.gif)
Только Piet использует цветовую кодировку. А QR-Code использует комбинацию расположения точек.
«Да это же готовая программа» подумалось мне. Разбиваем поле на квадраты, так, чтобы в каждом квадрате поместилось 4 точки. Это дает нам 16 комбинаций. Огромное количество по сравнению с тем же Brainfuck!
Раз комбинаций много, то можно не сдерживать себя в выборе команд ЯП. Далее, смотрим на PATH, и видим, что он как нельзя лучше ложится в основу нового языка. Потому как состоит из 15 команд.
Остается только закодировать команды языка PATH комбинациями точек и немного изменить правила работы интерпретатора.
Словарь языка.
В скобках указан эквивалент языка PATH
![](https://habrastorage.org/storage1/77cea81f/5a508bf8/cb0812f0/18722252.png)
![](https://habrastorage.org/storage1/a03752b4/14ed7ce0/eae8eb9b/4891218f.png)
![](https://habrastorage.org/storage1/323d2150/77d64159/c45953f3/e07d848a.png)
![](https://habrastorage.org/storage1/711c66a2/a6fe9889/c520272b/9fe0599d.png)
![](https://habrastorage.org/storage1/7e8f1534/f8058619/8ff1afb3/41ad9461.png)
![](https://habrastorage.org/storage1/6ce3c549/70a1f700/f57c60f9/e584f358.png)
![](https://habrastorage.org/storage1/14fed6f9/5ab93504/ce77ddf5/3af57f9e.png)
![](https://habrastorage.org/storage1/ddb5b0b7/4cdeb80a/76dadb64/4ee6b759.png)
- вправо — начинаем идти вверх
- вниз — начинаем идти влево
- влево — начинаем идти вниз
- вверх — начинаем идти вправо
![](https://habrastorage.org/storage1/0e362335/75c9c3b8/f0b79e7b/d914e67d.png)
- вправо — начинаем идти вниз
- вниз — начинаем идти влево
- влево — начинаем идти вверх
- вверх — начинаем идти влево
![](https://habrastorage.org/storage1/8588836f/e8c29d7a/e3c8d794/42a5ab4d.png)
![](https://habrastorage.org/storage1/4170aff6/7a77612f/a2fdc8db/47401eac.png)
![](https://habrastorage.org/storage1/8987ec38/086e66b3/8282c98a/e6a7c7a8.png)
![](https://habrastorage.org/storage1/c543cb9f/18e33e21/6223d81d/c8205715.png)
![](https://habrastorage.org/storage1/f5f9386c/8d65fd4c/eb07a927/66db377d.png)
![](https://habrastorage.org/storage1/e772cf08/5978adfa/e171b9b8/f9ad1972.png)
![](https://habrastorage.org/storage1/aa55bb3e/27a63397/05c5b23c/3114c964.png)
Программа размещается в шаблоне QR-code, который представлен на рисунке ниже.
![](https://habrastorage.org/storage1/6b33b2b1/1646cbea/37173735/bc1c5cae.png)
Здесь зеленым квадратом обозначено поле, где можно безопасно вписывать программу. Размер поля, в принципе не ограничен, но лучше использовать стандартные размеры, принятые в стандарте на QR код.
Программа начинает выполняться с места, обозначенного красным квадратом. Оставшееся место в поле программы можно заполнить рандомно чтобы было более похоже на QR-Code.
При запуске программы интерпретатор читает код программы начиная с верхнего левого угла и движется слева направо выполняя команды. И двигаться будет пока не встретит команду остановки.
Название языка также составим из частей исходных технологий — QR-PATH.
PS. В данный момент это концепт языка. Интерпретатора не существует.
PPS. В качестве основы можно было взять Data-Matrix. Но QR-коды более узнаваемы, поэтому программа на QR-PATH будет производить более неожиданный эффект.
Update.
В комментариях просили написать программу, которая выводит одно и тоже как QR-PATH и как QR-code.
Решение представлено здесь
Здесь привожу только конечный результат. К сожалению, внедрение программы лортит данные в исходном коде.
![](https://habrastorage.org/getpro/habr/post_images/92e/ac3/566/92eac35664caf8afa29cb5e291f45a84.png)
Update2.
Статью заминусовало приличное количество прочитавших ее. А критических замечаний в комментариях нет. Мне вот интересно, что не понравилось минусующим? Оформление, содержание?