Eingang
Eine nicht leere, gemischte Zeichenfolge, die aus ASCII-Zeichen im Bereich .
Ausgabe
Die Ausgabe wird durch Anwenden aufeinanderfolgender Rotationen auf die Eingabezeichenfolge erhalten.
Für jeden Buchstaben ( [a-zA-Z]
) in der Eingabezeichenfolge von links nach rechts:
- Wenn der Buchstabe in Großbuchstaben geschrieben ist, drehen Sie alle Zeichen davor um eine Position nach links
- Wenn der Buchstabe in Kleinbuchstaben geschrieben ist, drehen Sie alle Zeichen davor um eine Position nach rechts
Beispiel
Eingabe: "Cb-Ad"
- Der erste Buchstabe ist ein " C ". Wir sollten nach links drehen, aber vor diesem " C " steht kein Zeichen . Es gibt also nichts zu drehen.
- Der nächste Buchstabe ist ein " b ". Wir drehen " C " nach rechts. Da es sich um ein einzelnes Zeichen handelt, bleibt es unverändert.
- Das Zeichen " - " löst keine Rotation aus, da es sich nicht um einen Buchstaben handelt.
- Der nächste Buchstabe ist ein " A ". Wir drehen " Cb- " nach links, was " bC Ad" ergibt
- Der vierte und letzte Buchstabe ist ein " d ". Wir drehen " b-CA " nach rechts, was " Ab-C d" ergibt
Daher ist die erwartete Ausgabe " Ab-Cd ".
Regeln
- Sie können Eingaben als Zeichenfolge oder als Array von Zeichen annehmen - je nach Sprache kann dies das Gleiche sein oder auch nicht.
- Sie können auch ein Array von Zeichen anstelle einer Zeichenfolge ausgeben.
- Das ist
ogl-edocfCode-Golf
Testfälle
"cbad" -> "abcd"
"ACBD" -> "ABCD"
"Cb-Ad" -> "Ab-Cd"
"caeBDF" -> "aBcDeF"
"aEcbDF" -> "abcDEF"
"ogl-edocf" -> "code-golf"
"W o,ollelrHd!" -> "Hello, World!"
"ti HIs SSta ET!" -> "tHis IS a tEST!"
code-golf
string
code-golf
string
code-golf
string
parsing
brainfuck
code-challenge
python
hello-world
error-message
code-golf
string
code-golf
number
integer
counting
subsequence
code-golf
string
cipher
code-golf
array-manipulation
arithmetic
integer
matrix
code-golf
math
sequence
code-golf
restricted-source
pi
popularity-contest
cops-and-robbers
polyglot
popularity-contest
cops-and-robbers
polyglot
code-golf
file-system
king-of-the-hill
code-golf
number
sequence
integer
rational-numbers
string
code-challenge
source-layout
code-golf
ascii-art
king-of-the-hill
code-golf
array-manipulation
sorting
code-golf
string
code-golf
restricted-source
source-layout
tips
math
code-challenge
permutations
logic-gates
code-golf
number
random
integer
code-golf
math
code-golf
math
number
decision-problem
king-of-the-hill
python
board-game
code-challenge
brainfuck
busy-beaver
code-golf
number
cops-and-robbers
polyglot
obfuscation
answer-chaining
code-golf
number
integer
conversion
code-golf
string
parsing
code-golf
ascii-art
number
king-of-the-hill
javascript
code-golf
source-layout
radiation-hardening
code-golf
array-manipulation
matrix
code-golf
string
graph-theory
code-golf
array-manipulation
decision-problem
code-golf
string
ascii-art
code-golf
string
code-golf
array-manipulation
Arnauld
quelle
quelle
.U
die Eingabe vom 2. Wert reduzieren. Auf diese Weise können Sie=k
vom Anfang bis)k
zum Ende wechseln, da sowohl die Eingabe als auch das Drucken implizit sind. Vollständiges Programm:.U+.>b-}ZG}Zr1GZ
- LinkPython 2 ,
1009895 BytesProbieren Sie es online!
quelle
Jelly , 14 Bytes
Ein monadischer Link, der eine Liste von Zeichen akzeptiert, die eine Liste von Zeichen ergibt.
Probieren Sie es online! Oder sehen Sie sich die Testsuite an .
Wie?
quelle
I
dasselbe tun wieḅ-
in diesem Fall? Es scheint hier zu funktionieren , aber nicht in Ihrem Code. Ich bin ein bisschen verwirrt, warum. Gibt es auch einen Befehl, um die gesamten Listen als getrennte Elemente in den Stapel in Jelly zu verschieben (Warten Sie, Jelly ist keine stapelbasierte Sprache, oder?)? In diesem Fall kann ein einfaches Subtrahieren verwendet werden, und Sie brauchen das Negat auch nicht, wenn ich mich nicht irre (ähnlich wie bei der letzten Änderung in meiner 05AB1E-Antwort).I
ergibt eine Liste - hinzufügenŒṘ
, um eine vollständige Darstellung zu sehen . SoØẠŒHċ€IṪN⁸ṙ;ð/
funktionieren würde.05AB1E ,
18171614 BytesProbieren Sie es online aus oder überprüfen Sie alle Testfälle .
Erläuterung:
quelle
K4 ,
4333 BytesLösung:
Beispiele:
Erläuterung:
Durchlaufen Sie die Eingabezeichenfolge und drehen Sie die vorherige Ausgabe um 1, -1 oder 0, je nachdem, an welcher Position sie in der Liste "a-zA-Z" steht.
Anmerkungen:
quelle
> <> ,
4543 BytesProbieren Sie es online!
Die Tatsache, dass> <> Stapelrotation hat, hilft, aber die Groß- und Kleinschreibung des Buchstabens überprüfen zu müssen, tut dies nicht.
Erläuterung:
quelle
Haskell ,
10191 Bytes-10 Bytes, inspiriert von Curtis Bechtels Antwort (verwenden Sie
'@'<c,c<'['
overelem c['A'..'Z']
und den entsprechenden Bereich für Kleinbuchstaben).Probieren Sie es online!
Erklärung / Ungolfed
Der Operator verwendet
(!)
eine nicht leere Zeichenfolge,x
für die ein Mustervergleich durchgeführt werden kann, und ein Zeichen:Jetzt können wir den Schwanz der Eingabe von links nach rechts verkleinern, beginnend mit dem ersten Zeichen der Eingabe, indem wir Folgendes verwenden:
quelle
Haskell ,
12292 BytesDanke an BWO für die Vorschläge! Ich habe auch viel gespart, indem ich einen etwas anderen Ansatz gewählt habe als meine ursprüngliche Antwort.
Probieren Sie es online!
quelle
(#)
, Nutzung,
über&&
, verwenden[l!!0,c]
überhead l:[c]
,1>0
stattTrue
, brauchen Sie nicht zu zählen ,f=
und Sie können nicht leere Eingabe übernehmen , die das spartl==[]
guard - Sie 13 Bytes speichern: Versuchen Sie es online!isLower
undisUpper
Golf in meinem Beitrag verwendet . Ich hoffe, dass du damit einverstanden bist, sonst werde ich meine Bearbeitung rückgängig machen.JavaScript (Node.js) ,
116102 BytesProbieren Sie es online!
Original (
116111106B)s=>Buffer(s).map((x,i)=>s=(t=s[S="slice"](i),i<2)?s:x>64&x<91?s[S](1,i)+s[0]+t:x>96&x<123?s[i-1]+s[S](0,i-1)+t:s)&&s
s=>Buffer(s).map((x,i)=>i<2|--x%32>25|x<64?s:s=[s[S="slice"](1,i)+s[0],s[i-1]+s[S](0,i-1)][+(x>95)]+s[S](i))&&s
s=>Buffer(s).map((x,i)=>!i|--x%32>25|x<64?s:s=(w=x>95,t=s.slice(1-w,i-w),w?s[i-1]+t:t+s[0])+s.slice(i))&&s
quelle
eval(`regex`)
als die Verwendung des Konstruktorseval(`regex`)
, also -2 + 2 = 0, und daher hilft es nicht, die Anzahl der Bytes zu reduzieren.eval()
wenn mindestens ein Flag verwendet wird:eval('/./g')
ist 3 Byte kürzer alsRegExp('.','g')
.Ruby , 51 Bytes
Probieren Sie es online!
Eingabe und Ausgabe sind Arrays von Zeichen
Der Trick:
Der Code ist ziemlich einfach, mit Ausnahme des Rotationsteils:
x ist ein einzelnes Zeichen, das ein Buchstabe sein kann. Der erste Ausdruck gibt
x=~/\W/
zurück,nil
wenn es sich um einen Buchstaben handelt, und ansonsten 0. Wenn es 0 ist, sind wir fertig. Wenn nicht,or
prüft die Logik den zweiten Ausdruck:?_<=>x
Gibt -1 für Großbuchstaben und 1 für Kleinbuchstaben zurück. Die Rotation ist also:quelle
Rot , 110 Bytes
Probieren Sie es online!
Erläuterung:
quelle
Perl 6 , 47 Bytes
Probieren Sie es online!
Funktioniert mit einer Reihe von Zeichen.
quelle
Japt,
171614 BytesNimmt Eingaben als Array von Zeichen und gibt eine Zeichenfolge aus
Versuch es
Erläuterung
quelle
Jelly , 19 Bytes
Probieren Sie es online!
quelle
Java 10,
149119 BytesPort of @ShieruAsakoto Antworte mit JavaScript , also stelle sicher, dass du ihn positiv bewertest.
Probieren Sie es online aus.
Erläuterung:
quelle
Stax , 32 Bytes
Führen Sie es aus und debuggen Sie es
Viel Stack-Swap, was wahrscheinlich unnötig ist. Ich würde das wirklich gerne mehr runterholen, aber ich hatte Mühe, den Stapel zu ordnen. Vielleicht kann jemand es herausfinden, wenn er gelangweilt ist. Ich werde weiter daran arbeiten.
quelle
Attache , 69 Bytes
Probieren Sie es online!
Erläuterung
Allgemeine Form
Die Funktion sieht im Allgemeinen so aus:
Welche faltet
{...}
über jedes Mitglied im Bereich von0
bis#input - 1
(Iota
) , beginnend mit der Eingabe als Startwert.Die innere Funktion
Die folgende Funktion wird aufgerufen als
f[building, index]
und wird mit jedem Index von0
bis#input
exklusiv aufgerufen .@SplitAt
ruftSplitAt
diese Argumente auf und teilt die Eingabezeichenfolge aufindex
.Im Wesentlichen dreht diese Funktion den linken Teil der Zeichenfolge entsprechend dem ersten Zeichen des rechten Teils.
quelle
Holzkohle , 20 Bytes
Probieren Sie es online! Link ist eine ausführliche Version des Codes. Erläuterung:
Schleife über die eingegebenen Zeichen.
Ordnen Sie die Zeichenfolge der bisher gesammelten Zeichen zu, und indizieren Sie sie zyklisch in die bisher gesammelten Zeichen, wobei der Index inkrementiert oder dekrementiert wird, wenn das aktuelle Zeichen Groß- oder Kleinbuchstaben enthält. Damit ist die Drehung abgeschlossen. Das nächste Zeichen wird dann verkettet und das Ergebnis dem String zurückgegeben.
Drucken Sie das Ergebnis.
quelle
R ,
107102100 BytesMassiv, weil Rs Saitenmanipulation sperrig ist. Kann es jemand unter 100 bekommen?
-5 Bytes mit dem Trick "Setze Schleifenvariablen auf F, um Initialisierung zu vermeiden".
-2 Bytes, wenn angenommen wird, dass alle Zeichen druckbar sind und
2*!k%%97>25
nicht2*k%in%97:122
zum Testen von Kleinbuchstaben verwendet werden, sondern mit Operatorpriorität.Probieren Sie es online!
quelle
Japt ,
2523 BytesIch gebe auf, kann es nicht kürzer machen
-2 Bytes von @ETHproductions
Probieren Sie es online!
quelle
éXè\a -Xè\A
:-( Sie könnten zwei Bytes sparen, indem Sie das doppelte Leerzeichen in a ändern)
und entfernen©
(implizites Komma bedeutet, dassU
es noch ausgegeben wird)ÃU
indem Sie das-h
Flag ablegen und verwenden .Retina ,
676458 Bytes-9 Bytes dank @Neil Entfernen der drei unnötigen, die
?
ich hinzugefügt hatte, sowie der unnötigen(.*)
im Sonst-Fall.Probieren Sie es online aus oder überprüfen Sie alle Testfälle . (ANMERKUNG: Ausgaben mit einer nachgestellten Zeile. Die Kopfzeile in der Testsuite dient zum Testen jeder Eingabezeile als separater Testfall, und die Fußzeile dient zum Entfernen dieser nachgestellten Zeile, um eine kompaktere Ausgabe zu erzielen.)
Erläuterung:
Stellen Sie eine neue Zeile vor die Eingabe:
Ersetzen Sie weiter, solange wir eine Übereinstimmung finden können:
Alles andere sind drei verschiedene Schecks, die zusammengeführt werden:
Wenn das Zeichen direkt nach dem Zeilenumbruch ein Kleinbuchstabe ist: Drehen Sie alles vor dem Zeilenumbruch einmal nach rechts und hängen Sie dann das Zeichen und den Zeilenumbruch an:
Wenn das Zeichen direkt nach der neuen Zeile ein Großbuchstabe ist: Drehen Sie alles vor der neuen Zeile einmal nach links und hängen Sie dann das Zeichen und die neue Zeile an:
Andernfalls (weder Klein- noch Großbuchstaben): Verschieben Sie die neue Zeile für die nächste Iteration einfach einmal nach rechts:
Diese drei Prüfungen werden mit regulären ODER-Anweisungen (
|
) und Ersetzungen größerer Gruppen zusammengeführt, um das Verhalten wie folgt zu verbessernif(lowercase) ... elseif(uppercase) ... else ...
:quelle
?
s brauchen - wenn es noch nichts zu drehen gibt, spielt es keine Rolle, ob es einen Buchstaben gibt.(.*)¶(.)
durch$1$2¶
kann auch auf das Ersetzen¶(.)
durch vereinfacht werden,$1¶
da das Ergebnis durch das andere Capture nicht beeinflusst wird.MATL , 20 Bytes
Probieren Sie es online!
-4 Bytes dank Luis Mendo.
Konvertiert Groß- / Kleinschreibung / Nichtbuchstaben in [-1,0,1] (erste Hälfte des Programms). Wendet die Schaltung nacheinander an (zweite Hälfte). Ich mache mir einen Hirnschaden, wenn es eine bessere Möglichkeit gibt, Groß- / Kleinschreibung auf [-1,0,1] abzubilden (siehe die zweite Version), und vielleicht eine Möglichkeit, die Zeichenfolge sofort umzukehren, um die beiden zu beseitigen
w
wird für das benötigt&)
.quelle
C (Klappern) ,
168159153119 Bytes-26 danke an @ceilingcat
Probieren Sie es online!
quelle
g=a[j=i++];islower(a[i])?bcopy(a,a+1,j)
statta[j=i++];islower(a[i])?g=a[j],bcopy(a,a+1,j)
Pyth, 16 Bytes
Probieren Sie es hier aus!
Erläuterung:
quelle