As inscrições para este desafio exibirão uma figura Lissajous rotativa e animada . A aparência da rotação 3d ocorre quando o parâmetro x é sucessivamente mudado de fase em cada quadro.
Entrada:
Os parâmetros a
e b
(conforme o artigo da wikipedia ) serão especificados na linha de comando ou lidos a partir de stdin.
Resultado:
Isso é arte ASCII , portanto, a saída será exibida em uma janela do emulador de terminal ou equivalente. O tamanho da saída pode ser codificado, mas a figura de Lissajous deve ser pelo menos grande o suficiente para preencher uma janela de 80x24.
A taxa de quadros da animação será de aproximadamente 50 qps. Dormir por 20 ms entre cada quadro é bom, desde que o tempo para calcular cada quadro seja pequeno em comparação com o tempo fixo de sono. Se a sua escolha de idioma não puder ser calculada com rapidez suficiente na plataforma escolhida, você precisará calcular o tempo para dormir dinamicamente.
Cada quadro não será exibido até que todo o cálculo desse quadro esteja completo. Não há necessidade de limpar a tela entre cada quadro.
A figura fará uma 2*Pi
rotação completa aproximadamente a cada 4 segundos.
Para cada quadro, uma curva fechada completa deve ser gerada. Pelo menos 1000 pontos devem ser calculados ao longo da curva. Não é necessário desenhar linhas entre os pontos.
Os pontos da curva serão plotados como #
caracteres. O restante da área de exibição ficará em branco / em branco.
Isso é código-golfe , então a resposta mais curta em bytes (considerada aceitável por mim) será o vencedor aceito uma semana após esta postagem.
Resposta de referência não destruída .
Respostas:
Perl - 177
Os coeficientes são passados através de argumentos. O gif acima é produzido a partir de
perl % 2 3
fonte
C (resposta de referência - não jogado)
Saída com
./lissajous 2 3
:C, 257 bytes
Ok, bem, eu também não pude resistir ao golfe. Eu acho que há muito mais golfe a ser feito sobre isso:
fonte
usleep
deseja 20.000 ms, por que não apenassleep
20 anos?usleep(2e4);
?Python 3 - 280
Não tenha um desses gifs animados para você, desculpe. O console do Windows está lento na impressão: P
Não tenho certeza se isso atende aos requisitos de 50fps, mas não tenho certeza se é realmente possível com o Python. Você pode ajustar o 1000 na segunda linha para a quantidade de pontos a serem calculados (a lista é largura de saída, altura de saída, pontos a serem encontrados, progressão por quadro (pi * 2 / n) e ponto inicial). Ou você pode removê-los e especificar na entrada também.
EDIÇÃO MAIS IMPORTANTE: Entrada via stdin, separada por espaço, nova linha terminada. Vai aguardar a sua entrada.
Edição: Screenshot. Altura alterada para 40 para este.
fonte
lissajous.py
e executarpython3 lissajous.py 2 3
deve ser suficiente, certo?stdin
, não os argumentos (falha ao especificar que ... oops). Espaço separado.input()
e adivinhado isso. Agora funciona bem para mim com o 3.2.3. +1C # -
360352 (plataforma cruzada - 332 apenas para Windows)Editado após correção de bug de micro-golfe e arredondamento + sugestão de Ypnypn
Não é exatamente um candidato nesse sentido - e é praticamente uma cópia literal da referência - mas tudo bem. :)
Hog de memória, criando uma nova matriz para cada atualização - originalmente (re) usava um StringBuilder, mas o sacrificava por falta de tempo. Mas pelo menos a atualização leva menos de 1 ms no meu antigo Core2.
Depois de remover um pouco do golfe antigo, que agora prejudica o comprimento, reduzindo-o em 8 caracteres, tentei devolvê-lo ao 360 "poético", revertendo para o dobro em vez da análise int e retornando para 80 * 24 em vez de 1920. No entanto, ainda são apenas 359 - e nenhuma outra adição de caractere em que eu consigo pensar realmente agrega valor ao código. Então, vamos ficar com 352. :-)
Desenrolado (perdeu o código de pré-golfe):
O console do Windows realmente aceita a saída de muitos caracteres nulos, resultando em uma saída (graficamente) idêntica ao uso de um caractere de espaço real - o que permite que alguns caracteres a menos inicializem a matriz de caracteres.
fonte
using C = Console
realmente salvar as personagens?Python 2.7 - 214
Eu acho que vou dar outra olhada nisso. Tenho a sensação de que isso pode ser reduzido ainda mais, mas será difícil atingir a contagem de bytes do Perl. A matemática parece ser minha maior limitação aqui.
Aviso: pode travar qualquer terminal que você estiver usando. Eu testei isso no prompt de comando do Windows com
lissajous.py 2 3
. Devido à rápida gravação no prompt de comando, espere que os quadros pulem um pouco. Isso pode ser resolvido principalmente (ao custo da velocidade) usando um valor maiors
norange(s)
et=2*pi*i
.Eu não uso
\r
ou\b
aqui intencionalmente porque estou executando no Windows e isso custaria caracteres extras.fonte