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).
Respostas:
Senhoras e senhores, por favor dêem as boas-vindas à nossa adorável
Grupo de dança de pilha de front-end completo, 1.320
1.3781.4251.495bytesJavaScript: 1.195 bytes | CSS: 103 bytes | HTML: 22 bytes
Este é um desafio fofo. Ele também tem muitos casos especiais. Oh garoto, tantos casos especiais. E essas antenas ...
Ele será executado para sempre e reiniciado após a conclusão de todas as ações (
left foot
,right foot
etc.).Você pode experimentá-lo no jsFiddle ou usando o trecho de código abaixo:
Testado no Chrome e Firefox no macOS, Windows 10 e Ubuntu
Edições
createElement
e removeu o acesso longo ao.firstChild
.getElementById
. Isso também tornadocument
desnecessário o armazenamento em cache .||
e&&
com bit a bit&
e|
. Graças a TheLethalCoder .fonte
||
e&&
para|
e&
?C #, 1188
13761382bytes após exceçõesCompactado:
Formatação ligeiramente melhor e envolvida em um programa executável:
Experimente online!
mono main.exe 8 400 40
Editar 1
Substituído
string.Format(i,j)
pori.Replace("?",j)
salvar 6 bytes no geral.Editar 2
Renovação completa com sugestões dos comentários.
fonte
c
uma pequena poupança. Eu sabia que tinha esquecido uma maneira melhor do quenew string(c,n)
. No entanto, agora que eu aliasS=String
,new S(c,n)
é mais curto ainda.JavaScript, 948 bytes
Provavelmente má forma de responder sua própria pergunta, mas de qualquer maneira ...
Tentei de todas as maneiras possíveis para compactar o texto, mas a maioria acabou mais do que o original com o algoritmo chave + incluído. Estou certo de que ainda há uma maneira mais ideal de compactar tudo, mas preciso traçar a linha em algum lugar.
Curiosamente, a pesquisa gerou uma ou duas idéias para outros desafios que eu poderia refinar e publicar mais tarde.
( NB: Contém alguns caracteres no intervalo de 1 a 31 cujas representações são um pouco estranhas quando postadas aqui)
Assista ao ciclo completo de dança psicodélica no CodePen !
fonte