Ceci est un mini-golf:
La limite extérieure est un cercle de rayon 10 et de centre (0,0). La limite intérieure est un cercle de rayon 3 et de centre (0,5). Le tee est à (0, -8). Supposons que la balle n'est qu'un point de rayon 0.
La dynamique du ballon est régie par les règles suivantes:
La balle est d'abord frappée avec une énergie de 50, et avec un angle donné.
- L'angle est en dégressivité dans le système de coordonnées cartésiennes, donc 0 ° signifie directement à droite, 90 ° est directement vers le haut, etc.
Lorsque la balle touche le bord du cercle intérieur ou extérieur, elle rebondit sur le cercle en utilisant la loi de réflexion.
La balle perd de l'énergie lorsqu'elle se déplace.
Pour chaque unité de sol qu'il couvre, il perd 1 unité d'énergie.
Chaque fois qu'il rebondit sur un mur, il perd 5 unités d'énergie.
La balle s'arrête soit lorsqu'elle manque d'énergie, soit lorsqu'elle tombe dans le trou.
Si la balle frappe un mur avec <= 5 unités d'énergie, elle s'arrête.
Il tombe dans le trou s'il a une énergie <10 lorsqu'il se trouve à la distance 1 du trou, sinon il continue de bouger.
Défi
Étant donné les coordonnées xy d'un trou, renvoyez un angle auquel vous pouvez frapper la balle pour que la balle tombe dans le trou (si un tel angle existe).
Contribution
Prenez en entrée les coordonnées x et y du centre du trou sous n'importe quelle forme pratique. L'entrée peut provenir de STDIN (ou de l'alternative la plus proche), des paramètres de ligne de commande ou des arguments de fonction.
Production
Imprimer ou renvoyer un angle en degrés auquel la balle peut être frappée du tee de telle sorte que la balle tombe dans le trou. Si un tel angle existe, la sortie doit être dans la plage [0, 360), sinon la sortie doit être -1.