Seu pássaro está ansioso por algum exercício e está cansado de ficar preso em posições estáticas o tempo todo. Escreva um programa que mostre um pássaro ascii dançando aleatoriamente, atualizando a cada 100ms * n ou 200ms * n, dependendo do movimento da dança. O pássaro sempre começa com o movimento da dança <(")>
.
O programa deve aceitar uma entrada que é um número para multiplicar o intervalo de sono por ( n >= 0 && n <= 50
).
100ms Move
^(")v
v(")^
^(")^
v(")v
200ms Moves
(>")>
<(")>
<("<)
Detalhes Extra
- A aleatoriedade não precisa ser uniforme, mas cada movimento de dança deve ter uma chance razoável de ocorrer (pelo menos 1 em 60 parece justo, tudo bem se o mesmo movimento ocorrer duas vezes seguidas)
- Deve haver apenas um pássaro exibido por vez, não vários pássaros
- Espaço em branco à direita é permitido (mas outros caracteres à direita não são)
- Um pássaro deve ser exibido antes do sono
Exemplo em Python 3
import random, time, sys
birds = """(>")>
<(")>
<("<)
^(")v
v(")^
^(")^
v(")v"""
birds = birds.split()
interval = int(input("Sleep for 100ms*"))
selection = -1
while True:
if selection == -1:
selection = 1
else:
selection = random.randint(0, len(birds)-1)
sys.stdout.write('\r'+birds[selection])
if selection > 2:
time.sleep(0.1*interval)
else:
time.sleep(0.2*interval)
Ganhando
- Este é o código-golfe, pelo menos ganha bytes!
\r
fuga de Lua parece agir exatamente como a\n
. Nem eu posso usaros.execute("cls")
lá. @redstarcoderRespostas:
MATL , 53 bytes
Os movimentos são uniformemente aleatórios.
Abaixo está uma amostra executada com
n = 2
. Ou tente no MATL Online! (O intérprete é experimental. Se não for executado, tente pressionar "Executar" novamente ou atualizar a página).Explicação
fonte
Matlab,
125117 bytesInfelizmente, isso não pode ser exibido no TIO, pois não há "streaming" da saída. Aqui está um gif para uma entrada
1
:Obrigado @LuisMendo por -8 bytes!
fonte
*> <> ,
103101 bytesExperimente aqui! (escrever em
n
pilha inicial ou você receberá um erro)Decidi dar uma facada no meu desafio, pois não havia respostas abaixo de 100 bytes. Coloque
n
na pilha e pronto! Isso reutiliza o(")
caracteres para salvar alguns bytes.Explicação
Inicialização
<vD[3'(")'
Aqui armazenamos
(")
para uso posterior.Seletor de dança
Isso é frequentemente executado para selecionar que tipo de dança vamos gerar.
Há um
v
acimax
e um<
à direita também. Estes fazem ox
com que seja executado novamente se ele tentar mover o IP na direção errada.Gere 100ms de dança
Aqui, geramos e produzimos um dos movimentos de dança de 100ms.
43C - Gere "^" ou "v"
Essa é uma função simples que gera "^" ou "v" e depois retorna. Funciona de maneira semelhante ao seletor de dança, onde há instruções
x
para garantir que o IP se mova apenas para a esquerda ou direita.Gere 200ms de dança
Este é outro que começa com
x
. Ele será separado em duas seções:<(")>
e outra(>")> and <("<)
, porque são duas seções distintas ex
é a única coisa que compartilham.<(")>
Isso basicamente faz o início da
generate 100ms dance
rotina, mas preenche as mãos dos pássaros como em><
vez de uma^v
combinação aleatória . Desta vez, multiplican
por dois também. Isso faz com que tudo seja configurado para utilizar agenerate 100ms dance
rotina para gerar o pássaro inteiro e aguardar 200ms.(>")>
e<("<)
Esta pequena explicação é sobre a geração
(>")>
e<("<)
, emborax
possa enviar o IP para fora dela (explicado abaixo).fonte
JavaScript (ES6) + HTML5:
118116 + 8 = 124 bytesJavascript: 119 bytes
Estou usando os milissegundos desde a época para gerar um número aleatório. Teoricamente, isso sempre geraria o mesmo (conjunto de) número (s), mas um teste no meu PC me deu um resultado bastante aleatório (a maioria dos números apareceu mais ou menos igualmente). Também usando o fato de que elementos html com um ID são adicionados ao objeto de janela global em JavaScript, portanto
document.getElementById()
não é necessário.HTML: 8 bytes
Estou omitindo as aspas aqui e não estou fechando a
b
tag. Não é um html válido, mas todos os navegadores fecham a tag automaticamente de qualquer maneira. Tornei-o ousado porqueb
é um elemento HTML de um caractere e porque a dança do meu pássaro merece ser notada.fonte
PowerShell ,
124117 bytes(Obrigado TimmyD )
Experimente online! (Não que ele funcione no TIO ...)
fonte
$b
e usar um pseudo-ternário para descer para 117 -for(){(-split'^(")v v(")^ ^(")^ v(")v (>")> <(")> <("<)')[($i=0..6|random)];sleep -m((100,200)[$i-gt3]*$args[0]);cls}
... eu acho que é mais curto; Eu ainda estou cutucando isso.Noodel , não competitivo 67 bytes
Esse desafio foi muito difícil para Noodel porque não possui operadores aritméticos inteligentes ou comparativos. Mas depois de fazer esse desafio, acho que o Noodel está pronto para seu primeiro lançamento.
Tente:)
Como funciona
64 bytes
Aqui está uma versão que funciona como um trecho de código.
fonte
Python, 157 bytes
Eu também tentei fazer isso sem a arte ascii de frango, mas isso foi muito mais longo.
fonte
Ruby, 97 + 1 = 98 bytes
+1 byte da
-n
bandeira.fonte
Clojure,
185178 bytes18 bytes porque não estava começando
<(")>
.-7 bytes inlining
birds
e se livrando dolet
.Apenas divide os pássaros em espaços, escolhe um índice aleatório de 0 a 6, exibe o pássaro escolhido e, se o índice escolhido for maior que 2, ele aguarda 100ms, mais 200ms.
Clojure realmente precisa de um
split
método de string no núcleo.Ungolfed:
fonte