Код + данные квин
Самая общая структура для квайна выглядит примерно так: псевдокод:
data = " экранированная версия всей программы,
с этой строкой заменяется маркером "
program = data.replace (
выражение, которое оценивает маркер, но не упоминает его ,
экранированы (данные))
программа печати;
Эта структура может использоваться для написания (довольно наивного) квин на большинстве языков. Однако на большинстве скоринговых систем он имеет довольно плохие оценки, потому что вам приходится писать всю программу дважды. Тем не менее, большинство структур Quine можно считать оптимизацией этой.
В этом есть некоторые тонкости. В некоторых языках самой сложной частью выполнения этой операции является написание экранирующего кода; на многих языках изготовление маркера без упоминания его названия затруднительно; и в некоторых эзотерических языках вам придется изобретать свой собственный тип строкового литерала. Все три операции, как правило, не вызывают особых проблем.
Например, мы можем написать квинту Python, избегая строки, используя repr
и используя 2-символьную x"
строку последовательности (которая представляется как "x\""
, т.е. не используя последовательность x"
в строковом представлении самой строки) в качестве маркера:
d='d=x"\nprint(str.replace(d,"x\\"",repr(d)))'
print(str.replace(d,"x\"",repr(d)))