Se faire frapper au genou avec des flèches semble être la blessure de choix en ce moment. À ce titre, je propose le défi de golf suivant.
Vous avez un aventurier qui ressemble à ceci:
O
/|\
/ | \
|
|
/ \
/ \
Étant donné un fichier texte contenant un arc (dessiné comme }
symbole), un ensemble de murs (dessinés comme #
symboles) et un aventurier, écrivez le plus petit code qui calcule l'angle et la vitesse initiale à laquelle vous devez tirer une flèche pour frapper lui dans le genou.
Supposons ce qui suit:
- Chaque caractère du fichier mesure 0,5 x 0,5 mètre.
- La flèche est tirée depuis le centre de la
}
, c'est-à-dire un décalage de0.25m, 0.25m
- La gravité est
10ms^-2
- La flèche pèse
0.1kg
- La flèche est un point, c'est-à-dire que les collisions ne se produisent que lorsque les coordonnées de la flèche pénètrent dans l'un des blocs.
- La vitesse initiale maximale est
50m/s
- L'angle peut être compris entre 0 (droit vers le haut) et 180 (droit vers le bas)
- Frapper n'importe quelle partie de la jambe de l'aventurier est considéré comme un coup au genou.
- Un mur (
#
personnage) occupe un bloc entier de 0,5 mx 0,5 m. - La flèche peut se déplacer sur le "haut" du fichier, mais rien n'empêche l'entrée de commencer par un plafond de
#
caractères. - Vous ne pouvez pas pénétrer les murs avec des flèches.
- Frapper toute autre partie de l'aventurier n'est pas autorisé!
- Vous devriez afficher une erreur s'il est impossible de le frapper au genou.
Exemple d'entrée:
#
} O
# /|\
/ | \
# |
# |
/ \
/ \
N'hésitez pas à poser des questions si vous en avez besoin :)
code-golf
path-finding
Polynôme
la source
la source
#############
...Réponses:
Python, 599 caractères
La
X(K,L)
routine prend une paraboleK=(a,b,c)
représentant y = ax ^ 2 + bx + c et un segment de ligneL=(a,b,c,d)
représentant le segment entre (a, b) et (c, d) . Les obstacles (O
) et la cible (T
) sont représentés comme des segments de ligne. Toutes les distances sont mises à l'échelle par un facteur de 2.L'exemple d'entrée donne la trajectoire suivante (par défaut, la vitesse minimale):
vous pouvez inverser
R
pour obtenir le chemin de vitesse maximum:la source
8**5
de faire 64 Ko)w=v+1
et en remplaçant les 3 instances dev+1
avecw
. Je ne code cependant pas beaucoup Python, donc je peux me tromper.