Bestimmen Sie anhand der Seitenansicht eines Minigolfplatzes und der Schlagkraft, ob der Ball es in das Loch schafft.
Ein Kurs wird in diesem Format sein:
____ ____ _
__/ \ / U \
__/ \ / \_
\_/
Der Ball beginnt direkt vor dem ersten Stück Boden links und folgt der Kontur des Platzes, bis er das Loch erreicht (ein Großbuchstabe U
unterhalb des aktuellen Bodenniveaus). Wenn es das Loch erreicht, geben Sie einen Wahrheitswert aus. Die Kraft des Schwungs ist die Anfangsgeschwindigkeit des Balls. Der Ball bewegt sich bei jeder Iteration zum nächsten Zeichen rechts, dann ändert sich die Geschwindigkeit in Abhängigkeit von dem Zeichen, auf dem er sich gerade befindet. Wenn die Geschwindigkeit 0
vor dem Loch erreicht oder darunter liegt, geben Sie einen Falsey-Wert aus.
_
verringert die Geschwindigkeit um1
/
verringert die Geschwindigkeit um5
\
erhöht die Geschwindigkeit um4
Kurse können optional mit Leerzeichen aufgefüllt werden. Die Kraft des Swings wird immer eine positive ganze Zahl sein.
Sie brauchen sich keine Sorgen zu machen, dass der Ball zu schnell ins Loch geht, rückwärts rollt oder von Hügeln springt / hüpft.
Testfälle
Input: 27
____ ____ _
__/ \ / U \
__/ \ / \_
\_/
Output: true
----------
Input: 26
____ ____ _
__/ \ / U \
__/ \ / \_
\_/
Output: false
----------
Input: 1
U
Output: true
----------
Input: 1
_
U
Output: false
----------
Input: 22
/U
/
/
/
\/
Output: true
----------
Input: 999
_ _
\ /
\ /
\ /
U
Output: true
----------
Input: 5
/
/U
Output: false
----------
Input: 9
/\/\/\/\/U
Output: false
----------
Input: 16
_/\ _
\ __ /\/\/\ /
\ / \ / \ /
\__/ \ / \____________ _/
\_/ U
Output: true
Dies ist Code-Minigolf, die kürzeste Antwort in Bytes gewinnt!
quelle
\_/
mit den folgenden Schritten in einen Stream von Operationen ( ) umwandeln: In ein Array von Zeilen aufteilen, drehen, reduzieren, Leerzeichen entfernen.\/\/\/\/\/
ist ein effizienter Kurs als__________
.Antworten:
Pyth, 27 Bytes
Demonstration
Dieser Code macht etwas sehr Cleveres und überhaupt nicht typsicheres mit
X
. Schau es dir unten an.Erläuterung:
quelle
Q
? Dh das letzte Beispiel könnte einige Probleme verursachen?< ... Q
funktioniert als numerischer Vergleich bis zum Loch, nicht als Scheibe. Nach dem Loch kommt es nur darauf an, dass das Ergebnis wahr ist.Haskell,
111109 BytesAnwendungsbeispiel:
Wie es funktioniert:
Edit: @ user81655 2 Bytes zum Speichern gefunden. Vielen Dank!
quelle
Ruby,
10487 ZeichenProbelauf:
quelle
Japt, 38 Bytes
Try it here!
CJam schlagen!
Erläuterung
Nimmt im Grunde genommen die Zeichenketteneingabe, dreht sie um 90 Grad im Uhrzeigersinn, entfernt Leerzeichen und Zeilenumbrüche, entfernt das Loch und alles danach und teilt sich entlang der Zeichen. Überprüft dann mithilfe der
every
Funktion , ob der Ball jemals auf Null oder darunter fällt .quelle
%
und>0
kann ersetzt werden¬
, da die sqrt einer nicht-positive Zahl immer falsy ist (0 -> 0
,-1 -> NaN
).CJam,
4039 BytesDer Eingang hat die Leistung in der ersten Zeile und der Kurs beginnt in der zweiten Zeile. Ausgang ist
0
oder1
.Teste es hier.
Erläuterung
quelle
Retina,
82817774686768 BytesProbieren Sie es online aus
>
- zum Beispiel 4 ist>>>>\n
. (Ist das legal?)+`(?<=(.)*) (?=.*¶(?<-1>.)*(.))
$2
- Kurs abflachen - Leerzeichen durch das Zeichen darunter ersetzen.Nach dieser Phase sehen die Daten folgendermaßen aus:
Wir können einfach alles nach dem ersten ignorieren
U
, wir werden es sowieso nicht erreichen.>
stellen einen Schritt dar, den wir machen dürfen, oder die verbleibende Energie.\
durch vier>
- eine Steigung gibt uns zusätzliche Energie.>_
oder>>>>>/
bis keine mehr vorhanden sind._
s und/
s verbrauchen Energie.^>*U
erzielen - prüfen Sie, ob wirU
mit positiver Energie (oder ohne Energie) erreichen können.Dies gibt
0
oder aus1
.Eine weitere Option zum Schließen mit
91 bis79 Bytes ist:Probieren Sie es online aus
Dies ist der gleiche Ansatz, jedoch mit einer Bilanzgruppe anstelle eines umstrittenen Ersatzes.
Ich bin sicher, dass beide weiter Golf spielen können, so dass jeder von ihnen möglicherweise kürzer wird.
quelle
0
oder1
als Ziffer verwenden würde, wenn keine zusätzlichen Bytes anfallen.ES6, 117 Bytes
Ungolfed:
Bearbeiten: 4 Bytes dank ՊՓԼՃՐՊՃՈԲՍԼ gespeichert.
quelle
JavaScript (ES6),
108107106 BytesDies ist die Lösung, die ich gefunden habe, als ich die Herausforderung erstellt habe.
Erläuterung
Nimmt die Kraft als Zahl und den Kurs als Zeichenfolge. Rückgabe
1
fürtrue
oder0
fürfalse
. Die Strecke muss mit Leerzeichen aufgefüllt sein.Prüfung
quelle
Python (3.5)
169160 BytesEine rekursive Lösung ohne Transponierfunktion (zip)
Ungolfed
c für Kurs, p für Leistung, v für Geschwindigkeit, h für Höhe
Verwendungszweck
quelle
Pyth, 35 Bytes
Erläuterung
quelle
Ruby, 85 Zeichen
Angepasste @ manatworks Antwort
quelle
JavaScript,
266263244 BytesUngolfed
Verwendungszweck
quelle
Java, 219 Bytes
Den Kurs abflachen, da die y-Koordinate keine Rolle spielt, hat Java leider keine vertikale Trimmung. Es hat auch keine String-Transponierung.
Iterieren Sie über den abgeflachten Kurs und verfolgen Sie die Ballgeschwindigkeit.
quelle
Oktave,
111110 BytesErläuterung:
max
für jede Spalte die finden'_/\'
zu[1, 5, -4]
(alle anderen Zeichen, denen weniger als zugeordnet'_'
sind0
)True
Wird ausgegeben, wenn alle kumulierten Summen vom Beginn des Kurses bis zum Cup kleiner als die Startgeschwindigkeit sind (False
ansonsten).Hier ist ein Testfall, den ich bereits ähnlich wie den zweiten von @Erwan vorgeschlagenen entwickelt habe, und ein paar Ergebnisse:
Und hier ist der erste Testfall:
quelle
"//_U\\\\\\\_
das Ergebnis falsch ist, da Sie nicht nachU
denselben Dingen Zeichen entfernen, wenn Sie einen Kurs mit lokalem Maximum wie_//\\\\\U
U
. Das ist, was der(1:find(m==85))
macht; Es dauert Subarray vom ersten Index zum Speicherort derU
. Ich überprüfe Ihren Testfall mit ein paar Startgeschwindigkeiten und melde mich bei Ihnen.cumsum
einer Zwischenvariablen zuweisen und diese dann für den endgültigen Vergleich verwendenall(v>tmp(1:find(m==85)))
.C 629 Bytes
Ungolfed:
Im Grunde genommen mache ich nur einen Durchgang, um die Eingabezeichenfolge so zu konvertieren, dass alles in eine Zeile passt
quelle
if
/else
zB reduzierenx+=*n==' ')?1:*n=='\n'?-x:(olc[x]=*n,1
. Ein weiterer Tipp: In Cunsigned int
kann geschrieben werdenunsigned
, wodurch sofort 4 Bytes gespart werden.Python,
212201188143 BytesEin Großteil des Verdienstes für diese Iteration dieses Skripts geht an @Erwan, der mir einen völlig anderen Ansatz und einige Tipps gegeben hat, mit denen ich am Ende 55 Bytes gespart habe.
Nicht rekursiv, sollte sich also wesentlich von der anderen Python-Lösung unterscheiden.
Ein bisschen Ungolfed:
quelle
o=[''.join(x).split()[0] for x in zip(*c.split('\n'))]
gewinnt meiner meinung nach 40 bytesbreak
durchreturn p>0
und entfernenif p...
if"U"==v or p<1
wenn es ein lokales Maximum gibt wie_//\\\\\U