Как стать автором
Обновить

Комментарии 7

Если вдруг кому интересно, вот моя аналогичная поделка на платформе 1С: infostart.ru/public/546662

Только это не квайн, а мультиквайн. Курица и яйцо. Игрушка «курица» кроме прочего имеет функцию выдачи исходника яйца, а игрушка «яйцо» выдаёт исходник курицы.
Отлично! К сожалению, не знаю 1С на уровне, достаточном, чтобы оценить детали реализации, но результат радует взгляд.
Там я играю на том, что 1Совские формочки можно отрисовывать не только мышкой в конфигураторе, но и генерить программно при отработке текста модуля. А раз так, то и карты в руки.

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

В принципе, если позаморачиваться, можно сделать квайногенератор — функцию, которая превращает в квайн любую другую чистую функцию и позволяет хранить произвольное состояние, к которому вышеупомянутая чистая функция сможет обращаться.

Ага, я подобное делал для Звездных войн в исходном коде: ввел специальне маркеры-комментарии, для разметки данных, кода, параметров (у вас — состояние), а также маркера печати (куда выводить код всего квайна в финальной генерации). Более того, исходный текст может быть написан привычным способом, т.к. там используется минификатор для сокращения идентификаторов, удаления лишних скобок, комментариев и других укорачиващивающих вещей.


Это позволило разрабатывать разные квайны на C#, среди которых квайн-палиндром, часы, игра "Змейка". В теории такой подход можно обобщить на другие языки и попробовать, например, писать квайновые эстафеты.


В репозитории всего этого безобразия Freaky-Sources даже IDE есть :)

О, я помню статью про звёздные войны. И змейку тоже, хоть и не обратил внимания, что у них общий автор.

Польщён, что истинный сотона квайнов заглянул в мои скромные комменты)
квайн, в принципе, может нести произвольную полезную нагрузку. То есть — делать ещё что угодно помимо своей основной функции.

Ну еще язык HQ9+ кроме вывода текста программы (одной инструкцией) позволяет вывести 99-бутылочный тест (другой инструкцией), а также «Hello world» (третьей).
Конечно, не факт, что это можно назвать полезным… Тем более четвертую инструкцию — инкремент внутренней переменной (без возможности вывода).
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории