Это сайт — моя персональная записная книжка. Интересна мне, по большей части, история, своя жизнь и немного программирование.

Квайн

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

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

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

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

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

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

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

->++>+++>+>+>++>>+>+>+++>>+>+>++>+++>+++>+>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>+>+>++
>>>+++>>>>>+++>+>>>>>>>>>>>>>>>>>>>>>>+++>>>>>>>++>+++>+++>+>>+++>>>+++>+>+++>+>+
+>+++>>>+>+>+>+>++>+++>+>+>>+++>>>>>>>+>+>>>+>+>++>+++>+++>+>>+++>+++>+>+++>+>++>
+++>++>>+>+>++>+++>+>+>>+++>>>+++>+>>>++>+++>+++>+>>+++>>>+++>+>+++>+>>+++>>+++>>
+[[>>+[>]+>+[<]<-]>>[>]<+<+++[<]<<+]>>+[>]+++[++++++++++>++[-<++++++++++++++++>]<.<-<]
5 комментариев
Записки (on-trail.livejournal.com) 2013

Стыдно, но работаю программистом и впервые слышу про квайны. Это что-то важное, я ничего не упустил?

hshhhhh (hshhhhh.name) 2013

Брейнфак это что-то важное? ;)

Евгений Степанищев (bolknote.ru) 2013

Комментарий для on-trail.livejournal.com:

Это что-то важное, я ничего не упустил?

Да ничего особенного, просто программерская развлекуха :)

http://ru.wikipedia.org/wiki/%D0%9A%D1%83%D0%B0%D0%B9%D0%BD_%28%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%29

Vlad528 2013

нельзя не упомянуть эпичный квайн http://habrahabr.ru/post/186782/

Евгений Степанищев (bolknote.ru) 2013

Комментарий для Vlad528:

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