Коди + дані quines
Найбільш загальна структура для лайки виглядає приблизно як цей псевдокод:
data = " версія, що вийшла з усієї програми,
при цьому рядок замінено маркером "
program = data.replace (
вираз, який оцінює маркер, але не згадує його ,
втік (дані)
програма друку;
Ця структура може бути використана для написання (досить наївної) лайки більшості мов. Однак, вона, як правило, оцінює досить погано в більшості балових систем, тому що ви повинні написати всю програму двічі. Однак більшість квітових структур можна вважати оптимізацією цієї.
У цьому є деякі тонкощі. У деяких мовах найважчою частиною виконання цієї операції є написання пропускного коду; багатьма мовами виготовити маркер без зазначення його назви складно; і в деяких езотеричних мовах вам доведеться вигадувати власний різновид літерального рядка. Однак усі три операції, як правило, не викликають особливих проблем.
Наприклад, ми можемо записати Python quine, рятуючись від рядка, використовуючи рядок із repr
2 символами послідовності x"
(який можна представити як "x\""
, тобто не використовувати послідовність x"
у поданні рядка самої рядка) як маркер:
d='d=x"\nprint(str.replace(d,"x\\"",repr(d)))'
print(str.replace(d,"x\"",repr(d)))