Mã + dữ liệu hạn chế
Cấu trúc chung nhất cho một quine trông giống như mã giả này:
data = " một phiên bản thoát của toàn bộ chương trình,
với chuỗi này được thay thế bằng một điểm đánh dấu "
chương trình = data.replace (
một biểu thức đánh giá đến điểm đánh dấu nhưng không đề cập đến nó ,
thoát (dữ liệu))
chương trình in;
Cấu trúc này có thể được sử dụng để viết một câu đố (khá ngây thơ) trong hầu hết các ngôn ngữ. Tuy nhiên, nó có xu hướng ghi điểm khá tệ trên hầu hết các hệ thống tính điểm, bởi vì bạn phải viết toàn bộ chương trình hai lần. Tuy nhiên, hầu hết các cấu trúc quine có thể được coi là tối ưu hóa của cái này.
Có một số sự tinh tế cho điều này. Trong một số ngôn ngữ, phần khó nhất khi thực hiện thao tác này là viết mã thoát; trong nhiều ngôn ngữ, việc tạo ra điểm đánh dấu mà không đề cập đến tên của nó là khó khăn; và trong một số ngôn ngữ bí truyền, bạn sẽ phải phát minh ra loại chuỗi ký tự của riêng bạn. Tất cả ba hoạt động có xu hướng không gây ra quá nhiều rắc rối, mặc dù.
Ví dụ: chúng ta có thể viết một câu đố Python thoát khỏi một chuỗi bằng cách sử dụng chuỗi repr
2 ký tự x"
(có thể biểu thị là "x\""
, tức là không sử dụng chuỗi x"
trong biểu diễn chuỗi của chính chuỗi đó) làm điểm đánh dấu:
d='d=x"\nprint(str.replace(d,"x\\"",repr(d)))'
print(str.replace(d,"x\"",repr(d)))