Dies ist im Wesentlichen das Gleiche wie diese Frage, außer schwieriger. Sie müssen wieder ein Programm schreiben, das von der unteren linken Ecke eines Rechtecks in die obere rechte Ecke gelangt. Diesmal sind jedoch diagonale Bewegungen erlaubt.
Das Programm akzeptiert ein geordnetes Paar (width, height)
und verwendet diese als Bemaßung für ein Rechteck. Ihr Programm erstellt dann eine ASCII-Grafik der Lösung ( .
für ein leeres Quadrat, #
für einen Teil der Lösung und X
für das Startquadrat) und zählt die Anzahl der Züge, die erforderlich sind, um den Endpunkt zu erreichen.
Beispiel
Eingang: (5, 6)
Ausgabe:
....#
....#
...#.
..#..
.#...
X....
Move count: 5
Kürzeste Antwort in Bytes gewinnt!
Antworten:
MATL , 38 Bytes
Probieren Sie es online!
Erläuterung
Sei
m
undn
sei die sortierte Eingabe, so dassm
größer oder gleich istn
. Der Code erstellt zunächst einem
x-n
Matrix wie folgt:#
. Die Anzahl dieser Einträge minus 1 ist die Anzahl der Züge.X
..
Bei Bedarf wird die Matrix nun so transponiert, dass sie die gewünschte Form hat. Beachten Sie, dass die erste Dimension einer Matrix die Höhe und nicht die Breite ist, sodass sie der zweiten Eingabe entspricht.
Die Matrix wird dann umgedreht, sodass sie
X
am unteren Rand der ersten Spalte angezeigt wird, und ihre Einträge werden als Indizes in die Zeichenfolge verwendet'.#X'
, um das gewünschte 2D-Zeichenarray zu erstellen.quelle
Pyth,
464544 BytesProbieren Sie es hier aus.
Erläuterung:
quelle
JavaScript (ES6), 132
Bearbeite 2 Bytes, die dank @Neil gespeichert wurden
Prüfung
quelle
w--,R=
... in das Feld bewegenmap()
.Javascript (mit externer Bibliothek) (235 Bytes)
Meine Güte, das war schwer! Nun ... meine Bibliothek war nicht wirklich die richtige Aufgabe für dieses Haha. Aber ich mochte die Herausforderung
Link zu lib: https://github.com/mvegh1/Enumerable
Codeerklärung: Funktion aus 2 Variablen erstellen. Speichern Sie x-1 und y-1 in Variablen. Speichere max und min davon in Variablen. Erstellen Sie einen vertikal absteigenden Zahlenbereich von (y-1) für eine Anzahl von y. Schreiben Sie für jedes Element im vertikalen Bereich eine Linie für das aktuelle Element entsprechend dem komplexen Prädikat. Dieses Prädikat erstellt einen aufsteigenden Bereich von ganzen Zahlen von 0 für eine Anzahl von x. Verketten Sie für jedes Element in diesem Bereich eine Zeichenfolge gemäß einem komplexen Prädikat. Dieses Prädikat prüft, ob links unten, sonst, ob diagonal, sonst, ob wir am X- oder Y-Rand sind. Schließlich wurde alles in einer Variablen gespeichert. Um die Anzahl der Züge zu ermitteln, zählen wir im Grunde genommen nur die # -Zahlen. Verknüpfen Sie das dann mit der gespeicherten Variablen und geben Sie das Ergebnis zurück
Das war ein Schluck haha. Der Screenshot hat den falschen Bytecount, weil ich beim Posten einen Weg gefunden habe, 4 Bytes zu sparen
BEARBEITEN: Ich sehe, dass andere Antworten nicht "Move count:" in ihre Ausgabe einfügen, aber meine ist. Wenn das keine Voraussetzung ist, werden ein paar Bytes gespart ...
quelle
Python 3,
161156 BytesEine Funktion, die Eingaben über Argumente entgegennimmt und die ASCII-Grafik, gefolgt von der Anzahl der Verschiebungen, an STDOUT ausgibt.
Wie es funktioniert
Das Programm erstellt zunächst eine Liste von Listen, wobei jede Liste eine Zeile des Rasters darstellt und jedes Element der Komponentenlisten ist
.
. Jedes Element, das sein sollte,#
hat die Eigenschaft, dass die Ordinaten, die seine Position darstellen, gleich wären, wenn das Ausgaberaster quadratisch wäre. daher würde ein Durchlaufen eines Indexesi
und Einfügen#
an einer Stelle(i, i)
die gewünschte Ausgabe ergeben. Das Raster ist jedoch nicht immer quadratisch, und daher werden die Indizes an das Raster geklemmt, indem das Minimum von Index und Breite / Höhe (verringert aufgrund der Null-Indexierung) nach Bedarf verwendet wird. Wenn der Index Null ist, muss die aktuelle Position der Eintrag links unten seinX
wird stattdessen eingefügt. Als nächstes werden die Elemente in jeder Zeile verkettet und jede Zeile wird auf STDOUT gedruckt. Die Anzahl der Züge ist das Maximum der um eins verminderten Breite / Höhe. Dies wird auch gedruckt.Probieren Sie es auf Ideone
quelle