Buzzby Berkeley Robot Hokey Pokey
Tarefa
Escreva um programa ou função para produzir uma animação artística ASCII, representando uma linha de robôs dançando as letras do Hokey Pokey (ou Cokey, se você preferir) no estilo de um número de Busby Berkeley!
Saída de exemplo
Entrada
Aceita três argumentos (considerados válidos):
N = número de robôs na linha (Min = 6)
B = duração de uma "batida" em milissegundos (Min = 10)
D = atraso em ms entre robôs sucessivos (Min = 0)
(No exemplo de saída acima: N = 8, B = 380, C = 75)
Especificações
N robôs são mostrados em uma fileira no palco.
Uma linha de texto do "verso" é mostrada por vez abaixo do palco (centralizada em 1 caractere e entre aspas).
Os robôs executam as ações para cada linha, como é mostrado até que o verso seja repetido 5 vezes.
Uma ação é executada representando um robô usando um conjunto de caracteres ASCII e aguardando uma duração especificada antes de executar a próxima ação. A duração de uma ação é medida em "batidas". A duração de uma batida é um número de milissegundos, B .
O primeiro robô começa a executar as ações para cada linha do verso imediatamente quando o texto da linha é exibido.
Cada robô subsequente atrasa o início de suas ações até um tempo específico ( D ) após o robô à sua direita (sua esquerda!) Iniciar suas ações.
As representações dos robôs variam de acordo com os caracteres ASCII que representam a "antena" de um robô, dos quais existem 5 tipos possíveis, distribuídos aleatoriamente toda vez que o programa é executado.
Cada tipo de antena deve ser usado por pelo menos um robô, mas o mesmo tipo não deve aparecer em nenhum robô separado por menos de três outros robôs. A quantidade de dois tipos de antenas pode diferir em não mais que 1 (por exemplo, 1xType_4 e 3xType_5's são ilegais, já que 3-1> 1)
Verso e Ações
O verso inteiro é repetido 5 vezes, uma linha de cada vez ...
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
Para cada repetição (R) do verso, substitua? e ?? ...
R ?= ??=
-- ----------- ---
1. right foot RF
2. left foot LF
3. right hand RH
4. left hand LH
5. whole self WS
Ações e padrões ASCII
Cada ação rotulada é representada por 5 linhas de 8 símbolos ASCII.
A representação de cada ação é a seguinte ...
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__/
Na linha 1, substitua "1-4" pelo símbolo correspondente a cada tipo de antena ...
1 | 1234 1234 1234 1234 1234
| \/\/ |┌┐| )||( |||| ┐/\┌ <-- Symbols 1-4 for...
| 1 2 3 4 5 <-- ...antenna types 1-5
Saída
A cena inteira deve ser renderizada pelo menos uma vez imediatamente sempre que o conteúdo da cena mudar de alguma maneira. (Ou seja, assumindo que o atraso entre as ações dos robôs é> 0, a saída pode ser renderizada não menos que N vezes por ação.)
Idealmente, para uma animação, o console ou área de saída equivalente é limpo antes de cada atualização ser renderizada. Para fornecer idiomas incapazes de limpar o console, a saída também pode ser renderizada em um fluxo contínuo, sujeito ao mesmo requisito descrito acima.
Pontuação
Os vencedores são os programas mais curtos em cada idioma, e também o mais curto em geral.
Exceção 1 Como a limpeza do console de cada renderização é preferível, embora não obrigatória, os bytes usados exclusivamente para essa finalidade de luxo não contam para o total de bytes. Isso inclui comandos para limpar o console e preenchimento de saída com linhas em branco para rolar o conteúdo do console para fora da vista.
Exceção 2 CSS ou meios efetivamente semelhantes usados exclusivamente com a finalidade de estilizar a saída além dos requisitos mínimos não contam para o total de bytes. Por exemplo, *{color:blue;text-align:center;}
conta como apenas 32-10 = 22 bytes, pois color:blue;
não serve para satisfazer nenhuma especificação, enquanto o texto centralizado é especificado.
Meta
Inspirado por (mostrando minha idade) da dança Demônio TRS-80 , Nim Android e, claro, Busby Berkeley (e não, eu não sou que idade).