Votre oiseau a des démangeaisons depuis un peu d'exercice et en a assez d'être coincé dans des positions statiques tout le temps. Écrivez un programme qui montrera un oiseau ascii dansant au hasard, mettant à jour toutes les 100 ms * n ou 200 ms * n selon le mouvement de danse. L'oiseau commence toujours par le mouvement de danse <(")>
.
Le programme doit accepter une entrée qui est un nombre pour multiplier l'intervalle de sommeil par ( n >= 0 && n <= 50
).
100ms se déplace
^(")v
v(")^
^(")^
v(")v
200 ms se déplace
(>")>
<(")>
<("<)
Détails supplémentaires
- L'aléatoire ne doit pas être uniforme, mais chaque mouvement de danse devrait avoir une chance raisonnable de se produire (au moins 1 sur 60 semble juste, c'est OK si le même mouvement se produit deux fois de suite)
- Il ne doit y avoir qu'un seul oiseau à la fois, pas plusieurs oiseaux
- Les espaces de fin sont autorisés (mais les autres caractères de fin ne le sont pas)
- Un oiseau doit être affiché avant le sommeil
Exemple en 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)
Gagnant
- C'est du code-golf donc le moins d'octets gagne!
\r
évasion de Lua semble agir comme un\n
. Je ne peux pas non plusos.execute("cls")
y utiliser . @redstarcoderRéponses:
MATL , 53 octets
Les mouvements sont uniformément aléatoires.
Vous trouverez ci-dessous un exemple d'exécution avec
n = 2
. Ou essayez-le sur MATL Online! (L'interpréteur est expérimental. S'il ne s'exécute pas, essayez à nouveau d'appuyer sur "Exécuter" ou de rafraîchir la page).Explication
la source
Matlab,
125117 bytesMalheureusement, cela ne peut pas être affiché dans TIO car il n'y a pas de "streaming" de la sortie. Voici un gif pour une entrée de à la
1
place:Merci @LuisMendo pour -8 octets!
la source
*> <> ,
103101 octetsEssayez-le ici! (écrivez
n
sur la pile initiale ou vous obtiendrez une erreur)J'ai décidé de tenter mon défi car il n'y avait pas de réponse inférieure à 100 octets. Placer
n
sur la pile et c'est parti! Cela réutilise les(")
caractères pour enregistrer quelques octets.Explication
Initialisation
<vD[3'(")'
Ici, nous stockons
(")
pour une utilisation ultérieure.Sélecteur de danse
Ceci est fréquemment exécuté pour sélectionner le type de danse que nous allons générer.
Il y a aussi un
v
au-dessusx
et un<
à droite. Ceux-ci font que lex
get est réexécuté s'il essaie de déplacer l'IP dans la mauvaise direction.Générez 100ms de danse
Ici, nous générons et émettons l'un des mouvements de danse de 100 ms.
43C - Générez "^" ou "v"
Il s'agit d'une fonction simple qui génère "^" ou "v" puis retourne. Il fonctionne de manière similaire au sélecteur de danse où il contient des instructions
x
pour garantir que l'IP ne se déplace que vers la gauche ou la droite.Générez 200ms de danse
C'est un autre qui commence par
x
. Il sera séparé en deux sections:<(")>
et une autre(>")> and <("<)
, car ce sont deux sections distinctes etx
c'est la seule chose qu'elles partagent.<(")>
Cela fait essentiellement le début de la
generate 100ms dance
routine, mais remplit les mains d'oiseaux au><
lieu d'un^v
combo aléatoire . Il se multiplie égalementn
par deux cette fois. Cela rend tout configuré pour utiliser lagenerate 100ms dance
routine pour sortir l'oiseau entier et attendre 200 ms à la place.(>")>
et<("<)
Cette petite explication concerne la génération
(>")>
et<("<)
, bien que lex
puisse envoyer l'IP en dehors de celle-ci (expliqué ci-dessous).la source
JavaScript (ES6) + HTML5:
118116 + 8 = 124 octetsJavascript: 119 octets
J'utilise les millisecondes depuis l'époque pour générer un nombre aléatoire. Théoriquement, cela générerait toujours le même (ensemble de) nombre (s), mais un test sur mon PC m'a donné un résultat assez aléatoire (la plupart des nombres sont apparus plus ou moins également). Il
document.getElementById()
n'est pas nécessaire non plus d'utiliser le fait que les éléments html avec un identifiant soient ajoutés à l'objet de fenêtre globale en JavaScript .HTML: 8 octets
J'omet les guillemets ici et je ne ferme pas la
b
balise. Ce n'est pas du HTML valide, mais tous les navigateurs ferment automatiquement la balise quand même. Je l'ai mis en gras parce qu'ilb
s'agit d'un élément HTML à un caractère et parce que la danse de mon oiseau mérite d'être remarquée.la source
PowerShell ,
124117octets(Merci TimmyD )
Essayez-le en ligne! (Non pas que cela fonctionnera dans TIO ...)
la source
$b
et utiliser un pseudo-ternaire pour descendre à 117 -for(){(-split'^(")v v(")^ ^(")^ v(")v (>")> <(")> <("<)')[($i=0..6|random)];sleep -m((100,200)[$i-gt3]*$args[0]);cls}
... Je pense que plus court est possible; Je continue de le fouiller.Noodel , non compétitif 67 octets
Ce défi a été très difficile pour Noodel car il ne dispose pas d'opérateurs arithmétiques ou comparatifs intelligents. Mais après avoir relevé ce défi, je pense que Noodel est prêt pour sa première version.
Essayez-le :)
Comment ça marche
64 octets
Voici une version qui fonctionne comme un extrait de code.
la source
Python, 157 octets
J'ai aussi essayé de le faire sans l'art du poulet ascii, mais c'était bien plus long.
la source
Ruby, 97 + 1 = 98 octets
+1 octet du
-n
drapeau.la source
Clojure,
185178 octets+18 octets car cela ne commençait pas par
<(")>
.-7 octets en insérant
birds
, et en se débarrassant dulet
.Il suffit de diviser les oiseaux sur les espaces, de choisir un index aléatoire de 0 à 6, d'afficher l'oiseau choisi, puis si l'index choisi est supérieur à 2, il attend 100 ms, sinon 200 ms.
Clojure a vraiment besoin d'une
split
méthode de chaîne dans le noyau.Non golfé:
la source