Herausforderung
Sie haben einem Freund eine Karte gegeben, die ungefähr so aussieht:
|
/
|
/
|
\
|
\
D
Eine einfache Karte, die oben beginnt und unten endet. Leider versteht es dein Freund nicht. Kannst du die Karte entschlüsseln, damit er sie lesen kann?
Eingang
Die Eingabe ist eine Kette von Zeichen , bestehend aus |
, /
, \
, D
, ^
, Y
, (Raum) , und neue Zeilen.
|
sagt, in der gleichen Spalte zu bleiben.\
fordert Sie auf, zur rechten und unteren Spalte zu wechseln 1./
fordert Sie auf, zur linken und unteren Spalte zu wechseln 1.D
markiert das Ziel.^
(falls vorhanden) weist auf eine Teilung des Pfades hin.Y
(falls vorhanden) erzählt von einer Wiedervereinigung von Pfaden. Behandle es wie ein|
.
Die Eingabe wird so angeordnet, dass sie eine Art Pfad ergibt:
|
|
\
|
^
/ \
/ |
D |
Zwischen zwei Pfaden wird immer ein Leerzeichen eingefügt, und alle Pfade werden entweder wieder verbunden oder erreichen die letzte Zeile der Eingabe. Es wird nur einen Split pro Karte geben. Die Länge der Eingabekarte ist unbegrenzt. Es wird nie mehr als zwei Wege geben.
Ausgabe
Die Ausgabe sollte eine Folge von Anweisungen sein.
- „ L “ sollte Ihr Freund zu bewegen sagen L inks und vorwärts 1 Schritt.
- „ R “ sollte Ihr Freund zu bewegen sagen R echts und vorwärts 1 Schritt.
- " F " sollte deinem Freund sagen, dass er einen Schritt nach vorne gehen soll.
Für die Eingabebeispielzuordnung lautet die Ausgabe wie folgt:
F F L F R R R
Beachten Sie, dass Ihr Freund oben auf der Karte beginnt und nach unten zeigt. Geben Sie die Anweisungen aus seiner Perspektive. Für eine Instanz von "^" muss Ihr Programm in der Lage sein, den Pfad zu wählen, der zum Ziel führt (D). Wenn die beiden Pfade erneut kombiniert werden, muss Ihr Programm den geradesten Pfad (den mit den meisten |
s) auswählen, dem Sie folgen möchten. Anweisungen müssen durch Leerzeichen getrennt sein und mit D enden .
Beispiele
Eingang
|
|
\
\
^
/ |
| |
\ |
\ \
\ \
\ /
Y
D
Ausgabe
F F L L L F F F L L R F
Da der Pfad ganz links nur 1 enthält |
, verwenden wir den Pfad ganz rechts mit 3.
Eingang
\
|
/
|
\
|
/
D
Ausgabe
L F R F L F R
Eingang
/
\
/
\
^
\ \
D \
Ausgabe
R L R L R L
Andere Details
- Dies ist Codegolf, also gewinnt die Person mit dem kürzesten Code am kommenden Mittwoch, dem 19. August.
- Konstruktives Feedback willkommen und sehr geschätzt.
- Teilweise inspiriert von A Map to Hidden Treasure
- Fühlen Sie sich frei, den Titel in etwas Kreativeres zu ändern.
- Wenn Sie Fehler finden, die ich gemacht habe, korrigieren Sie sie.
- Und natürlich viel Spaß.
Vielen Dank!
Ein bisschen spät vielleicht, aber UndefinedFunction ist die Gewinner-Codierung in JavaScript! Vielen Dank an alle, die eingetreten sind. Andere Einträge werden nicht akzeptiert.
L L
, was ich denke sollteL L L
. Das Beispiel mit hatY
noch einen1
am Ende und scheint auch andere Fehler zu haben. Ich habe die Karte gelesen, alsF F R R R F F F R R L F
ob ich die Regeln richtig verstehe.L
für die^
und zweiL
für die beiden geben/
? Und warum haben SieF
am Ende desY
Beispiels noch zwei hinzugefügt ?Antworten:
Javascript (ES6),
261248252248212 BytesDa nur ein Split unterstützt werden muss:
Jedoch, 240 Bytes , und wir können mit mehreren Splits umgehen:
Beide Programme definieren anonyme Funktionen.
Geben Sie zur Verwendung der Funktion (en) einen Namen, indem Sie ihn
f=
vor dem Code einfügen.Danach können sie mit angerufen werden
Erläuterung
(veraltet, aber immer noch dasselbe Konzept. Für die Multiple-Split-Lösung)
Anmerkungen
Alle Backslashes (
\
) in der Eingabe werden als maskiert\\
maskiert, damit Javascript sie erkennen kann.Beide Ausgaben enthalten ein Leerzeichen.
quelle
PHP,
634631607396382381347338330337324 BytesMein allererstes Golf so sanft sein. Alle Tipps sind sehr dankbar.
Kurze Erklärung:
Ich habe eine Zählung, die 0 ist, wenn der Eingang nur einen Pfad hat. Wenn der Pfad geteilt wird, ist die Anzahl 1 für den linken Pfad und 2 für den rechten Pfad. Nachdem ich beide Pfade (oder nur einen) definiert habe, überprüfe ich, welcher Pfad mehr "F" hat.
Ungolfed Version:
Log:
36 Bytes dank Kamehameha gespeichert.
Sparte viele, viele Bytes, indem die Logik ein wenig geändert wurde.
42 Bytes gespart dank Axiac.
Ersetzt jede if-Anweisung durch ternäre Operatoren.
quelle
$a=$b='';
statt -$a='';$b='';
Speichert etwa 3 Bytes.$a=$a.'L ';
kann reduziert werden$a.='L '
. Sie scheinen das an einigen Stellen getan zu haben. Das spart ungefähr 6 Bytes :)foreach($e as$i)
) einfügen . Ich habe das getestet und es scheint gut zu funktionieren.as
in demforeach
die Leerzeichen zwischenecho
und der Variablenname entfernt werden können, damit Sie habenecho$b
. Auch kann ein paar Gleichheitstests kürzer sein,$c==0
könnte sein ,!$c
und wenn das der Fall ist, können Sie initialisieren ,$c
um''
mit$a
und$b
!PHP, 281 Bytes
Es ist das Ergebnis von zwei Golf-Iterationen. Die ungolfed Version ist:
Es ist selbst ziemlich Golf und es ist als eine Verbesserung des folgenden Golfprogramms (312 Bytes) herausgekommen:
Es ist die Golfversion des Originals:
Beispielausführung:
Es werden auch mehrere Gabeln korrekt gehandhabt (müssen vor der nächsten Gabelung verbunden werden, um jederzeit höchstens zwei Zweige zu haben). Ich habe in einem Kommentar nach mehreren Gabeln gefragt, aber der Code war bereits fertig, als die Antwort ("nicht benötigt") kam.
Den kompletten Code mit Testsuite und weiteren Kommentaren finden Sie auf github .
quelle