Added task descriptions and removed walkByColumns and walkByCircles

This commit is contained in:
Illia Soloviov 2024-01-07 17:48:14 +01:00
parent 0b5ff137e4
commit 0f5db8bb66
3 changed files with 38 additions and 60 deletions

View File

@ -1,7 +1,22 @@
/*
* EscapeBot.
* Eine wichtige Funktion des Rovers ist es, wieder zurück zur Rakete zu finden, damit er dort seine gesammelten Daten speichern kann.
* Die Rakete wird in den Scans als o angezeigt.
* 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.
* Sie können davon ausgehen, dass bei dieser Aufgabenstellung keine Hindernisse (Wälder, Wasser, Felsen) auftreten.
* Allerdings kennen Sie die Abmessung von Torus III nicht und müssen versuchen, nicht ewig im Kreis zu fahren.
* Natürlich ist Energie auf Torus III knapp. Daher sollten Sie die Rakete mit möglichst wenigen Schritten finden.
* Um Ihre Implementierung zu testen, müssen Sie den Docker-Container mit einem leicht abgewandelten Befehl starten:
* docker run --rm -p 63187:63187 mediaeng/bots escape
* Sie sind mit Ihrem Programm zufrieden? Wie wäre es, einmal im Vergleich zu anderen Teams anzutreten?
* Sie müssen dazu aber entweder auf einem Hochschulrechner arbeiten oder ins VPN gehen.
* Melden Sie sich beim Praktikumsbetreuer, nennen Sie ihm Ihren Teamnamen und die IP-Nummer Ihres teilnehmenden Rechners.
* Lassen Sie sich vom Betreuer Ihres Praktikums die IP-Nummer der gemeinsamen Testumgebung geben und sorgen Sie dafür,
* dass sich Ihr Bot mit dieser Adresse verbinden kann. Warten Sie bitte mit dem Start, bis Sie dazu aufgefordert werden.
* Sobald alle Teams fertig sind, kann der Wettkampf beginnen.
*/
public class EscapeBot extends Bot{ public class EscapeBot extends Bot{
String moves = ""; String moves = "";
private boolean goesForward = true;
private int circleNumber = 0;
private int spiralNumber = 0; private int spiralNumber = 0;
public static void main(String[] args) { public static void main(String[] args) {
@ -25,33 +40,6 @@ public class EscapeBot extends Bot{
private int findRocketRow(View view) { private int findRocketRow(View view) {
return view.data.indexOf('o') / 5; return view.data.indexOf('o') / 5;
} }
private char walkByColumns() {
if(moves.isEmpty()){
moves = "^".repeat(28);
moves += (goesForward ? ">^^^^^>" : "<^^^^^<");
goesForward = !goesForward;
}
char nextMove = moves.charAt(0);
moves = moves.substring(1);
return nextMove;
}
private char walkByCircles(){
if (moves.isEmpty()) {
circleNumber++;
moves += "^".repeat(5) + ">";
int[] steps = {5, 10, 10, 10};
for (int step : steps) {
moves += "^".repeat(step * circleNumber) + ">";
}
moves += "^".repeat(5 * circleNumber) + "<";
}
char nextMove = moves.charAt(0);
moves = moves.substring(1);
return nextMove;
}
private char walkBySpiral(){ private char walkBySpiral(){
if (moves.isEmpty()) { if (moves.isEmpty()) {

View File

@ -1,3 +1,11 @@
/*
* RumbleBot.
* Der Rover ist auch mit einem Geschütz ausgestattet, dass nur in Fahrrichtung feuern kann.
* Der Feuerbefehl ist f. Die Reichweite des Geschützes entspricht der Scanreichweite.
* Wälder, Felsen und Wasser blockieren Schüsse.
* Der Rover ist beim ersten Treffer zerstört. Wer überlebt am längsten?
* docker run --rm -p 63187:63187 mediaeng/bots rumble
*/
public class RumbleBot extends Bot{ public class RumbleBot extends Bot{
private String moves = ""; private String moves = "";
public static void main(String[] args) { public static void main(String[] args) {

View File

@ -1,7 +1,17 @@
/*
* SnakeBot.
* Eine weitere wichtige Funktion des Rovers ist es, Gesteinsproben zu sammeln.
* Interessante Steine sind im Scan mit einem @ gekennzeichnet.
* Mit jeder aufgesammelten Gesteinsprobe wird an den Rover ein Wagen angehängt, der zukünftig hinter dem Rover mitgezogen wird.
* Die Wagen sind im Scan mit * zu identifizieren.
* Vorsicht: fährt der Rover in einen Wagen, ist er schwer beschädigt und kann keine weiteren Steine mehr sammeln.
* Sie können Ihre Implementierung wieder testen mit:
* docker run --rm -p 63187:63187 mediaeng/bots snakes
* Für diese Funktion wird am 7.2.24 in einer gemeinsamen Arena mit allen Teams des Jahrgangs ein Wettbewerb durchgeführt.
* Die besten acht Teams qualifizieren sich für die Königsdisziplin Rumble.
*/
public class SnakeBot extends Bot{ public class SnakeBot extends Bot{
String moves = ""; String moves = "";
private boolean goesForward = true;
private int circleNumber = 0;
private int spiralNumber = 0; private int spiralNumber = 0;
private boolean ignoreStone = false; private boolean ignoreStone = false;
public static void main(String[] args) { public static void main(String[] args) {
@ -12,7 +22,7 @@ public class SnakeBot extends Bot{
protected SnakeBot(String[] args) { protected SnakeBot(String[] args) {
super(args); super(args);
} }
//@TODO //@TODO Find a better way to avoid collectedStones
protected char nextMove(View view){ protected char nextMove(View view){
boolean stoneDetected = view.data.contains("@"); boolean stoneDetected = view.data.contains("@");
char nextMove; char nextMove;
@ -68,34 +78,6 @@ public class SnakeBot extends Bot{
return view.data.indexOf('@') / 5; return view.data.indexOf('@') / 5;
} }
private char walkByColumns() {
if(moves.isEmpty()){
moves = "^".repeat(28);
moves += (goesForward ? ">^^^^^>" : "<^^^^^<");
goesForward = !goesForward;
}
char nextMove = moves.charAt(0);
moves = moves.substring(1);
return nextMove;
}
private char walkByCircles(){
if (moves.isEmpty()) {
circleNumber++;
moves += "^".repeat(5) + ">";
int[] steps = {5, 10, 10, 10};
for (int step : steps) {
moves += "^".repeat(step * circleNumber) + ">";
}
moves += "^".repeat(5 * circleNumber) + "<";
}
char nextMove = moves.charAt(0);
moves = moves.substring(1);
return nextMove;
}
private char walkBySpiral(){ private char walkBySpiral(){
if (moves.isEmpty()) { if (moves.isEmpty()) {
spiralNumber++; spiralNumber++;