(:a~*(*S)):a~*(*S)*S
Cobalah online!
Penjelasan
Quine dasar dalam Underload adalah ini:
(:aSS):aSS
Inilah cara kerjanya:
Stack: Output:
(:aSS) # Push string. (:aSS)
: # Duplicate. (:aSS) (:aSS)
a # Wrap in (...). (:aSS) ((:aSS))
S # Print. (:aSS) (:aSS)
S # Print. (:aSS):aSS
Masalah pertama adalah mengurangi jumlah yang S
kita butuhkan, karena kita hanya punya 3 untuk digunakan di sini. Kita dapat melakukan ini dengan memanfaatkan swapping ( ~
) dan concatenation ( *
):
(:a~*S):a~*S
Di sini, alih-alih mencetak dua kali, kami menyatukan (...)
versi dan versi polos dari string dan mencetaknya hanya sekali.
Teka-teki yang lebih besar adalah bagaimana mencetak angka ganjil *
dan S
. Saya bahkan tidak yakin bagaimana saya benar-benar sampai pada solusi akhir, tetapi ternyata kita bisa melakukan ini dengan meletakkan ekor output dalam string yang terpisah. String itu sendiri digandakan dalam string pertama, tetapi isinya tidak, yang memberi kita kemunculan ekstra *
dan S
kita butuhkan. Berikut adalah pemecahan dari solusi terakhir:
Stack: Output:
(:a~*(*S)) (:a~*(*S))
: (:a~*(*S)) (:a~*(*S))
a (:a~*(*S)) ((:a~*(*S)))
~ ((:a~*(*S))) (:a~*(*S))
* ((:a~*(*S)):a~*(*S))
(*S) ((:a~*(*S)):a~*(*S)) (*S)
* ((:a~*(*S)):a~*(*S)*S)
S (:a~*(*S)):a~*(*S)*S