Führen Sie das Alphabet
Gegeben eine Reihe von Richtungen, wobei die Richtungen wie folgt definiert sind:
NW N NE
W . E
SW S SE
Oder als Indizes (Sie können diese Indizes anstelle der obigen Zeichenfolgen für Richtungen verwenden):
0 1 2
3 . 4
5 6 7
Sie können eines der beiden Formate auswählen. Die Unterstützung beider Formate ist für die Challenge nicht erforderlich. Generieren Sie die entsprechende alphabetische Zeichenfolge, die den gezeichneten Pfad darstellt, beginnend mit A. Die Anzahl der Richtungen überschreitet niemals 25, was bedeutet, dass er niemals überschritten werden kann Z
, sodass Sie dieses Szenario nicht bearbeiten müssen. Andere Eingabeformate werden nur akzeptiert, wenn Sie erklären können, warum diese Formate aufgrund einer Spracheinschränkung nicht funktionieren. Dies lässt sich leichter anhand eines ausführlich ausgearbeiteten Beispiels erklären.
Schauen wir uns also ein kurzes Beispiel an:
[E,SE,N,S,S,S,NW,W,N] or [4,7,1,6,6,6,0,3,1]
Beginnen Sie immer mit A.
A
Gehe nach Osten nach B.
A-B
Gehe nach Südosten nach C.
A-B
\
C
Gehe nach Norden zu D.
A-B D
\|
C
Gehe zurück nach Süden zu E und überschreibe C.
A-B D
\|
E
Fahren Sie 2 Zyklen lang nach Süden, bis Sie F und G erreichen.
A-B D
\|
E
|
F
|
G
Gehe nach Nordwesten zu H.
A-B D
\|
E
|
H F
\|
G
Gehe nach Westen zu I.
A-B D
\|
E
|
I-H F
\|
G
Bei Punkt J nach Norden enden.
A-B D
\|
J E
| |
I-H F
\|
G
Der endgültige Wert, den Sie zurückgeben würden, ist das Lesen des endgültigen Diagramms von links nach rechts von oben nach unten:
ABD
JE
IHF
G
Ergebend:
ABDJEIHFG
Dies ist Code-Golf , die niedrigste Anzahl an Bytes gewinnt.
A
solchen , dieA
nicht das erste Ergebnis gedruckt wird?Antworten:
MATL ,
64585750464037363530 BytesProbieren Sie es bei MATL Online aus
Erläuterung
quelle
JavaScript (ES6),
1081079487 ByteDank Titus konnten satte 13 Bytes eingespart werden!
Dank edc65 7 weitere Bytes gespart!
Wie es funktioniert
Die Formel
(d += d > 3) * 9 - d % 3 * 8 - 28
übersetzt die Richtungen0..7
in die folgenden Offsets:Wir verwenden diese Offsets, um den Zeiger
p
in das eindimensionale Array zu bewegenr
und die Buchstaben an den resultierenden Positionen zu schreiben.Wir iterieren weiter,
[i = 9, ...a]
anstatt nura
den Anfangsbuchstaben 'a' einzufügen. Weil wir initialisieren ,i
um9
in der gleichen Zeit, führen wir eine spezielle Offset von 54 (das Ergebnis der oben genannten Formel fürd = 9
). Nach der ersten Iteration,p
gleich646 + 54 = 700
, was gerade genug Raum lässt , um 25 bewegt sich nach Nordwesten zur Unterstützung von bis:25 * -28 = -700
. Deshalbp
wird zu initialisiert646
.Dann müssen wir uns nur noch dem Array anschließen, um unsere endgültige Zeichenfolge zu erhalten. Undefinierte Werte zwischen Buchstaben werden einfach von ignoriert
join()
.quelle
d+=d>3,p+=d*9-d%3*8-28
Spart 11 Bytes.i
in der Array-Definition initialisieren und spart 2 weitere Bytes)(++i).toString(36)
(versucht immer noch nicht, Ihre Mathematik zu verstehen, aber es scheint zu funktionieren)Octave,
145138131123105103908785 BytesProbieren Sie es online
Dank Suever 2 Bytes gespart!
Vorherige Antwort 103 Bytes:
Probieren Sie es online!
Versuchen Sie zuerst 145 Bytes
Einige Erklärungen
quelle
image
Paket Teil Ihres bytecount benötigen, muss das Image-Paketpkg load image
pkg load *
zu Beginn . ideone.com kann eine bessere Wahl seinpkg install -auto image-1.0.0.tar.gz
damit es automatisch geladen werden kann. Weitere Informationen finden Sie im HandbuchMATLAB,
8785 Bytes2 Bytes gespart dank Luis Mendo
quelle
'%&''?AYZ['-64
netter trick ... eigentlich 66 bytes wenn du inPHP, 93 Bytes
Betrieb auf einem einzelnen Array wie die Antwort von Kodos Johnson .
Aber das hat so viele weitere Ideen, die ich selbst gepostet habe.
Nimmt Zahlen aus Befehlszeilenargumenten. Laufen Sie mit
-nr
.Bewegen Sie den Cursor
Anfangsberechnung:
Golfen:
Das Zusammenführen der Zuordnungen speichert nichts, verbessert jedoch die Lesbarkeit:
Nervenzusammenbruch
quelle
Python 2,
180 178176 Bytesquelle
PHP, 121 Bytes
Dies wird in der Befehlszeile mit dem
-r
Flag ausgeführt und verwendet ein char-Array (String) von Indizes als Argument.quelle
""<$n=$argv[1][$i]
anstelle von($n=$argv[1][$i])!=null
R, 160 Bytes
quelle