Écrivez un programme qui affiche une boule ASCII en mouvement à l' *
intérieur d'un rectangle (20 x 10 caractères, y compris la bordure). La balle ne doit pas traverser le rectangle, par exemple se heurter lorsqu'elle heurte le mur. La scène doit être nettoyée et redessinée toutes les 0,1 secondes et la balle doit se déplacer de 1 caractère dans les directions x et y à chaque image. Le programme le plus court écrit dans n'importe quelle langue gagne.
Exemple de sortie (image 1)
+------------------+
|* |
| |
| |
| |
| |
| |
| |
| |
+------------------+
Exemple de sortie (image 2)
+------------------+
| |
| * |
| |
| |
| |
| |
| |
| |
+------------------+
Exemple de sortie (image 8)
+------------------+
| |
| |
| |
| |
| |
| |
| |
| * |
+------------------+
Exemple de sortie (image 9)
+------------------+
| |
| |
| |
| |
| |
| |
| * |
| |
+------------------+
1080x1920
résolution :)Réponses:
Ruby 1.9, 115 caractères
La logique du mouvement est assez similaire à la réponse de Danko .
Cette version a été testée uniquement sur Linux.
la source
puts"\e[2J"
suffit d'imprimer←[2J
(et une nouvelle ligne) à l'écran.cls
ne fonctionne pas pour moi, mais lesystem ("cls")
fait.Powershell, 144 caractères
Sur la base de l' excellente réponse de Joey , en utilisant le fait que les coordonnées de la balle sont fonction de l'indice de trame (i), donc si vous avez quelque chose comme
x=n-abs(n-(i mod (2*n)))
, x passera de 0 à n, reviendra à 0, et ainsi de suite ...la source
if(-1,18-eq$x){$a*=-1;$x+=2*$a}if(-1,8-eq$y){$b*=-1;$y+=2*$b}
qui a remplacé quatreif
s plus tôt ;-). Mais j'étais sûr qu'il devait y avoir une formule.Python 2, 234
Je suis sûr que cela peut être joué davantage, mais je dois y aller, alors voici ce que j'ai. travaillera plus sur elle plus tard
remarque: fonctionne sur la console de commande Windows. D'autres systèmes d'exploitation peuvent utiliser une commande différente de celle
cls
pour effacer l'écran, commeclear
la source
print "\e[H\e[2J"
travail sur les fenêtres?Ruby (
179174147)EDIT s'est débarrassé de quelques autres caractères:
EDIT a supprimé certains caractères, maintenant 174:
Non golfé:
la source
sleep .1
marcher aussi?SyntaxError: (irb):1: no .<digit> floating literal anymore; put 0 before dot
. Mais j'y reviendrai si j'en ai besoin à l'avenir, merci!?*
au lieu de'*'
, etc.←[2J←[f+------------------+
comme première ligne.$> << "\e[2J\e[f"+f
en'cls';$><<f
(utilisez des astuces pourcls
)JavaScript (275
283)Démo: http://jsfiddle.net/eKcfu/2/
J'ai écrit cela assez rapidement, donc je suis sûr qu'il y a encore beaucoup de place pour l'amélioration. Les suggestions sont les bienvenues :)
Édition 1 : supprimez les appels de fonction séparés inutiles, intégrez-les directement
setInterval
.la source
Haskell, 212 caractères
Utilise une approche plus fonctionnelle pour calculer les coordonnées, en faisant la séquence infinie pour chaque coordonnée séparément puis en les zippant ensemble (lignes 2 et 3). Le reste est le code de dessin.
la source
PowerShell, 184
185215Seulement semi-golfé car mon cerveau ne fonctionne pas correctement quand je suis malade ...
Quelques belles astuces, cependant.
[Modifier]: La boucle sur le champ est beaucoup plus courte.
la source
QBasic (QB64),
178173 octets-5 octets grâce à DLosc
la source
DO ... LOOP
à la placeWHILE 1 ... WEND
et enregistrer 5 octets.Perl 5, 141 caractères
Ne démarre pas dans le coin supérieur gauche comme le fait l'exemple de sortie, mais cela n'est pas indiqué comme une exigence.
la source
Ruby 1.9, 162 caractères
35 caractères timides de la réponse de @ Ventero, mais j'ai été impressionné de pouvoir le faire aussi loin tout en utilisant une approche relativement simple de la logique réelle. Le ^ [est un ESC littéral (1 caractère).
la source
R, 233 caractères
la source
Une autre entrée bash -
213204 caractèresPas vraiment un lauréat, mais c'était quand même amusant. Il utilise des séquences de caractères vt100 pour le dessin. (le code rapporté ici utilise 215 caractères pour la lisibilité, 2 caractères peuvent être supprimés en s'échappant, par exemple '*' -> \ *
la source
Powershell, 139 octets
Inspiré par la réponse de Danko Durbić .
Ce script utilise l'
-replace
opérateur pour dessiner*
à l'intérieur du rectangle.Script moins golfé pour expliquer comment cela fonctionne:
la source
Bash 278
300, 296Le \ e dans la ligne
echo -e "\e[$2;$1H$3"
peut être produit parpour le remplacer. En tant que binaire 0x1b, il est plus court de 3 caractères; Je compte seulement 1 pour "\ e", car seul le logiciel de mise en page me force à utiliser
\e
.la source
$
symboles à l'intérieur((...))
et les remplacerx=$(($x+$p))
par((x+=p))
et de la même manière sur la ligne suivante. (Ils ont également suggéré d'utiliser\e
le caractère d'échappement).\*
pourrait fonctionner en remplacement de"*"
.1,337
besoin d'être verrouillé en place de façon permanente: PTI Basic,
169167 octetsHorriblement lent, mais ça marche.
la source
(X=20)→S
peut être(X=20→S
, et vous pouvez profiter d'Ans pour économiser quelques octets dans la boucle finale de For (je suis positif, les lignes 8 et 9 peuvent être jouées, mais je ne sais pas comment pour le moment."| \ Output(O,1,Ans \ Output(O,20,Ans
devrait marcher.Ans
est un jeton d'un octet , tapé avec2nd
(-)
. Cela finira par économiser un octet, car le|
jeton est de deux octets sur la calculatrice.PHP,
196 186octetsJ'ai supprimé en évitant un débordement d'entier pour économiser 6 octets. Il durera 29 milliards d'années avant de déborder; encore 6,8 ans sur un système 32 bits. Je dirais que c'est acceptable.
Le calcul de la position au lieu de l'ajuster a sauvé beaucoup de choses, en préparant le modèle complet à la fois un autre lot.
Courez avec
-nr
. Nécessite PHP 7.1.panne :
la source