Stackylogic adalah bahasa pemrograman berbasis logika yang saya buat yang menerima 0
dan 1
memasukkan untuk input dan output tunggal 0
atau 1
setelah selesai.
Program Stackylogic terdiri dari garis-garis yang hanya dapat berisi tiga karakter 01?
serta tepat satu <
di akhir salah satu baris. Garis tidak boleh kosong dan garis dengan <
harus memiliki minimal satu 0
, 1
atau ?
sebelum.
Berikut adalah contoh program yang (seperti akan saya jelaskan) menghitung NAND dari dua bit:
1
?<
11
?
0
Setiap baris dalam program Stackylogic dianggap tumpukan , dengan bagian bawah di sebelah kiri dan bagian atas di sebelah kanan. Secara implisit, ada tumpukan kosong (baris kosong) sebelum baris pertama dalam suatu program dan setelah baris terakhir.
The <
, yang akan kita panggil kursor , menandai tumpukan untuk memulai ketika program Stackylogic dijalankan. Eksekusi program Stackylogic berlangsung sebagai berikut:
Lepaskan karakter teratas dari tumpukan yang saat ini ditunjuk kursor.
- Jika karakternya adalah
?
, minta pengguna untuk0
atau a1
dan bertindak seolah-olah itu adalah karakter. - Jika karakternya adalah
0
, pindahkan kursor satu tumpukan ke atas (ke garis di atas garis saat ini). - Jika karakternya adalah
1
, pindahkan kursor satu tumpukan ke bawah (ke garis di bawah garis saat ini).
- Jika karakternya adalah
Jika tumpukan kursor bergerak kosong, output nilai terakhir yang muncul dari tumpukan (selalu a
0
atau1
), dan akhiri program.Lain, jika tumpukan kursor bergerak ke tidak kosong, kembali ke langkah 1 dan ulangi prosesnya.
Perhatikan bahwa program Stackylogic selalu berakhir karena mereka akhirnya harus menguras tumpukan mereka.
Contoh NAND
Dalam program NAND kursor dimulai pada ?
:
1
?<
11
?
0
Kami akan menganggap input pengguna 1
setelah ?
muncul, yang berarti kursor akan turun, membuat program terlihat seperti ini:
1
11<
?
0
Sekarang sebuah dataran 1
berada di bagian atas tumpukan kursor. Ini muncul dan kursor bergerak lagi:
1
1
?<
0
Sekarang anggap input pengguna 0
untuk ?
, yang berarti kursor akan naik:
1
1<
0
Sekali lagi, a 1
ada di tumpukan kursor sehingga kursor muncul dan bergerak ke bawah:
1
<
0
Akhirnya tumpukan kursor kosong, sehingga nilai terakhir muncul 1
,, adalah output dan program berakhir.
Ini akurat untuk gerbang NAND karena 1 NAND 0
ini 1
. Ini tentu saja berfungsi untuk tiga input dua bit lainnya jika Anda ingin memeriksanya.
ATAU Contoh
Program Stackylogic ini mensimulasikan gerbang OR :
?
?<
Sangat mudah untuk melihat bahwa input awal 1
akan mendorong kursor ke tumpukan kosong implisit di bawah baris terakhir, mengakhiri program dan mengeluarkan 1
yang baru saja input.
Untuk input 00
di sisi lain, kursor akan membuat jalan ke tumpukan kosong implisit di atas, mengakhiri program dan mengeluarkan yang terakhir 0
menjadi input.
Tantangan
Tulis program atau fungsi yang menggunakan program Stackylogic sebagai string dan menjalankannya, mencetak atau mengembalikan hasilnya 0
atau 1
.
Setelah ?
itu, Anda dapat meminta pengguna untuk input 0
atau 1
, atau membaca nilai dari string preset 0
's dan 1
yang juga Anda ambil sebagai input. (Ini bisa menjadi input string lain untuk program / fungsi Anda atau Anda bisa saja menganggap baris pertama atau terakhir dari string program akan menjadi aliran input).
Anda dapat mengasumsikan program dan input selalu terbentuk dengan baik. Anda dapat mengasumsikan program input datang dengan satu baris baru (meskipun ingat selalu ada tumpukan kosong implisit di akhir).
Kode terpendek dalam byte menang.
Lebih Banyak Contoh Program
ZERO
0<
ONE
1<
BUFFER
?<
NOT
1
?<
0
AND
?<
?
NAND
1
?<
11
?
0
OR
?
?<
NOR
1
?
00
?<
0
XOR(v1)
?
0
1?<
?
0
XOR(v2)
?
?<
11
?
0
XNOR(v1)
1
?
0?<
1
?
XNOR(v2)
1
?
00
?<
?
MEDIAN(v1)
1
???<
0
MEDIAN(v2)
?
1?<
??
1\???<\0
.
111\???????<\000
.
?\1?<\??
. Atau, inilah implementasi 5-line simetris:?\?0\?<\?1\?