Advertisement
MonsterScripter

CodinGame_2023_08_27__11_45_06__mars_lander.java

Aug 27th, 2023
1,545
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 6.71 KB | None | 0 0
  1. import java.util.*;
  2. import java.io.*;
  3. import java.math.*;
  4.  
  5. class Player {
  6.  
  7.     public static void main(String args[]) {
  8.         Scanner in = new Scanner(System.in);
  9.        
  10.         int surfaceN = in.nextInt(); // le nombre de points utilisés pour dessiner la surface de Mars.
  11.         for (int i = 0; i < surfaceN; i++) {
  12.             int landX = in.nextInt(); // Coordonnée X d'un point de la surface.
  13.             int landY = in.nextInt(); // Coordonnée Y d'un point de la surface. En reliant tous les points ensemble de manière séquentielle, vous formez la surface de Mars.
  14.         }
  15.  
  16.         // Boucle de jeu
  17.         int prevVSpeed = 0;
  18.         while (true) {
  19.             int X = in.nextInt();
  20.             int Y = in.nextInt();
  21.             int hSpeed = in.nextInt(); // la vitesse horizontale (en m/s), peut être négative.
  22.             int vSpeed = in.nextInt(); // la vitesse verticale (en m/s), peut être négative.
  23.             int fuel = in.nextInt(); // la quantité de carburant restante en litres.
  24.             int rotate = in.nextInt(); // l'angle de rotation en degrés (-90 à 90).
  25.             int power = in.nextInt(); // la puissance des fusées (0 à 4).
  26.             rotate = 0; // la zone d'atterrissage est juste en dessous du robot. Vous pouvez donc ignorer la rotation et toujours indiquer 0 en angle de rotation.
  27.             if (vSpeed <= -40) {
  28.                 power = 4;
  29.             }
  30.             if (vSpeed > -40) {
  31.                 power = 0;
  32.             }
  33.             System.out.println(String.format("%d %d", rotate, power));
  34.         }
  35.     }
  36. }
  37.  
  38. /**
  39.  
  40.     Objectif
  41. L'objectif de votre programme est de faire atterrir, sans crash, la capsule "Mars Lander" qui contient le rover Opportunity. La capsule “Mars Lander” permettant de débarquer le rover est pilotée par un programme qui échoue trop souvent dans le simulateur de la NASA.
  42.  
  43. Notez que ce problème peut sembler difficile, mais en réalité il est simple à résoudre. Ce puzzle constitue le premier des trois niveaux, par conséquent, certains contrôles sont présentés mais ne sont pas nécessaires pour résoudre ce premier niveau.
  44.     Règles
  45. Sous forme de jeu, le simulateur place Mars Lander dans une zone du ciel de Mars.
  46.  
  47.     La zone fait 7000m de large et 3000m de haut.
  48.  
  49. Pour ce niveau, Mars Lander se situe au dessus de la zone d’atterrissage, en position verticale, avec aucune vitesse initiale.
  50.  
  51. Il existe une unique zone d'atterrissage plane sur la surface de Mars et elle mesure au moins 1000 mètres de large.Toutes les secondes, en fonction des paramètres d’entrée (position, vitesse, fuel, etc.), le programme doit fournir le nouvel angle de rotation souhaité ainsi que la nouvelle puissance des fusées de Mars Lander:
  52.     Angle de -90° à 90°. Puissance des fusées de 0 à 4.
  53.  
  54. Pour ce niveau, vous n'avez besoin de contrôler que la puissance des fusées : l'angle doit rester à 0.Le jeu modélise une chute libre sans atmosphère. La gravité sur Mars est de 3,711 m/s². Pour une puissance des fusées de X, on génère une poussée équivalente à X m/s² et on consomme X litres de fuel. Il faut donc une poussée de 4 quasi verticale pour compenser la gravité de Mars.
  55.  
  56. Pour qu’un atterrissage soit réussi, la capsule doit :
  57. atterrir sur un sol plat
  58. atterrir dans une position verticale (angle = 0°)
  59. la vitesse verticale doit être limitée ( ≤ 40 m/s en valeur absolue)
  60. la vitesse horizontale doit être limitée ( ≤ 20 m/s en valeur absolue)
  61.  
  62. Souvenez-vous que ce puzzle a été simplifié, ainsi :
  63. la zone d'atterrissage est juste en dessous du robot. Vous pouvez donc ignorer la rotation et toujours indiquer 0 en angle de rotation.
  64. vous n'avez pas besoin de tenir compte des coordonnées de la surface.
  65. il vous suffit que votre vitesse d'atterrissage soit entre 0 et 40m/s.
  66. lorsque la capsule descend vers le sol, la vitesse verticale est négative. Lorsque la capsule s'élève dans les airs, la vitesse verticale est positive.
  67.     Note
  68. Pour ce premier niveau d'introduction, Mars Lander doit passer un unique test.
  69.  
  70. Les validateurs sont différents des tests mais restent très similaires. Un programme qui passe un test passera le validateur correspondant sans problème.
  71.     Entrées du jeu
  72. Le programme doit d'abord lire les données d'initialisation depuis l'entrée standard, puis, dans une boucle infinie, lire depuis l'entrée standard les données relatives à Mars Lander et fournir sur la sortie standard les instructions de mouvement de Mars Lander.
  73. Entrées d'initialisation
  74. Ligne 1 : le nombre surfaceN de points formant le sol de Mars.
  75. Les surfaceN lignes suivantes : un couple d'entiers landX landY donnant les coordonnées d’un point du sol. En reliant les points entre eux de manière séquentielle on obtient la surface de Mars formée de segments. Pour le premier point, landX = 0 et pour le dernier point, landX = 6999.
  76. Entrées pour un tour de jeu
  77. Une ligne unique constituée de 7 entiers : X Y hSpeed vSpeed fuel rotate power
  78. X,Y sont les coordonnées en mètres de la capsule.
  79. hSpeed et vSpeed sont respectivement la vitesse horizontale et la vitesse verticale de Mars Lander (en m/s). Suivant le déplacement de Mars Lander, les vitesses peuvent être négatives.
  80. fuel est la quantité de fuel restant en litre. Quand le fuel vient à manquer, la puissance des fusées tombe à zéro.
  81. rotate est l’angle de rotation de Mars Lander en degré.
  82. power est la puissance des fusées de la capsule.
  83. Sortie pour un tour de jeu
  84. Une ligne unique constituée de 2 entiers : rotate power
  85. rotate est l’angle de rotation souhaité pour Mars Lander. à noter que la rotation effective d’un tour à l’autre est limitée à +/- 15° par rapport à l’angle du tour précedent.
  86. power est la puissance des fusées. 0 = éteintes. 4 = puissance maximum. La puissance effective d'un tour à l'autre est limitée à +/- 1.
  87. Contraintes
  88. 2 ≤ surfaceN < 30
  89. 0 ≤ X < 7000
  90. 0 ≤ Y < 3000
  91. -500 < hSpeed, vSpeed < 500
  92. 0 ≤ fuel ≤ 2000
  93. -90 ≤ rotate ≤ 90
  94. 0 ≤ power ≤ 4
  95. Temps de réponse pour un tour ≤ 100ms
  96. Exemple
  97. Entrée d'initialisation
  98. 6           (surfaceN) Surface faite de 6 points
  99. 0 1500          (landX landY)
  100. 1000 2000   (landX landY)
  101. 2000 500    (landX landY) Début zone de plat
  102. 3500 500    (landX landY) Fin zone de plat
  103. 5000 1500   (landX landY)
  104. 6999 1000   (landX landY)
  105. Aucune sortie attendue
  106. Vous pouvez ignorer ceci mais vous devez toutefois lire les données.
  107. Entrée pour le tour 1
  108. 2500 2500 0 0 500 0 0   (X Y hSpeed vSpeed fuel rotate power)
  109. Sortie pour le tour 1
  110. 0 3
  111. Entrée pour le tour 2
  112. 2500 2499 0 -3 499 0 1  (X Y hSpeed vSpeed fuel rotate power)
  113. Sortie pour le tour 2
  114. 0 3
  115. Entrée pour le tour 3
  116. 2500 2495 0 -4 497 0 2  (X Y hSpeed vSpeed fuel rotate power)
  117. Sortie pour le tour 3
  118. 0 2
  119.  */
  120.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement