Intro
Lass uns Minigolf spielen! Der Golfball wird durch a .
und das Loch durch a dargestellt O
. Sie möchten ein Loch in ein Loch bekommen, aber Sie sind nicht gut im Putten. In der Tat weigern Sie sich, diagonal zu setzen! Nur nach oben, unten und zu beiden Seiten.
Sie planen zu schummeln, indem Sie zusätzliche Stoßstangen platzieren \
und /
so den Ball mit einem Schlag einwerfen. Der Ball springt rechtwinklig von den Stoßfängern ab (siehe Abbildung).
Denken Sie daran, Ihren Schuss zu nennen! Sagen Sie uns, in welche Richtung Sie gehen.
Löcher
1: Das erste Loch ist einfach, ein gerader Schuss! Hier müssen keine Stoßstangen platziert werden.
Eingang:
. O
Ausgabe:
right
. O
2: Ein weiteres grundlegendes, eine kurze Wendung. Der Ball wird von der Stoßstange ins Loch geschlagen.
Eingang:
.
O
Ausgabe:
left
/ .
O
oder
down
.
O /
3: Einige Löcher haben bereits Stoßstangen!
Eingang:
. \O
Ausgabe:
right
. \O
\/
oder
right
/ \
. /\O
4: Einige Löcher sind zu komplex!
Eingang:
/ \ \ /
/ . \ \ /
/ /\/ /\ \ /
/ / / \ \/
/ / /\ \ / \ /
\ \ / \ \/ \/
\ / /
/\ \//\ \ /
/ \ / \ \ \/
\ /\ \ / \ \
\/ \ \/ \ O/ \
/ \/
Ausgabe: (eine mögliche Lösung, mehr existiert)
down
/ \ \ /
/ . \ \ /
/ /\/ /\ \ /
/ / / \ \/
/ / /\ \ / \ /
\ \ / \ \/ \/
/ \ / /
/\ \//\ \ /
\/ \ / \ \ \/
\ /\ \ / \ / \
\/ \ \/ \ O/ \
/ \ \/
\ /
Regeln
- Der Eingang gibt das Minigolfloch an
STDIN
. - Die Ausgabe ist die Richtung, in die Sie den Ball schlagen, und das Minigolf-Loch mit neu platzierten Stoßstangen
STDOUT
. - Bestehende Stoßstangen können nicht verschoben werden.
- Sie können eine beliebige Anzahl von Stoßfängern hinzufügen, um ein Loch zu lösen.
- Angenommen, es gibt gültige Positionen für die zu platzierenden Stoßstangen, an denen der Kurs in einem Putt gelöst werden kann.
- Das ausgegebene Loch ist möglicherweise größer als das eingegebene Loch.
- Die Eingabe kann mit nachgestellten Leerzeichen aufgefüllt werden. Bitte geben Sie dies in Ihrer Antwort an.
- Die Ausgabe muss korrekt aussehen, kann jedoch einen führenden oder nachfolgenden Leerraum enthalten.
- Ihr Programm sollte für jede gültige Lücke funktionieren. Zögern Sie nicht, auch Ihre Testfälle zu posten!
Wertung
Das ist Code-Golf . Ihre Punktzahl ist die Anzahl der Zeichen in Ihrem Programm. Die niedrigste Punktzahl gewinnt!
right
, # 3 Beispiel 1 sollte seindown
und # 3 Beispiel 2 sollte seinup
. Eine interessante Herausforderung!.
ist der Ball, den Sie schlagen, undO
ist das Loch. Ich habe # 2, Beispiel 1, durcheinander gebracht, aber sie sollten jetzt gut sein.Antworten:
Javascript (ES6) - 651 Bytes
Erstellt eine Funktion
G
, die eine Zeichenfolge (Golfplatz) als Eingabe akzeptiert und die angeforderte Putting-Lösung zurückgibt. Die Eingabezeichenfolge kann führende Zeilen, nachfolgende Zeilen und nachfolgende Leerzeichen enthalten oder nicht. Die Ausgabe enthält keine führenden oder nachfolgenden Leerzeichen.Erweiterter Code lautet:
Der Löser geht davon aus, dass jeder Weg von der Kugel (dem Loch) derselbe ist
Wir verfolgen den Weg des Balls in alle vier Richtungen. Wenn wir Fall 3 finden, ist das Problem gelöst. Wenn wir Fall 2 finden, markieren wir den Austrittsort des Balls. Wenn alle vier Richtungen in Fall 1 resultieren, konvertieren wir den ersten Nicht-Stoßfängerraum entlang einer beliebigen Flugbahn in einen Stoßfänger (wenn das Problem lösbar ist, ist ein solcher Raum immer garantiert vorhanden) und versuchen es erneut. Der Stoßfänger, zu dem wir konvertieren, hat den gleichen Typ wie der letzte Stoßfänger, auf den unsere Flugbahn gestoßen ist *. Wenn der Ball immer noch in einer Schleife steckt, wiederholen wir den Vorgang so oft wie nötig. Ist das Problem lösbar, führt dieses Verfahren garantiert zu den Ergebnissen 2 oder 3.
(* Beachten Sie, dass, wenn wir einfach auf einen festen Stoßfänger umrüsten [sagen wir,
\
], es extrem ausgedachte, aber dennoch mögliche gibt Fälle gibt, in denen es eine Lösung gibt, die wir jedoch nicht finden können.)Wir führen eine ähnliche Spur vom Loch aus, die entweder zu Ergebnis 2 oder zu Ergebnis 3 führt.
Wenn sowohl die Kugelspur als auch die Lochspur zu Ergebnis 2 führen, platzieren wir Stoßfänger an der Peripherie des Platzes, die die beiden Austrittspunkte verbinden (tatsächlich werden diese Stoßfänger unabhängig von den Trace-Ergebnissen platziert, um den Code zu verkürzen). Damit ist die Lösung abgeschlossen.
Testfälle und Ausgänge
Im
aus
Im
aus
Im
aus
quelle
"/\\/\\\n\\.//\n// \\\n\\/ \no \\/"