Квайн

На «Хабре» месячник квайнов — это такие программы, которые выводят сами себя, причём при этом нельзя использовать никакие возможности языка, чтобы получить доступ к тексту программы.

Я вспомнил как написал свой первый и последний в жизни квайн.

Это было когда я ещё учился в Университете, я тогда подрабатывал лаборантом и как раз сидел в классе, за которым присматривал, перед компьютером, когда прибежал мой друг С. О., он учился курсом старше, но мы дружили — он переехал в Казань из того же города, что и я.

Была короткая перемена между парами и преподаватель что-то там пообещал (зачёт, наверное) тому, кто напишет квайн на Турбо Паскале за этот перерыв. Вот мой друг тогда и попросил для него её написать.

До сих пор помню какой принцип я тогда придумал для решения этой задачи. В общих чертах, конечно.

Я оформил программу как требует Паскаль (он довольно многословный) и сделал в нём вывод переменной. Потом в эту переменную я записал всю эту программу в одну строку, заменяя символы перевода строк, где они встречались на #10#13 (так в Турбо Паскале можно было записывать символы через их код, 10 и 13 — десятичные коды символов перевода строки в ДОСе) и потом как-то её удвоил до вывода на экран. Что-то в этом роде, точнее не помню, но программа работала.

Кстати, существует квайн на языке Брейнфак, занимающий всего 410 байт, вот он весь:

->++>+++>+>+>++>>+>+>+++>>+>+>++>+++>+++>+>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>+>+>++
>>>+++>>>>>+++>+>>>>>>>>>>>>>>>>>>>>>>+++>>>>>>>++>+++>+++>+>>+++>>>+++>+>+++>+>+
+>+++>>>+>+>+>+>++>+++>+>+>>+++>>>>>>>+>+>>>+>+>++>+++>+++>+>>+++>+++>+>+++>+>++>
+++>++>>+>+>++>+++>+>+>>+++>>>+++>+>>>++>+++>+++>+>>+++>>>+++>+>+++>+>>+++>>+++>>
+[[>>+[>]+>+[<]<-]>>[>]<+<+++[<]<<+]>>+[>]+++[++++++++++>++[-<++++++++++++++++>]<.<-<]

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

Записки (on-trail.livejournal.com) № 1
Стыдно, но работаю программистом и впервые слышу про квайны. Это что-то важное, я ничего не упустил?
Vlad528 № 4
нельзя не упомянуть эпичный квайн http://habrahabr.ru/post/186782/
Евгений Степанищев (bolknote.ru) автор № 5
На «Хабре» была статья о том как такой квайн делать. Я её бегло просмотрел, у меня сложилось впечатление, что это даже возможно автоматизировать.