Chương trình A :
"iQ ²¯24
G²õ@i'#+Xd"iQ ²¯24
G²õ@i'#+Xd
Chương trình B dài hơn 8kB, lâu đến nỗi liên kết bị đứt, vì vậy tôi sẽ không dán toàn bộ. Đây là một mẫu:
#þ"iQ ²¯24
G²õ@i'#+Xd"iQ ²,#ÿ"iQ ²¯24
G²õ@i'#+Xd"iQ ²,#Ā"iQ ²¯24
G²õ@i'#+Xd"iQ ²
Tôi không thể tìm ra cách để một NUL
byte hoạt động, đó là lý do tại sao chương trình B chỉ có 255 ký tự duy nhất. Chương trình B về cơ bản bao gồm 255 bản sao của một chương trình, trong đó một byte không liên quan duy nhất được thay đổi mỗi lần và 254 lần thực thi đầu tiên bị bỏ qua.
Để giải thích, tôi sẽ bắt đầu với phiên bản A đơn giản hóa này để kết quả B dễ thảo luận hơn.
"iQ ²¯23
3õ@i'#+Xd"iQ ²¯23
3õ@i'#+Xd
Chương trình này dựa trên quine Japt có khả năng tải trọng cơ bản . Chuỗi khi bắt đầu chứa một bản sao của phần còn lại của chương trình, iQ ²
chèn một trích dẫn và sao chép để tạo một chuỗi đại diện cho toàn bộ chương trình, sau đó ¯23
cắt bỏ chính nó và mọi thứ sau nó. Chuỗi kết quả là một chương trình xuất ra Chương trình A :
"iQ ²¯23
3õ@i'#+Xd"iQ ²
Tôi sẽ đề cập đến chuỗi này như U
.
Dòng cuối cùng của A nhân đôi U
một loạt các thay đổi nhỏ mỗi lần. Cụ thể, đối với mỗi số X
trong phạm vi [1...3]
nó ra "#c" + U
nơi c
là nhân vật với charCode X
. Hành vi mặc định của Japt là xuất ra các chuỗi không có dấu ngoặc kép và được phân tách bằng dấu phẩy, vì vậy đây là đầu ra của A Đơn giản hóa của chúng tôi (lưu ý rằng có một byte không thể in được giữa mỗi #
và "iQ
:
#"iQ ²¯23
3õ@i'#+Xd"iQ ²,#"iQ ²¯23
3õ@i'#+Xd"iQ ²,#"iQ ²¯23
3õ@i'#+Xd"iQ ²
Chúng tôi sẽ gọi đây là B Đơn giản hóa .
Đơn giản hóa B có cấu trúc đơn giản, xen kẽ giữa #c
và U
. May mắn cho câu trả lời này, mỗi #c
và U
được xử lý như được phân tách bằng dấu phẩy và trong tình huống này, hành vi của đó là tất cả mọi thứ ngoại trừ cuối cùng U
không có ảnh hưởng đến đầu ra. Phần duy nhất của B được đơn giản hóa ảnh hưởng đến đầu ra là:
"iQ ²¯23
3õ@i'#+Xd"iQ ²
Điều này giống hệt với U
điều chúng ta đã biết đầu ra Đơn giản hóa A.
Sự khác biệt duy nhất giữa Đơn giản A và Chương trình A là thay vì tạo các bản sao cho phạm vi [1...3]
, chương trình thực sẽ tạo các bản sao cho phạm vi [1...256]
. Điều đó dẫn đến 256 phiên bản của #c
mỗi phiên bản có một ký tự khác nhau, mặc dù phiên bản cuối cùng "" là một ký tự nhiều byte nên nó không thêm bất kỳ byte duy nhất nào, nhưng mọi thứ trừ cái cuối cùng U
vẫn bị bỏ qua.