Бузби Беркли Робот Хоки Поки
задача
Напишите программу или функцию для создания художественной анимации ASCII, изображающей линию роботов, танцующих под слова Хоки-Поки (или, если хотите, Кокки) в стиле числа Басби-Беркли!
Пример вывода
вход
Принимает три аргумента (предполагается, что они действительны):
N = количество роботов в линии (мин = 6)
B = продолжительность одного "удара" в миллисекундах (мин = 10)
D = задержка в мс между последовательными роботами (мин = 0)
(В приведенном выше примере: N = 8, B = 380, C = 75)
Характеристики
N роботов показаны подряд на сцене.
Одна строка текста из «стиха» отображается за один раз под сценой (по центру с точностью до 1 символа и заключена в кавычки).
Роботы выполняют действия для каждой строки, как показано, пока стих не будет повторен 5 раз.
Действие выполняется изображением робота с использованием набора символов ASCII и ожиданием указанной продолжительности перед выполнением следующего действия. Продолжительность действия измеряется в «битах». Длительность 1 такта является числом миллисекунд, В .
Первый робот начинает выполнять действия для каждой строки стиха сразу после отображения текста строки.
Каждый последующий робот откладывает свои действия до определенного времени ( D ) после того, как робот справа (слева!) Начнет свои действия.
Изображения роботов различаются символами ASCII, которые представляют «антенну» робота, из которых существует 5 возможных типов, распределенных случайным образом при каждом запуске программы.
Каждый тип антенны должен использоваться по крайней мере одним роботом, но тот же тип не должен появляться на любых роботах, разделенных менее чем 3 другими роботами. Количество любых двух типов антенн может отличаться не более чем на 1 (например, 1xType_4 и 3xType_5 недопустимы, поскольку 3-1> 1)
Стих и Действия
Весь стих повторяется 5 раз по 1 строчке за раз ...
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;
не служит для удовлетворения какой-либо спецификации, в то время как указывается центрированный текст.
Мета
Вдохновленный (показывая свой возраст) Танцы Demon TRS-80 , Android Nim , и конечно Басби Беркли (и нет, я не буду не что старый).
Ответы:
Дамы и господа, пожалуйста, поприветствуйте наших любимых
Танцевальная группа Full Frontend-Stack, 1,320
1,3781,4251,495байтJavaScript: 1195 байт | CSS: 103 байта | HTML: 22 байта
Это милый вызов. У этого также есть много особых случаев. Ох, мальчик, так много особых случаев. И эти антенны ...
Он будет работать вечно и перезапустится после выполнения всех действий (
left foot
иright foot
т. Д.).Вы можете попробовать это на jsFiddle или с помощью приведенного ниже фрагмента кода:
Протестировано в Chrome и Firefox на MacOS, Windows 10 и Ubuntu
Правки
createElement
и удален длинный доступ.firstChild
.getElementById
. Это также делает кешированиеdocument
ненужным.||
и&&
с побитовым&
и|
. Благодаря TheLethalCoder .источник
||
а&&
к|
а&
?C #, 1188
13761382байта после исключенияУплотненный:
Немного приятнее форматирование и завершение в исполняемую программу:
Попробуйте онлайн!
mono main.exe 8 400 40
Редактировать 1
Заменено
string.Format(i,j)
сi.Replace("?",j)
сохранением всего 6 байт.Редактировать 2
Полная реконструкция с предложениями из комментариев.
источник
c
небольшой экономии. Я знал, что забыл лучший способ, чемnew string(c,n)
. Тем не менее, теперь, когда я псевдонимS=String
,new S(c,n)
еще короче.JavaScript, 948 байт
Вероятно, плохая форма, чтобы ответить на свой вопрос, но в любом случае ...
Перепробовал всевозможные способы сжатия текста, но большинство получилось дольше, чем оригинал с включенным алгоритмом ключ +. Я уверен, что есть еще более оптимальный способ сжать все это, но я должен где-то провести черту.
Интересно, что поиск дал одну или две идеи для некоторых других проблем, которые я мог бы уточнить и опубликовать позже.
( NB: Содержит некоторые символы в диапазоне 1-31, чьи представления немного странные, когда размещены здесь)
Смотрите полный цикл психоделического танца на CodePen !
источник