Makine
Bilardo topu tipi bir makine sadece \
_
/
büyük ve küçük harfler, boşluklar ve sayı ile birlikte sembollerden oluşur 1
.
\
ve /
rampalardır. Yukarıdan gelen top, sırasıyla sağ veya sol tarafa saptırılacaktır. Her iki rampa için, eğer bir top her iki taraftan gelirse, aşağı doğru saptırılacaktır.
_
bir mantık öğesidir. Gerçekleştirdiği mantık bilgisayarın bilardo benzeri olmayan kısmıdır. İlk olarak, soldan veya sağdan gelen bir top aynı yönde devam eder. Yukarıdan gelen bir top durdurulacaktır. Daha sonra, yürütme bittikten sonra (bkz.Aşağıdaki Makineyi Çalıştırma), üstünden geçen / inen top sayısı eşit çift sayı ise, elemanın altından tek bir top serbest bırakılır.
Bir boşluk hiçbir şey yapmaz. Herhangi bir yönden gelen toplar yerçekimi nedeniyle düz düşer.
Küçük harfler girişlerdir. Tüm girişler tek bir 1 veya 0 olacaktır.
Büyük harfler çıktılardır. Çıkarılan sayı, yerini vuran bilardo topları sayısı olacaktır.
Sayı 1
, bu yerde ekstra bir bilardo topu serbest bırakır. Mantıksal bir 1'i temsil eder.
Bunun dışındaki tüm karakterler \_/
, herhangi bir yönden gelen herhangi bir topun yerçekimi nedeniyle düz düşmesine neden olur.
Toplar asla birleşmez, ayrılmaz veya çarpışmaz. Yalnızca a _
, veya a girişinden serbest bırakıldığında oluşturulur 1
. Sadece düz bir yere düştüklerinde yok edilirler _
.
Örnek makine
1 a
\_/ b
\_/
\/
/\ /
_ _
A B
Bir makinede hiçbir zaman boş satır olmayacaktır, ancak _
' satırlar boş bir satır olduğunu gösterebilir.
Makineyi Çalıştırma
Bir makine katmanlar veya satırlar halinde çalıştırılır. Üst katmandaki tüm bilardo topu hareketi, ikinci katmanda herhangi bir şey olmadan önce gerçekleştirilir.
Makine
ab
\_A
C
aşağıdaki gibi çalıştırılır:
İlk olarak, a
formdaki girdiyi ister a:
. Kullanıcı daha sonra 1 veya 0 (ardından enter) girecektir. Bunu giriş için tekrarlar b
. Bu ilk katmanın sonudur. Kullanıcının her iki giriş için de 1 girdiğini varsayacağım.
Daha sonra a
, boyunca \
, boyunca _
, içine A
doğru giden ve altındaki noktaya düşen ilk topun (itibaren ) yolunu izler A
. Daha sonra b
, doğrudan aşağıya inen _
ve sona eren ikinci topun (itibaren ) yolunu izler . Bu ikinci katmanın sonu.
Şimdi, üçüncü katmandan önce, _
üzerinde iki top geçtiği için, bir topu serbest bırakır. Çıktının A
üzerinde bir top çapraz vardı, bu yüzden çıktı A:1
.
Üçüncü katman için, ilk topun (itibaren _
) yolunu izler , ki bu da gider C
ve düz düşer. (İçinden geçen A
) ikinci top da aşağıya düşer.
Şimdi, dördüncü katmandan önce, çıktının C
üzerinde bir top hareketi olduğu için çıktılar C:1
.
Dördüncü katman boş olduğundan program sonlandırılır.
Toplam sonuç şöyle görünmelidir
a:1 (the user entered the one)
b:1 (same here)
A:1
C:1
Amaç
Amacınız STDIN'den bir makine almak ve STDOUT'a gereken girdi ve baskı çıktılarını alarak onu simüle etmektir. Programınıza girişin ilk kısmı çalıştırılacak makineden sonra boş bir satırdan oluşur. Karşılaşılan tüm giriş harfleri, programınızın giriş adı ve ardından iki nokta üst üste şeklinde girdi sormasını sağlar. Herhangi bir çıktı, çıktı adı şeklinde ve ardından iki nokta üst üste ve ardından o noktadan geçen top sayısı şeklinde gösterilmelidir.
Bu golf.
Örnekler
Bir tel geçişi
ab
\/
AB
Bir XOR geçidi
ab1
\_/
C
Tam bir toplayıcı
1 a
\_/ b
\_/
\/
/\
_ __/
\_/
\/c
\\_/
_S1
\ \/
__/
/
_
\__
C
\_/
?