Dessinez un programme ou une fonction qui écrira en STDOUT
n
temps (chacun pour une étape) une chaîne qui contient un point .
à l'emplacement du déambulateur. Le programme doit également écrire une ligne toutes les s
secondes (ou attendre s
quelques secondes après chaque ligne).
Une marche aléatoire est une formalisation mathématique d'un chemin qui consiste en une succession d'étapes aléatoires ( wiki ), de sorte que chaque nouvelle étape sera la dernière étape plus une nouvelle valeur, donc toute t
valeur d'étape n'est que la somme de toutes les valeurs aléatoires avant ir plus la valeur initiale.
Le programme devrait prendre 2 entrées et n'utilisera que des espaces " "
et des points "."
sur la sortie. La valeur de départ du déambulateur sera 20
telle que la sortie devrait être un point après 19 espaces.
. #19 spaces then a dot
À chaque nouvelle étape, la valeur sera la dernière valeur du déambulateur plus une de ces valeurs[-2-1,0,1,2]
(20% de chance chacune). Une fois la nouvelle position imprimée, le programme doit attendre s
quelques secondes et passer à l'étape suivante. Si le pas met le déambulateur hors de portée, 1 to 40
il doit être ignoré et la position du déambulateur reste la même. Le nombre d'espaces sera toujours un nombre compris entre 0 et 39.
Exemple
#input
Mywalk(s = 0.1, n = 30)
#output
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Considérations
Vous pouvez prendre l'entrée dans n'importe quel format raisonnable
Le code le plus court gagne
Ce n'est pas grave si votre programme n'accepte que les secondes sous forme d'entiers
n
c'est le nombre d'étapes?1 to 40
, car le nombre d'espaces est toujoursposition-1
.Réponses:
Pyth, 39
Prend
s
comme première ligne d'entrée etn
comme seconde. Fonctionne sur la ligne de commande mais pas avec l'interpréteur en ligne. Mon premier programme Pyth jamais! Les conseils de golf sont appréciés.la source
Q
etE
pour les deux entrées à la place de fohQ
eteQ
, si vous changez de ligne, séparez les entrées.Matlab, 112
L'idée de base consiste à générer une liste des positions suivantes possibles, puis à dessiner uniformément l'une d'entre elles. Si nous sommes par exemple à la position $ l = 1 $, les étapes possibles seraient
[-1,0,1,2,3]
bien sûr si nous choisissions-1
cela serait invalide et nous devrions rester à la même position. C'est pourquoi nous remplaçons les positions invalides par la position actuelle[1,0,1,2,3]
, puis choisissons au hasard un élément de cette liste mise à jour.Le PO nous a demandé de dessiner le programme, alors c'est parti:
La transcription:
la source
Perl,
136128116 1161061019086Nécessite que les secondes soient un entier.
Courez avec
perl <filename> <second delay> <number of steps>
.Il y a peut-être plus de potentiel de golf ici, mais honnêtement, je suis surpris que cela soit arrivé jusqu'ici. (Allez, seulement 6 octets de plus pour battre la réponse bash ...)
Changements
$s
et$n
et en utilisant simplement le plain$ARGV[0]
et$ARGV[1]
$"
et que je n'avais pas besoin de définir spécifiquement$u
comme$undef
.$x
est utilisé et en utilisant à lamap
place defor
.say
au lieu deprint
.la source
Python 2,
124119 octets@janrn et @Steve Eckert: Je n'ai pas assez de réputation pour commenter votre réponse mais voici essentiellement votre version raccourcie. La tâche consiste à dessiner un programme ou une fonction , donc en utilisant
f(s,x)
vous pouvez enregistrer pas mal de bits, ainsi vous pouvez utilisermax(0,min(x,39))
pour éviter uneif
clause supplémentaire . Je l'ai:la source
Bash, 81
Edit: Si l'étape prend le déambulateur hors de la plage 1 à 40, il doit être simplement ignoré et la position du déambulateur reste la même gérée correctement.
Entrée à partir des options de ligne de commande. Par exemple:
la source
Rubis, 84
la source
Python 2.7,
198162143133 133Lors de l'appel du script avec
python script.py
, la première entrée est la quantité d'étapes, la deuxième entrée le temps entre les étapes (accepte float ou int). Des suggestions d'amélioration?Modifications
print ' '*p+'.'
, grâce à @corsiKlause Ho Ho Ho;
si possiblep=max(1,min(p+r.randint(-2,2),40))
(je ne peux pas commenter votre réponse également, mais merci; je ne veux pas la copier complètement)la source
' '*p
répéter la chaîne?Traitement,
150147Usage:
Remarque:
1000
ne peut pas être remplacé par1e3
pour des raisons de type.la source
Lua, 140 octets
Remarque: ce programme nécessite le package LuaSocket.
la source
Perl 6 , 92 octets
Usage:
la source
JavaScript (ES6), 125 octets
Explication
Tester
Afficher l'extrait de code
la source
k4, 61 caractères
échantillon:
la source
Mathematica,
122117 octetsFonction anonyme récursive, prend les entrées dans l'ordre spécifié. Pourrait probablement être joué au golf plus loin.
la source
Python 3, 154 octets
Générez une chaîne d'espaces supérieure à la longueur maximale requise, puis imprimez cette chaîne UNIQUEMENT jusqu'au caractère à l'index 'g', puis imprimez un '.'. Terminez en incrémentant g d'une valeur aléatoire dans la plage [-2: 2] et répétez.
Si quelqu'un pouvait m'aider à jouer dans cet horrible bloc de saisie, j'apprécierais.
la source
sys.argv
?while z:
, pourquoi ne pas utiliserfor i in range(1,z)
?sys.argv
et l'importation, je ne vois pas comment enregistrer des octets en faisant cela. Et même avec les lignes supplémentaires à déclarerc
puis à décrémenterc
etz
, c'est encore moins cher de le faire de cette façon, à mon avis.C funtion, 114
Une traduction directe de ma réponse bash .
Programme de test complet:
la source