Bir dizi dört nota çalabilecek krankla çalışan bir müzik kutum var. Krank çevirdiğimde, krankın konumuna ve dönüşün yönüne bağlı olarak dört dizeden birini tıkar. Krank nedeniyle kuzeye çevrildiğinde, kutu (1'den 4'e kadar olan dizeleri ile) şöyle görünür:
1 | 2
|
O
4 3
Oradan, # 2 dizesini koparmak ve krankın doğuya doğrultmak için krankı saat yönünde çevirebilirim:
1 2
O---
4 3
Alternatif olarak, # 1 ipi çalmak için krankı saat yönünün tersine çevirip, krank işaretini batıya bakabilirdim:
1 2
---O
4 3
Herhangi bir zamanda, kutu iki kutudan birini çalabilir: saat yönünde yönünde bulunan bir sonraki nota veya saat yönünün tersine bir sonraki nota.
Meydan okuma
Buradaki zorluk, boş olmayan bir not değerleri dizisini (yani sayılar 1
arasında 4
) kabul eden bir program veya işlev yazmak ve bu nota dizisini müzik kutusunda çalmanın mümkün olup olmadığını tespit etmektir. Girdinin oynanabilirliğini veya oynanabilirliğini belirtmek için bir gerçek veya sahte sonuç üretin.
Bazı notlar:
Giriş, başlangıç başlangıç konumu hakkında varsayımda bulunmaz. Girişler
214
(doğudan başlayarak ve saat yönünün tersine tam olarak hareket eden) ve234
(kuzeyden başlayarak ve saat yönünde tam olarak saat yönünde hareket ederek) ve her ikisi de geçerlidir.Krank, her nottan sonra her iki yönde de serbestçe hareket edebilir. Aynı nota bir dizi (örneğin,
33333
) bir dize boyunca ileri geri hareket ettirilerek mümkündür . Seri1221441
mükemmel oynanabilir (batıdan başlayarak saat yönünde iki adım, sonra saat yönünün tersine üç adım, sonra saat yönünde iki adım).
Numuneler
Bazı true
durumlar:
1
1234
1221
3333
143332
22234
2234
22214
1221441
41233
Bazı false
durumlar:
13 (note 3 is never available after note 1)
1224 (after `122`, the crank must be north, so 4 is not playable)
121 (after `12` the crank is east; 1 is not playable)
12221 (as above, after `1222` the crank is east)
43221