Kennst du Holzspielzeug mit kleinen Kugellagern, bei denen es darum geht, sich im Labyrinth zu bewegen? Das ist irgendwie so. Bestimmen Sie anhand eines Labyrinths und einer Reihe von Zügen, wo der Ball landet.
Das Brett wird vertikal gehalten und die Kugel bewegt sich nur durch die Schwerkraft, wenn das Brett gedreht wird. Jede "Bewegung" ist eine Drehung (im Bogenmaß).
Das Labyrinth besteht einfach aus konzentrischen kreisförmigen Wänden, wobei jede Wand genau eine Öffnung in den äußeren Korridor aufweist (angenommen, diese Wände sind Kreise und nicht spitz):
Wie Sie sehen, beginnt der Ball in der Mitte und versucht auszusteigen. Der Ball wird fallen durch sofort, sobald die korrekte Ausrichtung erreicht wird, auch wenn es auf halben Weg durch eine Drehung. Eine einzelne Drehung kann dazu führen, dass die Kugel durch mehrere Öffnungen fällt. Zum Beispiel ist eine Drehung >= n * 2 * pi
ausreichend, um einem Labyrinth zu entkommen.
Für die Zwecke des Spiels wird ein Ball, der sich im 0.001
Bogenmaß der Öffnung befindet, als "fit" betrachtet und fällt zum nächsten Korridor durch.
Eingang:
Die Eingabe erfolgt in zwei Teilen:
Das Labyrinth wird durch eine Ganzzahl angegeben, die angibt
n
, wie viele Wände / Öffnungen sich im Labyrinth befinden. Daran schließen sichn
Linien mit jeweils einer Nummer an, die den Übergang zum nächsten Korridor darstellen.Die Züge werden als Ganzzahl angegeben, die angibt
m
, wie viele Züge ausgeführt wurden, gefolgt von (wiederum in separaten Zeilen)m
Rotationen des Brettes im Uhrzeigersinn im Bogenmaß (negativ ist gegen den Uhrzeigersinn).
Alle Durchgangspositionen sind 0 rad = up
mit positivem Bogenmaß im Uhrzeigersinn angegeben.
Für das obige Beispielbild könnte die Eingabe folgendermaßen aussehen:
7 // 7 openings
0
0.785398163
3.14159265
1.74532925
4.71238898
4.01425728
0
3 // 3 moves
-3.92699082
3.14159265
0.81245687
Ausgabe:
Geben Sie die Korridornummer aus, in der der Ball endet. Die Korridore sind von der Mitte ausgehend mit einem Index von Null versehen, sodass Sie beginnen 0
. Wenn Sie durch eine Öffnung gehen, befinden Sie sich im Korridor 1
. Wenn Sie das gesamte Labyrinth verlassen, geben Sie eine beliebige Ganzzahl aus>= n
Für die Probeneingabe gibt es drei Züge. Die erste bewirkt, dass der Ball durch zwei Öffnungen fällt . Der zweite findet keine Öffnung und der dritte findet eine . Der Ball befindet sich jetzt im Korridor 3
. Die erwartete Leistung beträgt:
3
Das Verhalten ist für ungültige Eingaben undefiniert. Gültige Eingaben sind wohlgeformt, mit n >= 1
und m >= 0
.
Das Scoring ist Standard-Code-Golf, die niedrigste Anzahl von Bytes gewinnt. Standardlücken sind verboten. Die Eingabe darf nicht fest codiert sein, sondern kann von Standardeingaben, Argumenten, Konsolen usw. übernommen werden. Die Ausgabe kann auf Konsolen, Dateien usw. erfolgen. Sie muss nur irgendwo sichtbar gemacht werden.
1
, würden Sie nur mit großen Löchern arbeiten und keine Kugeln in die Mitte des Lochs springen, wenn sie fallen.Antworten:
Perl
211,191Mit Zeilenumbrüchen und Einrückung zur besseren Lesbarkeit:
Die Anzahl der Züge in der Eingabe wird verworfen, das eof von stdin zeigt das Ende der Züge an.
quelle
JavaScript 200
EDIT : Hier ist ein animiertes Beispiel, das beweist, dass dieser Solver funktioniert: http://jsfiddle.net/F74AP/4/
Die Funktion muss aufgerufen werden, indem die Eingabezeichenfolge übergeben wird.
Hier ist der Aufruf des vom OP gegebenen Beispiels:
Es kehrt
3
wie vorgesehen zurück.quelle