Zweidimensionale Programmiersprachen verfügen häufig über Spiegelbefehle wie /
und \
zum Umleiten des Befehlszeigers auf dem Raster:
>>>>\
v
v
<<<</
In dieser Herausforderung erhalten Sie eine Eingangsrichtung und einen Spiegel und müssen die Ausgangsrichtung bestimmen.
Regeln
Die ankommende Richtung wird als eines der Zeichen NESW
und der Spiegel als entweder /
oder angegeben \
. Sie können diese in beliebiger Reihenfolge erhalten. Sie müssen Großbuchstaben verwenden.
Sie können Eingaben in jedem geeigneten Format vornehmen, einschließlich einer Zeichenfolge mit zwei Zeichen, einer Zeichenfolge mit Trennzeichen zwischen den Zeichen, einem Zeichenpaar in einer Liste oder sogar einem Paar Singleton-Zeichenfolgen. Wenn Sie eine Zeichenfolge mit Trennzeichen verwenden, kann das Trennzeichen keine der Zeichen verwenden NWSE\/
.
Die Ausgabe sollte ein Zeichen NESW
oder eine Einzelzeichenfolge sein.
Sie können ein Programm oder eine Funktion schreiben und eine unserer Standardmethoden zum Empfangen und Bereitstellen von Eingaben verwenden.
Sie können jede Programmiersprache verwenden , beachten Sie jedoch, dass diese Lücken standardmäßig verboten sind.
Das ist Code-Golf , also gewinnt die kürzeste gültige Antwort - gemessen in Bytes .
Testfälle
Es gibt nur 8 mögliche Eingaben, die Sie verarbeiten müssen. Es gibt also keine Entschuldigung, Ihren Code nicht auf allen zu testen:
N / --> W
N \ --> E
E / --> S
E \ --> N
S / --> E
S \ --> W
W / --> N
W \ --> S
quelle
\
. Wenn es sich bei Ihrer Antwort um eine Funktionsübermittlung handelt, die einen String enthält, müssen Sie\\
den Quellcode natürlich korrekt aufrufen, aber wenn Sie beispielsweise Ihre Eingabe von der Standardeingabe lesen, sollte es sich um eine einzelne Eingabe handeln\
. Mit anderen Worten, wenn Sie die entsprechende Zeichenfolgenlängenfunktion Ihrer Sprache für die Eingabe aufrufen, sollte das Ergebnis immer gleich sein, unabhängig davon, ob die Eingabe/
oder enthält\
.readline()
kann damit umgehen.Antworten:
Python,
4038 Bytes-2 Bytes dank @MitchSchwartz
(ord(d)+ord(m))%8
->ord(d)+ord(m)&7
Einfache Suche nach Antworten in einer Liste (AKA-Zeichenfolge), die durch den kleinsten Mod der Summe der funktionierenden Ordnungszahlen indiziert ist.
Testfälle sind auf ideone
quelle
%8
und einen Index zu erstellen . Dann haben Sie dieselbe Lösung vor über einer Stunde gepostet. Hah Habe eine +1.Python 2, 40 Bytes
Sp3000 hat ein Byte gespeichert (
.index
→.find
).Erläuterung
Wir wollen die Richtungen so abbilden:
Wir können die Richtungen 2-Bit-Codes zuweisen und beide Flip als XOR-Verknüpfung des ersten und des zweiten Bits anzeigen:
Die Zuordnung zwischen Bitfolgen und Richtungen erfolgt mithilfe der Zeichenfolge
k
. Jetzt müssen wir nur noch Spiegelzeichen'/'
und'\\'
den Werten1
und zuordnen2
. Da'/' < '\\'
könnten wir naiv(m>'/')+1
als Formel verwenden. Aber warte! Lexikographisch,und das haben wir
'NWES'
schön zugeteiltk
! Also können wir(m>k)+1
stattdessen verwenden.quelle
CJam, 14 Bytes
(@MartinEnder hat meine Python-Antwort portiert )
Wie?
Tests sind auf Aditsu
quelle
Javascript (ES6),
50414037 BytesDank Lynns Antwort konnten durch den Vergleich 3 weitere Bytes eingespart werden
Verwendung
quelle
MATL ,
1917 BytesProbieren Sie es online! Oder überprüfen Sie die acht Fälle .
Erläuterung
quelle
Pyth,
171615 BytesVielen Dank an @Jakube und @Maltysen für jeweils -1 Byte
Ein Programm, das zwei durch Zeilenumbrüche getrennte, in Anführungszeichen gesetzte Zeichenfolgen eingibt, zuerst die Richtung und dann den Spiegel und das Ergebnis druckt.
Dies ist eine Portierung von @Lynns Python- Antwort .
Probieren Sie es online aus
Wie es funktioniert
quelle
<QE
mit>E
.05AB1E , 14 Bytes
Probieren Sie es online!
quelle
Jelly ,
14 1312 Bytes(ein Port meiner Python-Antwort )
-1 Byte dank @MartinEnder (füge ein Leerzeichen am Ende des Strings hinzu und entferne die Notwendigkeit für Modulo 8)
-1 Byte dank @LuisMendo (nimm ein einziges String-Argument anstatt zwei)
Wie?
Testen Sie es auf TryItOnline
quelle
Java 7,
717068 BytesSchade das
charAt
undindexOf
nimmt so viel Bytes ein ..Ungolfed & alle Testfälle:
Probieren Sie es hier aus.
Ausgabe:
quelle
Python,
636159 BytesZiemlich einfach. Kann definitiv mehr golfen werden. Legt fest, ob 1 oder -1 zum Index der Eingabe in hinzugefügt werden soll
'NESW'
.Dies ist ein Lambda-Ausdruck; Um es zu benutzen, stellen Sie es mit dem Präfix
f=
.Ideone es!
quelle
Java 8,
625856 BytesUngolfed Testprogramm
quelle
PowerShell v2 +, 34 Byte
Nimmt die Eingabe als zwei explizite
char
s, gibt a auschar
.Dies funktioniert wie folgt: Wenn wir die Ausgabe sortieren, möchten wir
S
/
irgendwie gleichN
\
,W
/
gleichE
\
usw. sein. Oder zumindest Zahlen erzeugen, die "nah genug" und dennoch verschieden sind. Wenn wir uns die ASCII-Werte ansehen, erhalten wir eine Tabelle wie die folgende:Das Ausführen eines schnellen Brute-Forcers für die Summationsspalte (abgeleitet aus dem Summieren der ASCII-Codepunkte der Eingaben) zeigt, dass wir
8
Folgendes erhalten , wenn wir die Summen modulo nehmen2 2 | 6 1 | 3 4 | 5 7
. Dies zeigt sich in der Zeichenfolge"xNESSWNW"
, wieE
im Index2
,N
in6
und1
und so weiter.Also müssen wir nur die Eingaben summieren (implizit von
char
bisint32
auf dem Weg umwandeln), diese nehmen%8
und diese verwenden, um in unseren String zu indexieren.Testfälle
quelle
Batch, 111 Bytes
Akzeptiert zB
W/
als zweistelligen String-Kommandozeilenparameter. Das\
und/
macht das Schleifen umständlich; Es hätte 124 Bytes gedauert.quelle
\r
?Oktave, 30 Bytes
Verwendete die gleiche Reihenfolge der Argumente wie Jonathan Allan.
Übernimmt die Eingabe als zweistellige Zeichenfolge
'W\'
.Probieren Sie es online aus .
quelle
'NESSWNW 'is)
(siehe alle Testfälle ).i
isinput
,s
issum
und)
is indexing ist modular aufgebaut. Ich habe ein Leerzeichen in der Zeichenfolge hinzugefügt, damit das Modulo 8 istC,
44,35,34 BytesEs erfordert zwei Zeichen als zwei Variablen. Es dauert sowohl Klein- als auch Großbuchstaben. Es erfordert viel Bit-Manipulation. Das Fragment
a&a/2
führt zu einem Wert, der eindeutige Werte für die beiden niedrigeren Bits hat&3
und alle höheren Bits abschneidet. Dies wird als Index für die Zeichenfolge "NWES" für den\
Spiegel verwendet. Glücklicherweise sind die unteren zwei Bits der ASCII - Zeichen\
und/
sind 00 und 11 verbunden, die zu XOR mit dem oben erwähnten Index perfekt ist die richtige Richtung für den bekommen/
Spiegel.quelle
return"NWES"[...]
(Leerzeichen weglassen).CJam , 17 Bytes
Die Eingabe ist durch Leerzeichen getrennt.
Probieren Sie es online! (Als durch Zeilenvorschub getrennte Testsuite.)
Dies ist die Lösung, die ich vor dem Posten der Herausforderung gefunden habe. Nicht so kurz wie Jonathans zyklische Indexierung, aber ich fand diesen Ansatz sehr interessant (und neuartig).
Erläuterung
Das Ziel ist die Verwendung der Transliteration (dh die Verwendung einer Zeichen-zu-Zeichen-Zuordnung), um das Eingabezeichen durch das Ausgabezeichen zu ersetzen. Dazu müssen wir die richtige Karte auswählen, je nachdem, ob es sich um einen Spiegel handelt
/
oder nicht\
. Wir ordnen von derSWEN
Liste eine andere zu, die wir unter bestimmten Bedingungen auswählen. Wenn die Eingabeliste lautetSWEN
, müssen die beiden Ausgabe-Maps die folgenden sein:Beachten Sie, dass diese in sortierter und umgekehrter Reihenfolge vorliegen (weshalb wir die scheinbar zufällige
SWEN
Reihenfolge als Eingabesatz gewählt haben). Wir könnten diese generieren, indem wir die Eingabeliste sortieren und das Ergebnis umkehren, wenn die Eingabe dies aufweist. Es gibt\
jedoch einen besseren Weg:quelle
SED
48(42 + 1 für -r) 435 Dank an Martin Ender gespart ♦
Nimmt die Eingabe als zweistellige Zeichenfolge an.
quelle
Mathematica, 98 Bytes
Anonyme Funktion. Nimmt zwei Zeichenfolgen als Eingabe und gibt eine Zeichenfolge als Ausgabe zurück.
quelle
C 81 Bytes
Verwendung
Ausgabe:
quelle
Pyth, 13 Bytes
Testsuite
Summieren Sie die Codepunkte, den modularen Index und die komprimierte Zeichenfolge.
quelle
TI-Basic, 40 Bytes
Codiert die Eingaben fest. Langweilig, aber der kürzeste Weg.
quelle