Jelly , 37 34 Bytes
“¢ ¬9£Hæz¥{çb¤S®!‘ṃ€“¡&¦»
¢iµ’,‘ị¢
Probieren Sie es online!
Übernimmt die Eingabe in Kleinbuchstaben.
-2 Danke an Jonathan Allan .
-1 da sich herausstellt, dass dies als Funktion gültig ist :)
Dank Jonathan Allan (und Dennis) können Sie jetzt die entfernen €
. Das wäre hier leider nicht konkurrierend.
Detaillierte Erklärung des Algorithmus :
Normalerweise beginnen wir mit dem Erklären vom unteren (Haupt-) Link aus, aber ich halte es für angemessener, es von oben zu erklären.
Zuerst laden wir einfach die Liste hoch [1, 32, 7, 57, 2, 67, 17, 92, 3, 94, 19, 119, 4, 109, 9, 34]
. Das sieht nach Zufallszahlen aus, oder? Nun, das ist eigentlich eine Liste von Zahlen mit Basis 5-Komprimierung, also dekomprimieren wir sie mit Basis 5. Jetzt sieht es so aus [[1], [1, 1, 2], [1, 2], [2, 1, 2], [2], [2, 3, 2], [3, 2], [3, 3, 2], [3], [3, 3, 4], [3, 4], [4, 3, 4], [4], [4, 1, 4], [1, 4], [1, 1, 4]]
. Es sieht immer noch zufällig aus, aber dies ist eine NESW
Liste mit 16 Koordinaten. Wir sind also nicht weit davon entfernt, die Liste zu vervollständigen (Jelly ist 1-indiziert). Wenn wir das endgültige Mapping machen, erhalten wir [['N'], ['N', 'N', 'E'], ['N', 'E'], ['E', 'N', 'E'], ['E'], ['E', 'S', 'E'], ['S', 'E'], ['S', 'S', 'E'], ['S'], ['S', 'S', 'W'], ['S', 'W'], ['W', 'S', 'W'], ['W'], ['W', 'N', 'W'], ['N', 'W'], ['N', 'N', 'W']]
, was die vollständige Liste ist, die wir wollen (Jelly Strings sind in der Form [char1, char2, char3, ...]
.)
Da wir jetzt die Koordinatenliste erstellt haben, arbeiten wir damit. Der Hauptlink kommt ins Spiel. Zuerst laden wir die Liste, die wir erstellt haben, und nehmen dann den Index, in dem sich die Eingabe- (als Befehlszeilenargument) -Koordinate befindet. Dann koppeln wir ihren Vorgänger und ihren Nachfolger zu einer Liste und verwenden sie als modular Indiziert in dieselbe Koordinatenliste, um die Koordinate links und rechts von der Eingabe zu nehmen. Sie würden jetzt denken, wir sind endlich fertig, aber es gibt noch eine Sache, den Separator. Dies gilt als Funktion, da 1) Sie es mit <integer>Ŀ
2) aufrufen können. Sie dürfen auch andere Funktionen definieren (wie das Importieren von Modulen). Nun sind wir fertig. Als vollständiges Programm hat dies kein Trennzeichen, aber das ist in Ordnung, da es als Funktion funktioniert.
Erklärung des Link-by-Link-Codes :
¢iµ’,‘ị¢K Main link. Arguments: z = cmd0
¢ Run the helper link niladically (i.e. load the coordinate list).
i Find the index of z in the list.
µ Start a new monadic chain. Arguments: z = list_index.
’ Decrement z.
‘ Increment z.
, Pair x and y into [x, y].
¢ Run the helper link niladically.
ị Take the elements of y at the indices in x.
“¢ ¬9£Hæz¥{çb¤S®!‘ṃ€“¡&¦» Helper link. Arguments: [1, 32, 7, 57, 2, 67, 17, 92, 3, 94, 19, 119, 4, 109, 9, 34]
“¢ ¬9£Hæz¥{çb¤S®!‘ Generate the integer list (the argument).
“¡&¦» Literal "newsy".
ṃ€ Base-length(y)-decompress every integer in x, then index into y.
Python 2,
116115103 Bytes-12 Bytes dank Neil
Probieren Sie es online!
quelle
d[n-15]
, um den Zustand zu vermeiden.JavaScript ES6,
106102 BytesProbieren Sie es online!
quelle
let
anstelle vonconst
.05AB1E ,
4443 Bytes (Dank an Adnan)Probieren Sie es online!
Beispielausgabe:
Version, die
N0NNE0NE0ENE0E0ESE0SE0SSE0S0SSW0SW0WSW0W0WNW0NW0NNW
stattdessen drückt :Ist auch 44-Byte, gab es 0 Grund für meinen Refactor und es gibt 0 Grund für die Aufteilung auf die 4er.
quelle
4
trennen?•17¿$Mn]6VAÆ—Dªd—•5B4LJ"NSWE"‡0¡©skD<®ès>®è)
stellt sich heraus, dass es überhaupt keinen Grund gibt. Die Verwendung von 0 als Begrenzer entspricht dem Komprimierungsverhältnis, da dadurch die Länge der Zahl bei der Konvertierung von Basis 5 zu Basis 214 nicht verringert wird. Könnte ich schwören, dass mir das ein Byte erspart hat?„ €Ã¦•174SÝ©l2ÎG¦˜fÐ98•5BSè#ÐIk©<ès®>è)
4 Bytes sparen.Javascript -
234154156152120106102 BytesNur mein zweites Mal macht Code Golf !!
Letzte Überprüfung:
Vielen Dank an @ fəˈnəˈtɛk für diesen tollen Variablentrick!
Vorher: Okay, letzte Überarbeitung: Input ist eine Zeichenkette und Output ist eine Zeichenkette, die in den Regeln enthalten ist. Deshalb habe ich sie zu einer Funktion gemacht und mit Verkleinerungen bin ich sogar noch kleiner geworden (auch die Funktion ist anonym, was bedeutet, dass meine jetzt funktioniert) irgendwie vermascht mit den anderen js antwort hoppla! er (powelles) hatte es zuerst !!):
Kann verwendet werden von:
Remade (nicht funktionieren) mit Ausgang - 120:
Beachten Sie, dass ich ursprünglich einen Fehler gemacht habe, der a.length anstelle von a.length-1 für den ersten Index entspricht. Vielen Dank an @Neil für den Hinweis, dass es bei NNW nicht funktioniert hat.
Hinweis 2: Vielen Dank an @Neil und @ETHProductions, die mir geholfen haben, den Code zu verkürzen!
Originial:
quelle
NNW
.,
, i = a.indexOf (p), [a [i-1 & 15], a [i + 1 & 15])Batch, 196 Bytes
Durchläuft jedes Kompasspunktpaar und druckt eines aus, wenn das andere übereinstimmt. Zum Beispiel für einen Parameter
ENE
, wenn die Schleife erreichtENE
, wird die Variables
enthält ,NE
die gedruckt wird, dann , wenn die Schleife weiter zuE
, wird die Variables
enthältENE
und soE
gedruckt wird. Ein Paar muss dann ein spezielles Gehäuse haben, um zu vermeiden, dass die Kompasspunkte in der falschen Reihenfolge gedruckt werden.quelle
Haskell ,
100 bis99 BytesProbieren Sie es online! Calling
(s#) "N"
kehrt zurück("NNW","NNE")
.s
ist eine unendliche Wiederholung der Liste der Anweisungen, daher müssen wir keine zusätzlichenN
undNNE
ähnlichen Antworten hinzufügen , um die Ränder der Liste richtig zu behandeln.Vielen Dank an @nimi für das Speichern eines Bytes!
quelle
(a:b:c:r)!x| ... =r!x;(s!)
.Jelly ,
4038 BytesProbieren Sie es online! (Fußzeile hinzugefügt, um anzuzeigen, dass die Ausgabe eine Liste mit zwei Elementen ist) ... oder alle Fälle anzeigen .
(Ich bin nicht ganz sicher, warum
1323DRẋ4
anstelle von“¢)`)’ḃ3R
im Moment nicht funktioniert.)Wie?
quelle
SOGL , 33 Bytes
Der erste Teil
≠┐πΜ]ρ½d⁹V¹-┐*╔╤¹Ψæ;¶‘
ist eine komprimierte Zeichenfolgekomprimiert mit einem benutzerdefinierten Wörterbuch mit
ENSW
Der Rest des Programms:
quelle
bytes
im Titel hat einen Link zur CodepagePHP, 122 Bytes
quelle
$argv[1]
durch$argn
und Verwenden der Option -R. Wenn Sie veraltete Funktionen verwenden, könnte dies aufereg("([^_]+)_{$argn}(_[^_]+)",N_NNE_NE_ENE_E_ESE_SE_SSE_S_SSW_SW_WSW_W_WNW_NW_NNW_N_NNE,$t);echo$t[1].$t[2];
Ruby - 94 Bytes
Ein Riff über die Antwort von Blue Okiris , nur um ein paar nette Ruby-Abkürzungen zu nutzen (die
%w[]
Syntax undp
speziell):quelle
Japt ,
6652 Bytes14 Bytes dank @ETHproductions eingespart
Probieren Sie es online!
Erläuterung:
quelle
'
inq'o
und es wird funktionieren genau das gleiche :-)[J1]£VgX+VaU
, um ein paar Bytes zu sparenCJam, 41
Probieren Sie es online aus
quelle
PHP, 115 Bytes
-2 Bytes mit der veralteten Funktion
split
anstelle vonexplode
PHP, 128 Bytes
PHP, 134 Bytes
quelle
PHP,
110109 Bytes1 Byte gespart dank Jörg Hülsermann .
quelle
preg_replace
mitpreg_filter
zu speichern 1 BytePython 3 -
112107 BytesIch habe dies anhand meiner Javascript-Antwort ermittelt:
Neu gemacht:
Verwenden Sie wie gesagt
Original:
quelle
MATL , 43 Bytes
Probieren Sie es online!
Erläuterung
quelle
c,
222216211 BytesProbieren Sie es online aus
quelle
Javascript (ES6), 189 Byte
Nimmt einfach die Eingabe, sucht sie und gibt sie zurück.
quelle
JavaScript (ES6), 94 Byte
Erwartet eine Zeichenfolge in Großbuchstaben wie
"ENE"
. Gibt eine durch Kommas getrennte Zeichenfolge zurück, z"NE,E"
.Wie es funktioniert
Der Ausdruck
0+s+0
wird beimsplit()
Aufruf in eine Zeichenfolge umgewandelt . Wenn die Eingabe beispielsweise lautet"ENE"
, wird die Zeichenfolge aufgeteilt in"0ENE0"
:Dies führt zu folgendem Array:
Auch dieses Array wird beim
exec()
Aufruf in eine Zeichenfolge umgewandelt . Der reguläre Ausdruck wird also tatsächlich angewendet auf:Wir suchen nach aufeinanderfolgenden nicht numerischen Zeichen (
\D+
), gefolgt von einem Komma, gefolgt von aufeinanderfolgenden nicht numerischen Zeichen. Dies gibt das Array zurück[ "NE,E" ]
. Wir könnten wohl dort anhalten und genau das zurückgeben. Die Herausforderung besteht jedoch darin, entweder eine begrenzte Zeichenfolge oder ein Array mit zwei Elementen anzufordern. Also extrahieren wir den String mit[0]
.Demo
Code-Snippet anzeigen
quelle
Pyth , 39 Bytes:
wo nicht
❤
druckbare Buchstaben darstellt.Probieren Sie es online!
Hexdump:
quelle