80 karakter genişliğinde bir terminalin içinde yaşıyorsun. Sıkıldın, domino oynamaya karar verdin. Hayır, Scrabble'a benzeyen sıkıcı tür değil, bir saat içinde onları bir saniyede düşmelerini izleyeceğiniz eğlenceli tür.
Terminallerde, domino şunun gibi görünüyor:
| upright domino
\ left-tilted domino
/ right-tilted domino
__ fallen domino
Hepimizin bildiği gibi, eğer eğik bir domino dik bir dokunuşa dokunursa, ikinci domino da eğilir. Bunun tek istisnası iki eğik domino ona dokunmasıdır:
|\ --> \\ /| --> // /|\ --> /|\
Terminalinizin çekim sabitini ayarlayın, böylece bu geçiş 100 ms sürer.
Eğik bir domino başka bir domino veya terminalin duvarları tarafından destekleniyorsa, yolculuğu sona erer.
İçerisindeki eğik dominoların hiçbiri
\||||____||||/__ /|\ /\ /|\ __\||||____||||/
(80 karakter) hareket edecektir, çünkü en dışa eğilmiş iki domino terminalin duvarları tarafından desteklenir ve diğerleri de diğer dominolar tarafından desteklenir.
Ancak, eğer yatırma yönündeki alan boşsa, domino yere düşer:
| \\ --> |__\ // | --> /__|
Terminal. Yerçekimi sabiti. Sen anladın…
Sonunda, soldan hafif bir rüzgâr var, bu yüzden sağ yatırılmış dominolar sol yatırılmış olanlardan daha hızlı düşüyor:
|/ \| --> |__\|
Görev
Bir terminalde domino çalma animasyonunu gösteren bir program / işlev yazın.
Kodunuz aşağıdakileri yapmalıdır:
Dominoların başlangıç durumunu gösteren girdiden bir dize okuyun.
Bu dize en fazla 80 karakter içerecek ve yalnızca yukarıda tanımlanan dominolardan ve boş alanlardan oluşacaktır.
Durumu yazdırın ve 100 ms bekleyin.
Devleti yukarıda açıklandığı gibi dönüştürün.
Durum değiştiyse, 2'ye geri dönün.
Ek kurallar
Giriş dizesinin uzunluğu terminalin genişliğini etkilemez; Dize 80 karakterden kısa olsa bile, terminalin duvarları hala 80 karakterdir.
2. adım her yürütüldüğünde, durum önceki konuma yazılarak aynı konuma yazdırılmalıdır.
Bazı diller tam olarak 100 ms beklemekte olmadığından, 50 ile 1000 ms arasında herhangi bir miktarda beklemekten çekinmeyin.
Standart kod-golf kuralları geçerlidir.
Örnekler
İlk durum için
||\/||
aşağıdakileri yazdırın (biri diğerine):
||\/|| |\\//| \\\/// __\\//__
İlk durum için
/||||\
aşağıdakileri yazdır
/||||\ //||\\ ///\\\
İlk durum için
/|||\
aşağıdakileri yazdır
/|||\ //|\\
İlk durum için
|/ \|/ \|/ \|/ \|
aşağıdakileri yazdırın:
|__\|__\|__\|__\|
İlk durum için (80 karakter)
\||||____||||/__ /|\ /\ /|\ __\||||____||||/
aşağıdakileri yazdır
\||||____||||/__ /|\ /\ /|\ __\||||____||||/
/
ya/|
da göreceksiniz ki kiremit olması gerektiği gibi düşmüyor.