You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

EscapeBot.java 2.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. /*
  2. * EscapeBot.
  3. * Eine wichtige Funktion des Rovers ist es, wieder zurück zur Rakete zu finden, damit er dort seine gesammelten Daten speichern kann.
  4. * Die Rakete wird in den Scans als o angezeigt.
  5. * Implementieren Sie eine neue Unterklasse von Bot mit dem Namen EscapeBot, die die Oberfläche nach der Rakete absucht und den Rover dorthin fahren lässt.
  6. * Sie können davon ausgehen, dass bei dieser Aufgabenstellung keine Hindernisse (Wälder, Wasser, Felsen) auftreten.
  7. * Allerdings kennen Sie die Abmessung von Torus III nicht und müssen versuchen, nicht ewig im Kreis zu fahren.
  8. * Natürlich ist Energie auf Torus III knapp. Daher sollten Sie die Rakete mit möglichst wenigen Schritten finden.
  9. * Um Ihre Implementierung zu testen, müssen Sie den Docker-Container mit einem leicht abgewandelten Befehl starten:
  10. * docker run --rm -p 63187:63187 mediaeng/bots escape
  11. * Sie sind mit Ihrem Programm zufrieden? Wie wäre es, einmal im Vergleich zu anderen Teams anzutreten?
  12. * Sie müssen dazu aber entweder auf einem Hochschulrechner arbeiten oder ins VPN gehen.
  13. * Melden Sie sich beim Praktikumsbetreuer, nennen Sie ihm Ihren Teamnamen und die IP-Nummer Ihres teilnehmenden Rechners.
  14. * Lassen Sie sich vom Betreuer Ihres Praktikums die IP-Nummer der gemeinsamen Testumgebung geben und sorgen Sie dafür,
  15. * dass sich Ihr Bot mit dieser Adresse verbinden kann. Warten Sie bitte mit dem Start, bis Sie dazu aufgefordert werden.
  16. * Sobald alle Teams fertig sind, kann der Wettkampf beginnen.
  17. */
  18. public class EscapeBot extends Bot{
  19. String moves = "";
  20. private int spiralNumber = 0;
  21. public static void main(String[] args) {
  22. Bot escapeBot = new EscapeBot(args);
  23. escapeBot.run();
  24. }
  25. protected EscapeBot(String[] args) {
  26. super(args);
  27. }
  28. protected char nextMove(View view) {
  29. boolean rocketDetected = view.data.contains("o");
  30. return rocketDetected ? goToRocket(view) : walkBySpiral(view);
  31. }
  32. private char goToRocket(View view) {
  33. int rowDifference = findRocketRow(view) - (view.width / 2);
  34. return rowDifference < 0 ? '^' : '<';
  35. }
  36. private int findRocketRow(View view) {
  37. return view.data.indexOf('o') / view.width;
  38. }
  39. private char walkBySpiral(View view) {
  40. if (moves.isEmpty()) {
  41. spiralNumber++;
  42. moves += "^".repeat(view.width * spiralNumber) + ">" + "^".repeat(view.width * spiralNumber) + ">";
  43. }
  44. char nextMove = moves.charAt(0);
  45. moves = moves.substring(1);
  46. return nextMove;
  47. }
  48. }