Inspiriert von dieser Herausforderung (oder genauer gesagt durch falsches Lesen) habe ich die folgende Herausforderung gefunden:
Wenn Sie eine Eingabezeichenfolge S haben, kehren Sie die Reihenfolge aller Groß- und Kleinbuchstaben um. Belassen Sie alle Zeichen, die keine Buchstaben sind. Zum Beispiel:
Beachten Sie, dass der Großbuchstabe W
(der erste Großbuchstabe) durch H
(den letzten) ersetzt wurde. Gleiches gilt für die Kleinbuchstaben: 'd' (der erste) wird durch e
(der letzte) ersetzt, l
(der zweite) durch l
(der letzte) ... Alle Nichtbuchstaben bleiben an Ort und Stelle.
Eingang
- Die Eingabe ist eine Zeichenfolge mit nur ASCII-Zeichen im Bereich 32-126.
- Die Eingabe ist garantiert mindestens 1 Zeichen lang und überschreitet nicht das Limit Ihrer Sprache.
Ausgabe
- Dieselbe Zeichenfolge, wobei die Zeichen wie beschrieben vertauscht wurden.
Zusätzliche Regeln
- Standardlücken sind verboten
- Die Antwort muss ein vollständiges Programm oder eine Funktion sein, kein Snippet oder ein REPL-Eintrag.
- Code-Golf , die kürzeste Antwort in Bytes gewinnt.
Testfälle
A
A
Ok
Ok
OK
KO
Hello, World!
Wdlro, Holle!
0123456789
0123456789
The quick brown Fox jumps over the lazy doge
Feg odyza lehtr Tev ospmu jxon wor bkci uqeh
odd
ddo
racecar
racecar
EtOn Em OsN R AaToNsIsIhT!!1!
ThIs Is NoT A RaNsOmEnOtE!!1!
.+
.*
Antworten:
MATL , 14 Bytes
Probieren Sie es bei MATL Online aus
Erläuterung
quelle
2:"tttXk>f)5MP(Yo
für 17 BytesNetzhaut , 19 Bytes
Retina hat keine direkte Möglichkeit, einen String umzukehren, aber wir können dies tun, indem wir die Sortierstufe ausnutzen:
Sortieren (
O
), sie als Zahlen lesen (#
) und dann die Reihenfolge umkehren (^
) aller Zeichenfolgen um, die mit der angegebenen Regex übereinstimmen (Kleinbuchstaben für die erste Zeile und Großbuchstaben für die zweite Zeile).Dies funktioniert, weil beim Versuch, Zeichenfolgen ohne numerische Zeichen als Zahlen zu lesen, diese wie folgt behandelt werden
0
, sodass alle Zeichen den gleichen Wert für die Sortierung haben. Da die Sortierung stabil ist, werden sie in derselben Reihenfolge belassen, und beim Umkehren wird die ursprüngliche Zeichenfolge umgekehrt zurückgegeben.Probieren Sie es online!
quelle
Perl , 45 Bytes
44 Byte Code +
-p
Flag.Probieren Sie es online!
Unicode-Zeichen werden klassifiziert
\p{Lu}
und\p{Ll}
entsprechen Groß- und Kleinbuchstaben.So
/\p{L$c}/
wird die Liste aller Groß- (oder Kleinbuchstaben) zurückgegeben (und darin gespeichert@T
).Und dann ersetzt der reguläre Ausdruck
s/\p{$c}/pop@T/ge
jeden Buchstaben (Groß- und Kleinbuchstaben) durch den letzten Buchstaben von,@T
während er von entfernt wird@T
.quelle
JavaScript (ES6),
74737170 ByteBearbeiten: 1 Byte dank @Arnauld gespeichert.
quelle
JavaScript (ES6), 92 Byte
Es hat bekam ein Weg , um die Vorteile der Ähnlichkeit zwischen dem regulären Ausdrücken sein ...
Testschnipsel
Code-Snippet anzeigen
quelle
f
? Sollte das nicht in der Byteanzahl sein?F
und sie dann zweimal rekursiv aufruft. Die äußere Funktion nennt sich eigentlich zu keinem Zeitpunkt..*
in regulären Ausdrücken?a
in([x],a,y)=>
) zu erfassenPerl 6 ,
7569 BytesWie es funktioniert
my @a=.comb;
Teilen Sie die Zeichenfolge in Zeichen auf und speichern Sie sie in einem Array.
for /<:Lu>/,/<:Ll>/
Für zwei Regexes, die mit Groß- und Kleinbuchstaben übereinstimmen ...
@(grep $_,@a)
Holen Sie sich einen Ausschnitt aller Array-Einträge, die dem regulären Ausdruck entsprechen.
.&{@$_=[R,] $_}
Weisen Sie sich die Rückseite des Slice zu.
[~] @a
Verketten Sie das geänderte Array, um erneut eine Zeichenfolge zu bilden, und geben Sie sie zurück.
-6 Bytes durch Diebstahl der Idee, Unicode-Klassen anstelle von Zeichenbereichen zu verwenden, aus der @ Dada-Lösung.
quelle
Jelly, 14 bytes
Try it online!
How it works
quelle
Bash + Unix utilities,
122121 bytesTry it online!
Not really very short; maybe someone can golf it further.
Input on stdin, output on stdout.
This will work correctly on inputs of less than 200 characters.
(Actually it correctly handles any string with fewer than 200 lower-case letters and fewer than 200 upper-case letters.)
If you increase the 99 in the code to 102 (at the cost of one additional byte), it will handle strings up to 205 characters.
However, you can't increase the 99 in the code beyond 102 since you'll then exceed sed's maximum argument length.
Here's a version without any particular input size limitation, but the count is a little longer, 137 bytes. (This longer version writes to an auxiliary file named t.)
Test runs:
quelle
sed
implementation installed on your system, but to GNUsed
you can add-r
option and remove the\
escaping of all parenthesis.Python 2, 115 bytes
Try it online!
quelle
exec
is parsed as usual Python code, so the for loop must be on its own line.Java (OpenJDK 8), 271 bytes
Try it online!
quelle
s->new String...
char[]o=s.toCharArray();char c;int b;
tochar o[]=s.toCharArray(),c,b;
; and both&&
to&
'; andc=o[i];return b>1?!Character.isUpperCase(c):!Character.isLowerCase(c);
toc=o[i];Character x=c;return b>1?!x.isUpperCase(c):!x.isLowerCase(c);
(259 bytes in total). And I probably missed some things to golf it more. Also, if you haven't seen it yet, tips for golfing in Java might be interesting to read.R, 107 bytes
Adapted from my response to the linked challenge. This is considerably easier than just swapping pairs. I wonder if I could get sub 100 with some golfs...
Try it online!
quelle