Ihre Aufgabe ist es, ein Programm zu schreiben, das die optimale Anzahl von Zügen findet, die erforderlich sind, um von der linken unteren Ecke eines Rechtecks zur rechten oberen Ecke direkt gegenüber zu gelangen.
Ihr Programm akzeptiert Eingaben als geordnetes Paar (width, height)
. Dies sind die Abmessungen des Rechtecks, mit dem Sie arbeiten werden. Ihr Programm erstellt eine ASCII-Grafik der Lösung ( .
für leeres Quadrat und #
für einen Teil der Lösung X
für das Startquadrat) und zählt die Anzahl der Züge, die erforderlich sind, um den Endpunkt zu erreichen. Diagonale Bewegungen sind nicht erlaubt. Wenn es mehrere Lösungen gibt, wählen Sie eine aus, die ausgegeben werden soll.
Das kürzeste Programm in Bytes gewinnt.
Beispiel
Eingang: (4, 5)
Ausgabe:
..##
..#.
.##.
.#..
X#..
Zugzahl: 7
#
in "der optimalen Lösung" enthalten (welche Lösung bewegt sich niemals nach links oder unten)?#
da es unlogisch ist, nach links oder unten zu gehen.Antworten:
05AB1E ,
2724 BytesCode:
Erläuterung:
Probieren Sie es online! . Verwendet die CP-1252- Codierung.
quelle
Retina ,
5453 BytesNimmt Eingaben getrennt durch einen Zeilenvorschub auf und gibt das Lösungsraster gefolgt von der Bewegungszahl aus.
Probieren Sie es online!
Erläuterung
Wandle beide Ganzzahlen in so viele
.
s um, dh wandle sie in unäre um.Dadurch wird ein Raster von
.
s erstellt, indem jedes.
in der unären Höhe abgeglichen und die unäre Darstellung der Breite erfasst wird. DasS
aktiviert den Split-Modus, der die erfassten Zeichenfolgen zurückgibt, und das|\D
und_
zusammen stellen sicher, dass alles andere aus der Zeichenfolge entfernt wird.Dadurch wird das letzte Zeichen jeder Zeile sowie die gesamte letzte Zeile in
#
s umgewandelt.Dabei werden unzählige Optionen verwendet, um nur die erste
#
in der letzten Zeile in zu konvertierenX
(wir müssen sicherstellen, dass nur die letzte Zeile aufgrund von Eingaben mit der Breite 1 betroffen ist).m
Aktiviert den Mehrzeilenmodus, der das^
Anpassen des Zeilenanfangs ermöglicht.-1=
weist Retina an, die Auswechslung nur beim letzten Spiel durchzuführen. Schließlich:
wird der standardmäßige stille Modus ausgeschaltet, sodass das Raster als Zwischenergebnis auf STDOUT gedruckt wird.Schließlich zählen wir einfach die Zahl
#
in der Zeichenfolge, die der Anzahl der Züge entspricht.quelle
Pyke, 26 Bytes
Probieren Sie es hier aus
Oder nicht konkurrierende 34 Bytes, fügen Sie einen Apply-Knoten mit einem Ast hinzu.)
Probieren Sie es hier aus!
Oder 30 Bytes, wenn Leerzeichen als Auffüllung zulässig sind
quelle
Pyth,
322924 BytesProbieren Sie es online!
Beispieleingabe:
Beispielausgabe:
Wie es funktioniert:
Vorheriger Versuch:
Probieren Sie es online!
Beispieleingabe:
Beispielausgabe:
Wie es funktioniert:
quelle
AtMQ
. Dies weist die beiden WerteG
und zuH
.CJam,
3533 BytesNimmt Eingaben in das Formular auf
width height
und gibt die Bewegungszahl in der ersten Zeile gefolgt vom Lösungsraster aus.Teste es hier.
Dies funktioniert auch für die gleiche Byteanzahl:
quelle
Ruby, 48 Bytes
Dies ist eine anonyme Funktion, die gemäß diesem Meta-Post akzeptiert wird, sofern in der Frage nicht "Volles Programm" angegeben ist. Normalerweise wäre ich nicht pedantisch, aber das Problem ist sehr einfach, und ein Programm durchzuführen, würde die Punktzahl um einen erheblichen Prozentsatz erhöhen.
Die Eingabe besteht aus zwei Argumenten. Der Rückgabewert ist ein Array, das die ASCII-Zeichenfolge und die Nummer
#
im Pfad enthält.Im Testprogramm
Ausgabe
Es ist nur eine Folge von h-1 Zeilen mit w-1 Punkten, gefolgt von a
#
und newline. Ich setze das#
am Ende, um ein einzelnes#\n
Literal für beide#
und newline zu verwenden (der Code enthält eine tatsächliche newline anstelle einer Escape-Sequenz.) Die letzte Zeile wird dannX
von w-1 gefolgt#
.Es war kürzer, die Werte von w und h während der ASCII-Kunstgeneration zu dekrementieren, damit die endgültige Berechnung einfach ist
w+h
.quelle
JavaScript (ES6), 60 Byte
Verwendung
quelle
MATL ,
282625 BytesBEARBEITEN (10. Juni 2016): Der unten stehende Link enthält eine Änderung (
5L
wird ersetzt durchIL
), um sich an Änderungen in der Sprache anzupassenProbieren Sie es online!
Erläuterung
quelle
Scala, 118 Bytes
quelle
Haskell, 64 Bytes
Anwendungsbeispiel:
Wie es funktioniert:
quelle
Java,
137132 Bytesquelle
Lua, 81 Bytes
Probieren Sie es online!
Golf gespielt:
Ungolfed:
quelle
Python, 48.
Um es zu benutzen, füge es
f=
vor der obigen Zeile hinzu und rufe es so auf:Ergebnis:
quelle