Методы реализации кваы - PullRequest
       14

Методы реализации кваы

2 голосов
/ 22 августа 2011

Несколько лет назад я думал о том, как создать программу, которая печатает собственный исходный код, и я предложил следующие два подхода:

  • программа печатает файл .c или .cpp на основе имени исполняемого файла (app1 печатает app1.cpp). но это не удастся, если файл .cpp находится где-то еще.
  • программа "умно" использует строки (я забыл исходный код этого) и печатает сама.

Существует ли какой-либо другой алгоритм, который программа может использовать для печати собственного исходного кода?

Ответы [ 4 ]

2 голосов
/ 22 августа 2011

Как отметил Стив в комментариях, случай 1) обычно не считается квинем, вероятно, потому что его очень тривиально сделать на любом языке, который может выполнять файловый ввод / вывод

, случай 2) - это то, что имеет в виду большинство людейкогда они говорят «quine», «умное использование строк» ​​- это та часть, которой вы хвастаетесь.

в некоторых языках существует третий случай (который также обычно не считается истинным quine, поскольку он дажеболее тривиально, чем случай 1).Если язык позволяет правильно сформировать программу, в которой нет операторов, то эта «пустая» программа обычно ничего не печатает, что, конечно, совпадает с ее исходным кодом.например, скрипт TCL:

напечатает:

;)

2 голосов
/ 22 августа 2011

Я думаю, что ваши два случая охватывают все варианты.Случай (1) охватывает случаи формы «загрузить исходный код программы с внешнего устройства», тогда как случай (2) охватывает случаи вида «программный источник исходного кода».Конечно, вы могли бы рассмотреть гибридный подход, такой как «чтение первой половины программы из файла, а затем генерация второй половины программным способом», но это, похоже, не отличается от того, что вы описали выше.

0 голосов
/ 23 августа 2011
 char*f="char*f=%c%s%c;main()
 {printf(f,34,f,34,10);}%c";
 main(){printf(f,34,f,34,10);}

(в одну строку)

Есть много кодов, подобных этому, в http://www.nyx.net/~gthompso/quine.htm

для меня это лучший способ: назначить код переменной и использовать его повторно.

0 голосов
/ 22 августа 2011

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

...