> <> , 56 byte
^
.
+
8
f
0
o
a
o
~
:
?
~
:
?
:
-
*
4
8
:
^
^
}
*
3
d
'
Cobalah online! atau verifikasi semua mutasi .
Cara kerja program asli (kedaluwarsa)
Penerjemah dimulai dalam sel (0, 0) . ^
mengatur arah ke atas , sehingga penunjuk instruksi (IP) membungkus ke sel (0, 20) .
'
mengaktifkan mode string: sampai yang berikutnya '
ditemui, semua karakter di bawah IP didorong pada stack. Hal yang sama '
ditemukan lagi setelah membungkus, jadi kami mendorong
d3*}^^:84*=?~oao0f.^
IP mendarat di (0, 19) , masih naik. Menjalankan d3*}
dorongan 13 = 0xd , lalu 3 , mengalikan kedua nilai ( 39 / kutipan tunggal ), kemudian memutar tumpukan ke kanan. Ini meninggalkan tumpukan sebagai berikut.
'd3*}^^:84*=?~oao0f.^
Dua instruksi selanjutnya ( ^
) tidak melakukan apa-apa pada saat ini.
:84*=
menduplikasi bagian atas tumpukan, mendorong 8 dan 4 , mengalikannya ( 32 / spasi ), kemudian menguji karakter yang digandakan untuk kesetaraan dengan ruang . Untuk program yang tidak diubah, ini akan selalu menekan 0 .
?
melewatkan instruksi berikutnya jika bagian atas tumpukan salah. Untuk program asli, selalu begitu, jadi ~
selalu dilewati.
oao
muncul dan cetak bagian atas tumpukan, tekan 10 / linefeed , kemudian muncul dan cetak linefeed .
Akhirnya 0f.
melompat ke sel (0, 15) (paling bawah ^
), mulai dari awal dengan karakter berikutnya di stack.
Setelah tumpukan kosong, seluruh kode sumber telah dicetak. :
akan gagal dan program keluar.
Cara kerja program yang dimutasi (ketinggalan jaman)
Menggandakan karakter non-linefeed hanya akan memperluas program secara horizontal. Karena program dijalankan secara vertikal, instruksi tambahan ini tidak akan pernah dijalankan.
Menduplikasi setiap linefeed sebelum bottomost ^
akan menggeser sel (0, 14) dan (0, 15) menjadi (0, 15) dan (0, 16) . 0f.
sekarang akan melompat ke sel sebelum ujung ^
, yang juga merupakan ^
, sehingga program tidak terpengaruh oleh perubahan itu.
Akhirnya, karakter linefeed yang digandakan juga akan mengubah string. Garis pendek yang diisi dengan spasi, sehingga 32 / ruang akan disisipkan pada posisi linefeed ini. 84*=
akan mendorong 1 untuk ruang, jadi ?
jangan lewati instruksi berikutnya. Dalam hal ini, ~
muncul dan buang ruang , jadi yang berikut ini o
akan mencetak karakter di atas ruang sebagai gantinya.
0
dan00
di CJam kedua output0
.