Spiral , skor: 61921 5127 4715 4655 4191
4.X~>v+^#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v
X * X X X X X X X X X X X X X X X X X X X X X X X X X
! > h y t f V b n j u [ ( 1 3 2 ) ] U J N B F T Y H G
0;vgv*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*vvv****v+^v+^v+^v+^*v++4
X X X X X X X X X X X X X X X X X X X X X X X X X X
v v v v v v v v v v v v v v v v v v v v v v v v v v
Y y J F V u t U [ G H B n 3 N 2 j ) h g f ] ( 1 b T
Seorang juru bahasa dapat ditemukan di sini .
Penjelasan:
P.X~ZZ*v+^#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v
X X X X X X X X X X X X X X X X X X X X X X X X X X
! h y t f V b n j u r d c m k i e s x l o w a z p q
0;vgv*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*****************************************************************vP
X X X X X X X X X X X X X X X X X X X X X X X X X X
v v v v v v v v v v v v v v v v v v v v v v v v v v
z y x w V u t s r q p o n m l k j i h g f e d c b a
Program dimulai pada 0
karakter di baris keempat. Potongan kode pertama yang dijalankan adalah 0;vg
. ;
mengambil nomor sebagai input dan menempatkannya di tumpukan. v
menempatkan apa yang ada di register (nol) ke dalam tumpukan. Ini akan digunakan sebagai penghitung. g
adalah label, ketika tercapai, kontrol melompat ke kemunculan huruf g
dalam kode.
Jadi di sinilah kontrolnya sekarang:
X
v
g
Karena ada spasi putih di semua arah lain, penunjuk instruksi mulai bergerak ke atas.
v
menempatkan nol ke dalam tumpukan, dan X
segera mengeluarkannya dari tumpukan. Karena nilai yang muncul adalah nol, penunjuk instruksi bergerak ke X
(jika tidak akan memperlakukannya sebagai spasi).
Secara default, aliran kontrol dalam mode belok kanan, jadi sekarang ketika mencapai persimpangan, penunjuk instruksi berbelok ke kanan. v
lagi-lagi mendorong angka nol ke tumpukan, *
menambah register dengan satu.
v*v*v
X
v
g
Tempat berikutnya v
apa yang ada di register (nomor 1) ke dalam tumpukan, penunjuk instruksi mencoba untuk berbelok ke kanan, memukul yang berikutnya X
. Nilai yang baru ditambahkan ke stack muncul dan ditempatkan di register. Karena itu bukan nol, X
tidak dimasukkan, dan IP melanjutkan ke yang berikutnya *
di sebelah kanan, lagi-lagi menambah nilai dalam register.
v*v*v*v*v
X X X X X
v v v v v
i h g f e
Ini terjadi berulang-ulang sampai kita mencapai akhir bagian ini dan garis *
s dimulai. Sekarang nilai dalam register adalah 6, yaitu surat g
ASCII dikurangi surat ASCII a
. Maka dengan garis 97 *
detik kami menambah nilai dalam register menjadi 103, yang cocok dengan huruf yang g
ingin kami cetak. v
mendorongnya ke tumpukan, dan P
label lain setelah memukul yang kita lompat ke yang lain P
di baris pertama kode.
Di sini .
muncul nilai dari tumpukan dan mencetaknya sebagai karakter. Setelah itu X
muncul nol asing dari tumpukan, kemudian ~
membandingkan dua nilai yang tersisa di tumpukan (nilai menjadi penghitung dan nilai input). Jika nilainya sama, operator menempatkan nol dalam tumpukan (jika tidak -1 atau 1). Sekali lagi, kontrol mencoba berbelok ke kanan. X
muncul nilai perbandingan dari tumpukan, jika itu nol X
,, dan setelah !
dimasukkan, mengakhiri program.
P.X~ZZ*v+^
X
!
Kalau tidak, IP berlanjut ke Z
, yang merupakan label yang dalam hal ini hanya melompat satu langkah ke kanan. Alasan untuk melakukan ini adalah bahwa melompat menetapkan nilai dalam register kembali ke nol. *
menambah register dan v
menempatkan 1 yang dihasilkan ke dalam tumpukan. +
muncul dua elemen teratas tumpukan (1 dan penghitung), menambahkannya, dan menempatkan hasilnya di tumpukan (pada dasarnya ini menambah penghitung dengan satu). ^
menyalin hasil dari tumpukan ke register tanpa menghapusnya dari tumpukan.
#
mengurangi nilai dalam register dengan satu, v
mendorong nilai yang dikurangi ke stack, IP mencoba untuk berbelok ke kanan, dan X
muncul nilai dari stack. Jika nilainya tidak nol, IP terus bergerak ke timur, menurunkan nilai dalam register, hingga mencapai nol, dan IP memasuki X
cabang.
#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v
X X X X X X X X X X X X X X X X X X X X X X X X X
h y t f V b n j u r d c m k i e s x l o w a z p q
Cabang mengarah ke label yang sesuai dengan nilai penghitung. Setelah memukul label, kontrol melompat ke kemunculan label lainnya di bagian di mana kita mulai dengan label g
, memulai iterasi lain. Seperti halnya g
, nilai dalam register akan bertambah hingga nilai ASCII dari surat yang perlu kita cetak. Kemudian karakter dicetak dan penghitung bertambah, label lain dipilih. Ini terjadi sampai setelah iterasi terakhir penghitung sama dengan input, dan program berakhir.
Edit:
P.X~Zv+^
X *
! Z
Mencapai hal yang sama dengan
P.X~ZZ*v+^
X
!
tetapi dengan spasi yang lebih sedikit.
Edit 2:
vv****v+^v+^v+^v+^*v++P
Dapat digunakan sebagai ganti:
*****************************************************************vP