Buzzby Berkeley Robot Hokey Pokey
Görev
Bir Busby Berkeley numarası tarzında Hokey Pokey'in (ya da tercih ederseniz Cokey'nin) sözleriyle dans eden bir robot çizgisini gösteren bir ASCII sanat animasyonu üretmek için bir program ya da işlev yazın!
Örnek çıktı
Giriş
Üç argümanı kabul eder (geçerli olduğu varsayılır):
N = çizgideki robot sayısı (Min = 6)
B = milisaniye cinsinden bir "vuruş" süresi (Min = 10)
D = ardışık robotlar arasında ms cinsinden gecikme (Min = 0)
(Yukarıdaki örnek çıktıda: N = 8, B = 380, C = 75)
Özellikler
N robotlar sahnede üst üste gösterilir.
"Ayet" ten gelen bir metin satırı, sahnenin altındaki bir zamanda gösterilir (1 karakter içinde ortalanır ve tırnak işaretleri içine alınır).
Robotlar, ayet 5 kez tekrarlanıncaya kadar her satır için eylemleri gerçekleştirir.
Bir ASCII karakter kümesi kullanarak bir robotun gösterilmesi ve bir sonraki eylemi gerçekleştirmeden önce belirli bir süre beklenerek bir eylem gerçekleştirilir. Bir eylemin süresi "vuruş" olarak ölçülür. 1 atım süresi milisaniyelik bir sayıdır B .
İlk robot, satırın metni görüntülendiğinde hemen her ayet çizgisi için eylemleri gerçekleştirmeye başlar.
Her takip eden robot , robotun sağındaki (solunuz!) Hareketine başlayan belirli bir zamana ( D ) kadar eylemlerine başlamasını geciktirir .
Robotların tasvirleri, programın her çalıştırılışında rastgele dağıtılan 5 olası türü bulunan bir robotun "antenini" temsil eden ASCII karakterlerine göre değişir.
Her bir anten türü, en az bir robot tarafından kullanılmalıdır, ancak aynı tip, diğer 3 robottan daha az sayıda ayrılmış robotlarda görünmemelidir. İki tür antenin miktarı, 1'den fazla olmamalıdır (ör. 1xType_4 ve 3xType_5'ler 3-1> 1'den beri yasa dışıdır).
Ayet ve Eylemler
Tüm ayet bir defada 5 kez, bir satırda 1 tekrarlanır ...
Line Text Action/Beats,
---- ----------------------------- ------------------------------------
1 You put your ? in ??/4
2 You take your ? out AA/4
3 You put your ? in ??/4
4 And you shake it all about AA/1, ??/1, AA/1, ??/1
5 You do the Hokey Pokey and...
...you turn yourself around AA/1, H[1-7]/1
6 That's what it's all about! AA/4, ZZ/4
Ayetin her tekrarı (R) yerine, yerine? ve ??...
R ?= ??=
-- ----------- ---
1. right foot RF
2. left foot LF
3. right hand RH
4. left hand LH
5. whole self WS
Eylemler ve ASCII desenleri
Her etiketli eylem 5 satır 8 ASCII sembolüyle temsil edilir.
Her eylemin temsili aşağıdaki gibidir ...
1 | 12 12 12 12 12 12 12
2 | [''] [''] [''] [''] [''] [''] \[*-]
3 | └[__]┘ └[__]┘ └[__]┘┌[__]┘ └[__]┐ ┌[__]┐ [__]\
4 | || /< >\ <\ /> / \ /|
5 |--------------------------------------------------------
|\__AA__/\__RF__/\__LF__/\__RH__/\__LH__/\__WS__/\__ZZ__/
1 | 12 12_ 34_ 34 _34 _12 12
2 | [''] [" ] [ _] [__] [_ ] [ "] ['']
3 | >[__]< [_<] [<.] <[..]> [.>] [>_] <[__]>
4 | || |\ || /| || |\ ||
5 |--------------------------------------------------------
|\__H1__/\__H2__/\__H3__/\__H4__/\__H5__/\__H6__/\__H7__/
1. satırda, "1-4" yerine her anten tipine karşılık gelen sembol koyun.
1 | 1234 1234 1234 1234 1234
| \/\/ |┌┐| )||( |||| ┐/\┌ <-- Symbols 1-4 for...
| 1 2 3 4 5 <-- ...antenna types 1-5
Çıktı
Sahnenin içeriği herhangi bir şekilde değiştiğinde, tüm sahne en az bir kere derhal gerçekleştirilmelidir. (Yani, robotların eylemleri arasındaki gecikmenin> 0 olduğunu varsayarsak, çıktı işlem başına N kereden daha az olamaz .)
İdeal olarak, bir animasyon için konsol veya eşdeğer çıktı alanı her güncelleme yapılmadan önce temizlenir. Konsolu temizleyemeyen dilleri sağlamak için, çıkış aynı zamanda yukarıda açıklanan gereksinime bağlı olarak sürekli bir akışta da yapılabilir.
puanlama
Kazananlar, her dilde en kısa programın yanı sıra en genel programlardır.
İstisna 1 Her konsolu temizlemek zorunlu olmasa da tercih edildiği için, bu lüks amaç için özel olarak kullanılan baytlar toplam baytlara sayılmaz. Bu, konsolu temizleme komutlarını ve konsol içeriğini görünüm dışına kaydırmak için boş satırlı doldurma çıkışını içerir.
İstisna 2 CSS veya sadece çıktının minimum gerekliliklerin ötesinde şekillendirilmesi amacıyla kullanılan etkili benzer araçlar, toplam bayt sayılmaz. Örneğin, *{color:blue;text-align:center;}
sadece 32-10 = olarak sayılır 22 bayt yana color:blue;
ortalanmış metin belirtilen ise, herhangi bir özelliği karşılamak için hizmet etmez.
Meta
TRS-80 Dans Demonu , Android Nim ve elbette Busby Berkeley'den (ve hayır, o kadar yaşlı değilim ) esinlendik .