Mesin
Mesin jenis bola bilyar hanya terdiri dari simbol \
_
/
bersama dengan huruf besar dan kecil, spasi, dan nomor 1
.
\
dan /
landai. Bola yang datang dari atas akan dibelokkan ke kanan atau kiri. Untuk kedua landai, jika bola datang dari kedua sisi, itu akan dibelokkan ke bawah.
_
adalah elemen logika. Logika yang dilakukan olehnya adalah bagian komputer yang paling tidak biliar. Pertama, bola yang datang dari kiri atau kanan berlanjut ke arah yang sama. Bola yang datang dari atas akan dihentikan. Kemudian, setelah akhir pelaksanaannya (lihat Menjalankan Mesin di bawah), jika jumlah bola yang melintas / mendarat di atasnya adalah bilangan genap positif, maka satu bola dilepaskan dari bagian bawah elemen.
Ruang tidak melakukan apa pun. Bola apa pun yang datang dari arah mana pun jatuh lurus ke bawah karena gravitasi.
Huruf kecil adalah input. Semua input akan menjadi 1 atau 0 tunggal.
Huruf besar adalah keluaran. Jumlah yang dikeluarkan akan menjadi jumlah bola biliar yang mengenai lokasinya.
Nomor tersebut 1
melepaskan bola bilyar tambahan di lokasi itu. Ini mewakili 1 logis.
Semua karakter selain \_/
menyebabkan bola yang datang dari arah mana pun jatuh lurus ke bawah karena gravitasi.
Bola tidak pernah bergabung, terpecah, atau bertabrakan. Mereka hanya dibuat ketika dilepaskan dari input, a _
, atau a 1
. Mereka hanya hancur ketika mereka jatuh lurus ke atas _
.
Contoh mesin-
1 a
\_/ b
\_/
\/
/\ /
_ _
A B
Tidak akan pernah ada garis kosong di mesin, tetapi _
's mungkin membuatnya tampak bahwa ada garis kosong.
Menjalankan Mesin
Mesin dijalankan dalam lapisan, atau baris. Semua gerakan bola bilyar di lapisan atas dilakukan sebelum sesuatu terjadi pada lapisan kedua.
Mesin
ab
\_A
C
Dijalankan sebagai berikut:
Pertama, ini meminta input a
dalam formulir a:
. Pengguna kemudian akan memasukkan 1 atau 0 (diikuti oleh enter). Itu mengulangi ini untuk input b
. Ini adalah akhir dari lapisan pertama. Saya akan berasumsi bahwa pengguna memasukkan 1 untuk kedua input.
Kemudian jejak jejak bola pertama (dari a
), yang berjalan di sepanjang \
, di _
, ke A
, dan jatuh ke tempat di bawah A
. Ini kemudian menelusuri jalur untuk bola kedua (dari b
), yang langsung menuju ke bawah _
dan berakhir. Ini adalah akhir dari lapisan kedua.
Sekarang, sebelum lapisan ketiga, karena _
telah memiliki dua bola silang di atasnya, ia melepaskan satu bola. Outputnya A
memiliki satu bola silang, sehingga menghasilkan A:1
.
Untuk lapisan ketiga, ia melacak jalur bola pertama (dari _
), yang masuk ke dalam C
dan jatuh lurus ke bawah. Bola kedua (yang jatuh melalui A
) juga jatuh lurus ke bawah.
Sekarang, sebelum lapisan keempat, karena output C
memiliki satu bola yang melewatinya, output C:1
.
Karena lapisan keempat kosong, program berakhir.
Hasil total akan terlihat seperti
a:1 (the user entered the one)
b:1 (same here)
A:1
C:1
Target
Tujuan Anda adalah untuk mengambil mesin dari STDIN dan mensimulasikannya dengan mengambil input dan mencetak hasil cetak yang diperlukan untuk STDOUT. Bagian pertama dari input ke program Anda akan terdiri dari mesin yang akan dijalankan, diikuti oleh baris kosong. Setiap huruf input yang ditemui harus menyebabkan program Anda meminta input dalam bentuk nama input diikuti oleh titik dua. Setiap output harus ditampilkan dalam bentuk nama output, diikuti oleh titik dua, diikuti oleh jumlah bola yang melewati tempat itu.
Ini golf.
Contohnya
Penyeberangan kawat
ab
\/
AB
Gerbang XOR
ab1
\_/
C
Penambah penuh
1 a
\_/ b
\_/
\/
/\
_ __/
\_/
\/c
\\_/
_S1
\ \/
__/
/
_
\__
C
sumber
\_/
?Jawaban:
JavaScript (
392423)Asumsikan mesin diatur dalam variabel yang dipanggil
m
, lalu beri tahu hasil akhir.Sumber sampel (menjalankan mesin adder, lihat riwayat untuk sumber yang kurang golf): http://jsfiddle.net/96yLj/12/
Spoiler:
Sunting 1: Memperbaiki bug dengan bola berlarian
_
tidak termasuk dalamA
untuk kode sampel.sumber
prompt
untuk input danalert
untuk output yang cukup standar untuk JavaScript :-)