pengantar
Kipple adalah bahasa pemrograman esoterik berbasis stack yang ditemukan oleh Rune Berg pada Maret 2003.
Kipple memiliki 27 tumpukan, 4 operator, dan struktur kontrol.
Tumpukan
Tumpukan diberi nama a- zdan berisi bilangan bulat bertanda 32-bit. Ada juga tumpukan khusus @,, untuk membuat angka keluaran lebih nyaman. Ketika suatu angka didorong ke atas @, nilai ASCII dari digit angka itu malah didorong sebagai gantinya. (Misalnya, jika Anda menekan 12 ke @, itu akan mendorong 49 dan kemudian 50 ke @.)
Input didorong ke tumpukan input isebelum program dijalankan. Juru bahasa akan meminta nilai untuk disimpan isebelum eksekusi. Setelah eksekusi selesai, semua yang ada di tumpukan ooutput akan ditampilkan sebagai karakter ASCII. Karena ini adalah satu-satunya mekanisme IO Kipple, berinteraksi dengan program Kipple tidak mungkin.
Operator
Operan adalah pengidentifikasi tumpukan atau bilangan bulat 32 bit yang ditandatangani.
Dorong: >atau<
Sintaks: Operand>StackIndentifieratauStackIndentifier<Operand
Operator Push mengambil operan ke kiri dan mendorongnya ke tumpukan yang ditentukan. Misalnya, 12>aakan mendorong nilai 12 ke tumpukan a. a>bakan memunculkan nilai teratas dari tumpukan adan mendorongnya ke tumpukan b. Memunculkan tumpukan kosong selalu mengembalikan 0. a<bsama dengan b>a. a<b>cmuncul nilai paling atas dari bdan mendorong keduanya cdan a.
Menambahkan: +
Sintaksis: StackIndentifier+Operand
Add operator mendorong jumlah item paling atas pada stack dan operan ke stack. Jika operan adalah tumpukan, maka nilainya muncul dari itu. Misalnya, jika nilai teratas tumpukan aadalah 1, maka a+2akan mendorong 3 ke atasnya. Jika akosong, maka a+2akan mendorong 2 ke atasnya. Jika nilai stack paling atas adan b1 dan 2, maka a+bakan muncul nilai 2 dari stack bdan mendorong 3 ke stack a.
Mengurangi: -
Sintaksis: StackIndentifier-Operand
Operator Kurangi bekerja persis seperti operator Tambah, kecuali bahwa itu mengurangi bukan menambah.
Bersih: ?
Sintaksis: StackIndentifier?
Operator Bersihkan mengosongkan tumpukan jika item paling atas adalah 0.
Penafsir akan mengabaikan segala sesuatu yang tidak di samping operator, sehingga program berikut akan bekerja: a+2 this will be ignored c<i. Namun, cara yang tepat untuk menambahkan komentar adalah dengan menggunakan #karakter. Apa pun antara a #dan karakter end-of-line dihapus sebelum eksekusi. Karakter ASCII # 10 didefinisikan sebagai end-of-line di Kipple.
Operan dapat dibagi oleh dua operator, mis. a>b c>b c?Dapat ditulis sebagai a>b<c?.
Program 1>a<2 a+aakan menghasilkan yang aberisi nilai-nilai [1 4](dari bawah ke atas) dan tidak [1 3]. Begitu juga untuk -operator.
Struktur Kontrol
Hanya ada satu struktur kontrol di Kipple: loop.
Sintaksis: (StackIndentifier code )
Selama tumpukan yang ditentukan tidak kosong, kode di dalam tanda kurung yang cocok akan diulang. Loop dapat berisi loop lain. Misalnya, (a a>b)akan memindahkan semua nilai tumpukan ake tumpukan b, meskipun urutannya akan terbalik . Cara yang identik secara fungsional, tetapi lebih elegan untuk melakukan ini adalah (a>b).
Contohnya
100>@ (@>o)
Ini akan menampilkan 100
33>o 100>o 108>o 114>o 111>o 87>o 32>o 111>o 108>o 108>o 101>o 72>o
Ini akan dicetak "Hello World!". Ketika otumpukan sedang di-output, ia mulai memunculkan karakter dari atas tumpukan ke bawah.
#prime.k by Jannis Harder
u<200
#change 200
k<2>m
u-2
(u-1 u>t u>z u<t
(k>e e+0 e>r)
(e>k)
m+1
m>t
m>z
m<t
t<0>z? t?
1>g
(r>b
m+0 m>a
b+0 b>w
(a-1
b+0 b>j
j?
1>s
(j<0>s j?)
s?
(s<0 w+0 w>b s?)
a>t
a>z
t>a
b-1
b>t
b>z
t>b
z<0>t? z?
a?)
b?
1>p
(b<0 b? 0>p)
p?
(p 0>r? 0>p? 0>g)
)
g?
(g m+0 m>k 0>g?)
u?)
(k>@
10>o
(@>o)
)
Ini adalah generator bilangan prima, tapi saya tidak yakin cara kerjanya.
Aturan
Anda harus menulis program / fungsi yang menafsirkan Kipple. Program / fungsi ini dapat memperoleh program Kipple melalui file sumber, atau mendapatkannya melalui STDIN langsung dari pengguna. Jika STDIN tidak tersedia, itu harus mendapatkannya dari input keyboard, dan terus mendapatkan input sampai karakter tertentu yang tidak patut dimasukkan. Misalnya, jika juru bahasa Anda ditulis dalam kode mesin x86, itu akan mendapatkan karakter program Kipple berdasarkan karakter dari keyboard, dan terus melakukannya sampai esc(atau tombol lain apa pun yang tidak memancarkan karakter yang dapat dicetak) ditekan.
Jika ada kesalahan, misalnya kesalahan sintaksis atau stack overflow, ia harus mengakuinya dengan cara tertentu, misalnya dengan mengembalikan 10 sebagai ganti 0 atau pesan kesalahan yang dihasilkan oleh penerjemah / kompiler, TETAPI TIDAK MENCETAK PESAN KESALAHAN .
Aturan reguler lainnya untuk golf kode berlaku untuk tantangan ini.
Kode Anda akan diuji dengan beberapa contoh di arsip sampel Kipple
Ini adalah kode-golf . Kode terpendek dalam byte akan menang. Semoga berhasil!
Perhatikan bahwa ada operator opsional di Kipple,, "tetapi ini bukan bagian dari spesifikasi dan hanya fitur tambahan dalam juru bahasa resmi. Saya belum menyebutkannya di sini sehingga tidak perlu didukung dalam kiriman Anda.
Jika Anda ragu tentang bagian spesifikasi apa pun, Anda dapat memeriksanya dengan juru bahasa resmi yang ditulis dalam bahasa Jawa . Ini akan mengunduh file zip yang berisi program yang dikompilasi dan kode sumber. Ini dilisensikan di bawah GPL.
ijika saya mengambil program sumber dari stdin?