Робот Hokey Pokey
Завдання
Напишіть програму чи функцію для створення арт-анімації ASCII із зображенням ліній роботів, які танцюють під тексти пісень Hokey Pokey (або Cokey, якщо вам зручніше) у стилі номера Busby Berkeley!
Приклад Вихід
Вхідні дані
Приймає три аргументи (вважається дійсними):
N = кількість роботів у рядку (Min = 6)
B = тривалість одного "удару" в мілісекундах (Min = 10)
D = затримка в мс між послідовними роботами (Min = 0)
(У наведеному вище прикладі: N = 8, B = 380, C = 75)
Технічні умови
N роботів не відображаються послідовно на сцені.
Один рядок тексту з "вірша" відображається за часом під сценою (з центром до 1 символу та укладений у лапки.)
Роботи виконують дії для кожного рядка так, як це показано, поки вірш не повториться 5 разів.
Дія виконується шляхом зображення робота з використанням набору символів ASCII та очікування визначеної тривалості перед виконанням наступної дії. Тривалість дії вимірюється "ударами". Тривалість 1 такту є числом мілісекунд, В .
Перший робот починає виконувати дії для кожного рядка вірша негайно, коли відображається текст рядка.
Кожен наступний робот затримує починати свої дії до того моменту, коли певний час ( D ) після того, як робот праворуч (зліва!) Розпочне свої дії.
Зображення роботів різняться залежно від символів ASCII, які представляють "антену" робота, з яких існує 5 можливих типів, розподілених випадковим чином кожного разу, коли програма запускається.
Кожен тип антени повинен використовувати щонайменше один робот, але той самий тип не повинен з’являтися на жодних роботах, розділених менше ніж на 3 інших роботах. Кількість антен двох типів може відрізнятися не більше ніж на 1 (наприклад, 1xType_4 та 3xType_5's заборонено, оскільки 3-1> 1)
Вірш і дії
Весь вірш повторюється 5 разів, по одному рядку за один раз ...
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
За кожне повторення (R) вірша, підставити? і ?? ...
R ?= ??=
-- ----------- ---
1. right foot RF
2. left foot LF
3. right hand RH
4. left hand LH
5. whole self WS
Дії та шаблони ASCII
Кожна мічена дія представлена 5 рядками з 8 символів ASCII.
Представлення кожної дії полягає в наступному ...
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 замініть "1-4" відповідним символом для кожного типу антени ...
1 | 1234 1234 1234 1234 1234
| \/\/ |┌┐| )||( |||| ┐/\┌ <-- Symbols 1-4 for...
| 1 2 3 4 5 <-- ...antenna types 1-5
Вихідні дані
Вся сцена повинна бути відображена хоча б раз негайно, коли зміст сцени будь-яким чином змінюється. (Тобто, якщо затримка між діями роботів становить> 0, вихід може бути наданий не менше N разів за дію.)
В ідеалі для анімації очищається консоль або еквівалентна область виводу перед кожним оновленням. Для забезпечення мов, які не можуть очистити консоль, висновок також може бути наданий у безперервному потоці, за умови тієї ж вимоги, що описана вище.
Оцінка балів
Переможці - це найкоротші програми з кожної мови, а також найкоротші загальні.
Виняток 1 Оскільки для очищення консолі кожен рендер є кращим, хоча і не вимагається, байти, що використовуються виключно для цієї розкішної мети, не враховуються до загальних байтів. Сюди входять команди очищення консолі та виведення пустих рядків для прокручування вмісту консолі з виду.
Виняток 2 CSS або фактично подібні засоби, що використовуються виключно для стилізації виходу за межі мінімальних вимог, не враховуються до загальних байтів. Напр. *{color:blue;text-align:center;}
, Налічується лише 32-10 = 22 байти, оскільки color:blue;
він не служить для задоволення жодних специфікацій, тоді як текст в центрі вказаний.
Мета
Натхненний (показуючи свій вік) TRS-80 Dancing Demon , Android Nim , і звичайно Busby Berkeley (та ні, я не такий уже й старий).