Aufgabe: Bei einer Eingabe, die genau aus einem der Zeichen besteht <>^v
, geben Sie eine zweite Eingabe aus, die aus den druckbaren ASCII-Zeichen (vom Leerzeichen bis zur Tilde) besteht und auf den Pfeil ausgerichtet ist.
Angenommen, die zweite Eingabe für das Programm lautet ABC
. Das sollte es tun:
- Eingabe
>
: DruckenABC
. - Eingabe
<
: DruckenCBA
. - Eingabe
^
: DruckenC\nB\nA
oder Eingabe um -90 ° gedreht. - Eingabe
v
: DruckenA\nB\nC
oder Eingabe um 90 ° gedreht.
Testfälle
input => \n output
---
">", "thanks!" =>
thanks!
---
"<", "Hello, World!" =>
!dlroW ,olleH
---
"^", "This is text." =>
.
t
x
e
t
s
i
s
i
h
T
---
"v", "Tokyo" =>
T
o
k
y
o
---
"<", ">>>" =>
>>>
Dies ist ein Code-Golf , also gewinnt das kürzeste Programm in Bytes.
>ABC
>
Orientierung.Antworten:
MATL ,
106 Bytes4 Bytes gespart dank Martin!
Probieren Sie es online!
Alte Version, ohne Modulo-Operationen: 10 Bytes
Probieren Sie es online!
quelle
mod 11
Trick sparen (du musst aber umgekehrt drehen) .Python 3,
645148 Bytes6 Bytes gespart dank xnor.
7 Bytes dank Lynn gespart.
3 Bytes gespart dank DSM und Morgan aus so Python.
Die Funktion akzeptiert eines der Zeichen von
<>^v
als erstes Argument und die Zeichenfolge, die gedreht werden muss, als zweites Argument.Hier ist eine besser lesbare Version:
quelle
s[1|-(c in'<^')]
undsep='\n'*(c in'^v')
lambda
ob Sie esjoin
mit Ihrem Sep verwenden, anstatt zu drucken.Haskell, 57 Bytes
Anwendungsbeispiel:
f "v" "ABC"
->"A\nB\nC"
.Richtung
>
ist die Funktion Idendity,<
kehrt sie das Argument,v
fügt eine neue Zeile zu jedem Zeichen in der Zeichenfolge und fällt die letzten und^
wirdv
gefolgt von<
.quelle
Japt, 9 Bytes
Inspiriert von @ DonMueslis Antwort, obwohl ich gerade bemerkt habe, dass die CJam genau dieselbe Technik verwendet. Online testen!
Wie es funktioniert
quelle
Error: Japt.stdout must be sent to an HTMLElement
usw.CJam, 13 Bytes
Die Eingabe ist das Ausrichtungszeichen, gefolgt von der Zeichenfolge, die gedreht werden soll.
Teste es hier.
Erläuterung
Ja, für Modulo-Magie. Wenn Sie die vier Zeichen modulo 11 nehmen, ordnen Sie sie den folgenden Elementen zu:
Dies sind alle verschieden Modulo 4 und was noch wichtiger sind sie ordentlich zu erhöhen:
3, 0, 1, 2
. Das heißt, wir können das Ergebnis von einfach verwendenmod 11
, um zu bestimmen, wie oft gedreht werden soll (ohne dass ein expliziter Hinweis erforderlich istmod 4
, da vier Drehungen ohnehin ein No-Op sind). Normalerweise müssten wir diese Zahlen um 1 versetzen, so dass sie>
tatsächlich8
ein No-Op ergeben, aber die Art und Weise, wie ich sie drehe, kehrt die Zeichenfolge bei der ersten Anwendung tatsächlich um, sodass wir immer eine Umdrehung kostenlos erhalten.quelle
Pyth,
1715Probieren Sie es hier aus oder starten Sie die Test Suite
2 Bytes gespart dank Jakube!
Alternativ mit Mod-Tricks:
Probieren Sie es hier aus .
quelle
Julia, 51 Bytes
Dies ist eine Funktion, die a
Char
und eine Zeichenfolge akzeptiert und eine Zeichenfolge zurückgibt.Sei
d
das Zeichen für die Richtung unds
die Zeichenfolge. Wennd
links oder oben steht, verwenden wir die Umkehrung vons
, ansonsten verwenden wirs
wie angegeben. Wir konstruieren ein Trennzeichen als leere Zeichenfolged
(links oder rechts) oder als neue Zeiled
(oben oder unten). Übergeben Sie die Zeichenfolge und das Trennzeichen anjoin
, wodurch das Trennzeichen zwischen den einzelnen Zeichen der Zeichenfolge eingefügt und eine Zeichenfolge zurückgegeben wird.Überprüfen Sie alle Testfälle online
quelle
Bash + GNU Utilities, 67
quelle
-q
‚s, aber sie tunJavaScript (ES6),
766765 BytesPort von @Alex A.'s Julia Antwort. Bearbeiten: 9 Bytes dank @ETHproductions gespeichert. Zwei Bytes getrennt gespeichert dank @ edc65.
quelle
/[v^]/.test(a)
=>'Z'<a
?:
Version war 1 Byte kürzer.(/v|>/.test(a)?[...b]:[...b].reverse())...
sollte 65 seinPerl,
5451+ 1 = 52 BytesBenötigt die
-n
Flagge und die freie-M5.010
|-E
. Nimmt Eingaben wie folgt vordirection\nline
:Ich mag das
$/x/[v^]/
sieht aus wie ein Ersatz.Wie es funktioniert:
quelle
PowerShell, 84 Byte
Dies wird für Leute, die mit PowerShell nicht vertraut sind, ein völliger Kauderwelsch sein. Lass es uns durchgehen.
Nimmt Eingaben
param([char]$a,$b)
mit einem expliziten Cast-to-Character für$a
. Der Rest des Programms ist eine Aussage. Wir werden mit der ersten Hälfte beginnen, bis zum-join
.Wir erstellen ein neues dynamisches Array
(...,...)
und indizieren es mit$a%7-eq6
. Die ASCII - Werte fürv
und>
sind116
und62
sind, und116%7 = 62%7 = 6
, und das sind die beiden Richtungen , dass „Erhöhung“ nach unten und nach rechts. Wenn dies der Fall-eq
ist$true
, nehmen wir den zweiten Wert$b[0..$c]
oder ein Array der Zeichen$b
bis zum Ende . Wir erhalten den Wert$c
vom ersten Wert,$b[($c=$b.length)..0]
der ausgewählt wird, wenn das Eingabezeichen^
oder ist<
(dh, die Zeichenfolge wird rückwärts durchlaufen). Es ist wichtig zu beachten, dass der$c
Wert auch dann berechnet und gespeichert wird, wenn der zweite Wert ausgewählt wird, sodass wir ihn als eine solche Verknüpfung wiederverwenden können.Wir haben jetzt also eine Reihe von Zeichen, die entweder vorwärts oder rückwärts laufen. Wir haben dann
-join
diese Zeichen zusammen mit dem Ergebnis eines anderen dynamischen Array-Index. Dieses Mal wählen wir basierend darauf aus, ob der ASCII-Wert für$a
darunter liegt90
(wirklich viele Werte würden funktionieren, ich habe diesen ausgewählt, nur weil). Da>
und<
beide unten einen Wert haben90
,-lt
ist das$false
, also wählen wir die leere Zeichenfolge aus""
, und somit wird das Zeichen-Array einfach verkettet. Andernfalls wählen wir das Zeilenumbruchzeichen aus"`n"
, um das Zeichen -Array zusammen mit Zeilenumbrüchen zu verbinden.Diese resultierende Zeichenfolge verbleibt in der Pipeline, und die Ausgabe ist implizit.
Beispiel
quelle
C
123,119,117,114 BytesGolf gespielt:
Testprogramm, mit Erklärungen & etwas ungolfed Code:
Trinkgelder willkommen!
quelle
Netzhaut , 60 Bytes
Braucht Golf ...
Die Eingabe erfolgt alle als eine Zeichenfolge, z
^ABC
.^
oder<
, kehren Sie die Zeichenfolge um<
oder>
, entfernen Sie die ZeilenumbrücheProbieren Sie es online aus.
quelle
Dyalog APL , 15 Bytes
⍪
Make - String in 1-Spaltentabelle⍣(
...)
repeat ( n ) mal die⍞
String - Eingang⎕UCS
Umrechnen in UCS - Codepunkt11|
Teilungs Rest , wenn sie durch 11 geteilt⌽∘⍉
Drehen -90 ° (Flip-transponiert)Alternative Methode (gleiche Länge):
⎕
ausgewertete Eingabe erhalten (man muss also zB '^' oder den Namen eines Programms / einer Variablen eingeben, das / die das gewünschte Zeichen zurückgibt)'<^>v'⍳
Index in den Stringquelle
Jolf, 22 Bytes
Probieren Sie es hier aus! Sie sollten ersetzen
ƒ
mit\x9f
. Nimmt den Stich, dann den Richtungscharakter.quelle
JavaScript ES6,
918384 BytesKonstruiert die erforderlichen Zeichenfolgen und ermittelt den Index, in dem
a
liegt. WirdindexOf
verwendet, weil^
es sich um ein Regex-Token handelt. Danke an ETHproductions für die Fehlerbehebung und die rasierten Bytes!quelle
f("v","abc")
kehrtc\nb\na
für mich zurück.(a,b)=>[b,(c=[...b].reverse()).join``,[...b].join`\n`,c.join`\n`]["><v^".indexOf(a)]
c
es buchstäblich vergessend
.JavaScript (ES6) 71
Prüfung
quelle
Perl 5, 67 Bytes
66 plus eins für
-p
Die Eingabe ist eine einzelne Zeichenfolge, deren erstes Zeichen die Ausrichtung definiert.
quelle
DUP , 48 Bytes
Try it here.
Anonymes Lambda, das sowohl Argument- als auch STDIN-Eingaben akzeptiert. Verwendung:
Erläuterung
quelle
Im Ernst, 41 Bytes
Nimmt den String als erste Eingabe und die Richtung (
><v^
) als zweite Eingabe.Probieren Sie es online!
quelle
D, 198 Bytes
: c
Weniger golfen:
quelle