Tauschen Sie bei einer Eingabezeichenfolge, die nur alphanumerische ASCII-Zeichen enthält und mit einem Buchstaben beginnt, jeden Buchstabenlauf mit dem folgenden Ziffernlauf aus.
Ein Lauf ist eine Folge aufeinanderfolgender Buchstaben oder Ziffern. Beachten Sie, dass in dem Fall, in dem die Eingabezeichenfolge mit einer Folge von Buchstaben endet, diese Folge unberührt bleibt.
Beispiel für einen Rundgang
Zum Beispiel bei gegebener Eingabezeichenfolge uV5Pt3I0
:
- Getrennte Buchstaben- und Ziffernfolgen:
uV 5 Pt 3 I 0
- Laufpaare identifizieren:
(uV 5) (Pt 3) (I 0)
- Swap Paare von Läufen:
(5 uV) (3 Pt) (0 I)
- Verketten:
5uV3Pt0I
Beispiele
uV5Pt3I0 -> 5uV3Pt0I
J0i0m8 -> 0J0i8m
abc256 -> 256abc
Hennebont56Fr -> 56HennebontFr
Em5sA55Ve777Rien -> 5Em55sA777VeRien
nOoP -> nOoP
Das ist Code-Golf, also gewinnt die kürzeste Antwort in Bytes. Erklärungen sind erwünscht.
(a,(b,y))<-span(<':')<$>span(>'9')s
.(a,(b,y):_)<-lex<$>span(>'9')s
: Probieren Sie es online aus!lex
funktioniert, also werde ich es vorerst unterlassen. Gut zu wissen, dass es so etwas in Prelude gibtJavaScript (ES6), 34 Byte
Versuch es
quelle
Pyth , 15 Bytes
Erläuterung
Testsuite .
quelle
Python 2 , 49 Bytes
Jede Nicht-Regex-Lösung, die ich ausprobierte, war länger. : P
Probieren Sie es online!
quelle
Japt (v2.0a0), 16 Bytes
Online testen!
Hinweis: Dies ist ein instabiles Alpha. Wenn dieser Link nicht funktioniert, können Sie eine etwas längere Version in Version 1.4.4 verwenden: Testen Sie sie online!
Erläuterung
quelle
ò
.CJam ,
323028 BytesCJam hat keine regulären Ausdrücke und keine "Aufteilung in Ziffern und Buchstaben" oder so, also war das irgendwie schmerzhaft.
Probieren Sie es online!
Erläuterung
quelle
Gema , 11 Zeichen
Probelauf:
quelle
Java 8, 38 Bytes
Nicht viel zu erklären. Verwendet dieselbe Methode wie die Retina-Antwort von @Okx , die in Java nicht kürzer sein kann.
Probieren Sie es hier aus.
quelle
Japt, 18 Bytes
Probier es aus
quelle
Sed, 29 Bytes
Führen Sie mit -r.
Verwendet Erfassungsgruppen und ersetzt sie in umgekehrter Reihenfolge.
quelle
[A-Za-z]
zu[^0-9]
. Sie müssen das Flag jedoch als Teil Ihres Codes zählen.sed <command>
undsed -r <command>
, also drei Bytes.sed -f filename
undsed -rf filename
(oder zwischensed -e 'command'
undsed -re 'command'
): ein einzelnes Byte.s/([a-z]+)([0-9]+)|([0-9]+)([a-z]+)/\2\1\4\3/gi
bei 48 Bytes. Ansonsten ähnlich.Gelee , 12 Bytes
Probieren Sie es online!
Erläuterung:
quelle
PHP, kein regulärer Ausdruck, 73 Bytes
Laufen Sie als Rohr mit
-nR
oder testen Sie es online .Nervenzusammenbruch
quelle
~
anstelle vona&
PHP , 45 Bytes
Probieren Sie es online!
quelle
C #, 71 Bytes
Nur schade, dass reguläre Ausdrücke in C # so lang sind.
Probieren Sie es online!
Voll / Formatierte Version:
quelle
Clojure,
10488 BytesOh, Regex ist wirklich praktisch ... trotzdem ( TIO ):
partition-by
Aufteilen in aufeinanderfolgende Läufe basierend auf dem Rückgabewert dieser Funktion,partition-all
Aufteilen in Partitionen von 2 (die Paare, die wir austauschen werden),map reverse
Umkehren dieser Läufe ,flatten
Entfernen der verschachtelten Listenstruktur und schließlich Ausgeben einer Zeichenfolge. Wennpartition
stattdessen verwendet wurdepartition-all
und wir eine ungerade Anzahl von Stücken hatten, wurde der letzte verworfen.Original verwendet ausführlich, aber lustig
(juxt second first)
und(set"0123456789")
stattreverse
und ASCII-Integer-Bereiche.quelle
QuadR , 15 Bytes
Probieren Sie es online!
Erläuterung die Okx offen gestohlen wurde :
Dies ersetzt den regulären Ausdruck
(\D+)(\d+)
durch\2\1
. Lassen Sie uns das aufschlüsseln, wenn Sie nicht wissen, was das bedeutet.Das
\D
bedeutet "Finde alles, was keine Zahl ist".\d
bedeutet "Finde alles, was eine Zahl ist". Das+
Zeichen bedeutet "Mindestens einmal übereinstimmen, aber versuchen Sie es so oft wie möglich". Die Klammern definieren eine Gruppe. Die erste Gruppe ist(\D+)
und die zweite ist(\d+)
In der zweiten Zeile sagen wir, dass wir setzen möchten, was auch immer von der zweiten Gruppe abgeglichen wurde, gefolgt von dem, was von der ersten Gruppe abgeglichen wurde. Dies tauscht die Buchstaben- und Ziffernläufe effektiv aus.
quelle
PowerShell , 40 Byte
Probieren Sie es online!
PowerShell ist dafür ziemlich ideal, da es reguläres Suchen und Ersetzen unterstützt. Requisiten gehen zu @Okx für die Regex-Lösung.
quelle
Pip , 17 Bytes
Übernimmt die Eingabe als Befehlszeilenargument. Probieren Sie es online!
Erläuterung
Hierbei wird die Standardstrategie zum Ersetzen von Regex verwendet, die etwas Golf spielt.
Die Regex ist
-C+XL.C+XD
, die ausgewertet`(?i)([a-z]+)(\d+)`
:Die Ersetzung ist
{c.b}
eine Rückruffunktion, die die zweite Gruppe (c
) und die erste Gruppe (b
) verkettet . (Das erste Argument der Funktiona
enthält die gesamte Übereinstimmung.)Dies ist drei Bytes kürzer als die naive
aR`(\D+)(\d+)``\2\1`
.quelle
Brainfuck , 98 Bytes
Probieren Sie es online!
Erläuterung
Dieses Programm verwaltet eine Reihe von Briefen, die noch nicht ausgegeben wurden, und gibt sie gegebenenfalls aus.
Der Schlüssel zu diesem Programm ist
>>----[---->+<<<-[>]>]
. Die drei Zellen rechts von der Eingabezelle beginnen bei Null. Wenn es sich bei der Eingabe um einen Codepunkt zwischen 1 und einschließlich 63 handelt, wird der Zeiger um eine Stelle nach rechts verschoben und die Eingabe zwei Stellen rechts von dieser neuen Position platziert. Andernfalls bewegt sich der Zeiger zwei Stellen nach rechts, die Zelle eine Stelle rechts von der neuen Position wird 63, und dieselbe 63 wird von der Eingabezelle subtrahiert. Dies unterteilt die Eingabe in Buchstaben (65-122) und Ziffern (48-57).quelle
Ruby , 31 Bytes
Probieren Sie es online!
quelle
Mathematica, 129 Bytes
quelle