Étant donné une chaîne d'entrée contenant uniquement des caractères alphanumériques ASCII et commençant par une lettre, permutez chaque série de lettres avec la série de chiffres qui suit.
Une course est une séquence de lettres ou de chiffres consécutifs. Notez que dans le cas où la chaîne d'entrée se termine par une série de lettres, cette séquence n'est pas modifiée.
Exemple de visite
Par exemple, étant donné la chaîne d'entrée uV5Pt3I0
:
- Séparez les séries de lettres et les séries de chiffres:
uV 5 Pt 3 I 0
- Identifiez les paires de pistes:
(uV 5) (Pt 3) (I 0)
- Échangez des paires de pistes:
(5 uV) (3 Pt) (0 I)
- Enchaîner:
5uV3Pt0I
Exemples
uV5Pt3I0 -> 5uV3Pt0I
J0i0m8 -> 0J0i8m
abc256 -> 256abc
Hennebont56Fr -> 56HennebontFr
Em5sA55Ve777Rien -> 5Em55sA777VeRien
nOoP -> nOoP
Il s'agit de code-golf, donc la réponse la plus courte en octets l'emporte. Des explications sont encouragées.
(a,(b,y))<-span(<':')<$>span(>'9')s
.(a,(b,y):_)<-lex<$>span(>'9')s
: essayez-le en ligne!lex
marche, donc je vais m'abstenir de l'inclure pour l'instant. En tout cas, bon de savoir qu'il y a quelque chose comme ça dans PreludeJavaScript (ES6), 34 octets
Essayez-le
la source
Pyth , 15 octets
Explication
Suite de tests .
la source
Python 2 , 49 octets
Chaque solution non regex que j'ai essayée était plus longue. : P
Essayez-le en ligne!
la source
Japt (v2.0a0), 16 octets
Testez-le en ligne!
Remarque: il s'agit d'un alpha instable, donc si ce lien se brise, vous pouvez utiliser une version légèrement plus longue en v1.4.4: testez- le en ligne!
Explication
la source
ò
.CJam ,
323028 octetsCJam n'a pas d'expressions régulières et pas de "division en chiffres et lettres" ou ainsi de suite, donc c'était assez douloureux.
Essayez-le en ligne!
Explication
la source
Gema , 11 personnages
Exemple d'exécution:
la source
Java 8, 38 octets
Pas grand chose à expliquer. Utilise la même méthode que la réponse Retina de @Okx , qui ne peut pas être plus courte en Java.
Essayez-le ici.
la source
Japt, 18 octets
Essaye-le
la source
Sed, 29 octets
Exécutez avec -r.
Utilise les groupes de capture et les remplace dans l'ordre inverse.
la source
[A-Za-z]
à[^0-9]
. Cependant, vous devez compter le drapeau dans votre code.sed <command>
etsed -r <command>
, donc trois octets.sed -f filename
etsed -rf filename
(ou entresed -e 'command'
etsed -re 'command'
): un seul octet.s/([a-z]+)([0-9]+)|([0-9]+)([a-z]+)/\2\1\4\3/gi
à 48 octets. Sinon, à peu près la même chose.Gelée , 12 octets
Essayez-le en ligne!
Explication:
la source
PHP, aucune expression régulière, 73 octets
Exécuter en tant que pipe avec
-nR
ou tester en ligne .panne
la source
~
place dea&
PHP , 45 octets
Essayez-le en ligne!
la source
C #, 71 octets
Juste une honte, les expressions régulières sont si longues en C #.
Essayez-le en ligne!
Version complète / formatée:
la source
Clojure,
10488 octetsOh regex est vraiment pratique ... de toute façon ( TIO ):
partition-by
se divise en exécutions consécutives en fonction de la valeur de retour de cette fonction,partition-all
se divise en partitions de 2 (les paires que nous allons échanger), lesmap reverse
inverse,flatten
se débarrasse de la structure de liste imbriquée et, finalement, nous produirons une chaîne. Si apartition
été utilisé à la place departition-all
et que nous avions un nombre impair de morceaux, le dernier serait jeté.Original utilisé verbeux mais amusant
(juxt second first)
et(set"0123456789")
au lieu dereverse
et des plages entières ASCII.la source
QuadR , 15 octets
Essayez-le en ligne!
Explication manifestement volée à Okx :
Cela remplace l'expression régulière
(\D+)(\d+)
par\2\1
. Décomposons cela si vous ne savez pas ce que cela signifie.Le
\D
moyen «correspond à tout ce qui n'est pas un nombre».\d
signifie «correspondre à tout ce qui est un nombre». le+
signe signifie «correspond à cela au moins une fois mais essayez de le faire autant de fois que possible». Les crochets définissent un groupe. Le premier groupe est(\D+)
et le second est(\d+)
Dans la deuxième ligne, nous disons que nous voulons mettre tout ce qui a été égalé par le deuxième groupe, suivi de tout ce qui a été égalé par le premier groupe. Cela permute efficacement les cycles de lettres et de chiffres.
la source
PowerShell , 40 octets
Essayez-le en ligne!
PowerShell est assez idéal pour cela, car il prend en charge la recherche et le remplacement regex prêts à l'emploi. Les accessoires vont à @Okx pour la solution regex.
la source
Pip , 17 octets
Prend l'entrée comme argument de ligne de commande. Essayez-le en ligne!
Explication
Cela utilise la stratégie standard de remplacement des regex, quelque peu golfée.
Le regex est
-C+XL.C+XD
, qui évalue à`(?i)([a-z]+)(\d+)`
:Le remplacement est
{c.b}
une fonction de rappel qui concatène le deuxième groupe (c
) et le premier groupe (b
). (Le premier argument de la fonctiona
,, contient toute la correspondance.)C'est trois octets de moins que le naïf
aR`(\D+)(\d+)``\2\1`
.la source
brainfuck , 98 octets
Essayez-le en ligne!
Explication
Ce programme maintient une file d'attente de lettres qui n'ont pas encore été sorties, et les sort le cas échéant.
La clé de ce programme est
>>----[---->+<<<-[>]>]
. Les trois cellules à droite de la cellule d'entrée commencent à zéro. Si l'entrée est un point de code compris entre 1 et 63 inclus, cela déplace le pointeur d'un espace vers la droite et place l'entrée deux espaces à droite de cette nouvelle position. Sinon, le pointeur se déplace de deux espaces vers la droite, la cellule un espace à droite de la nouvelle position devient 63, et le même 63 est soustrait de la cellule d'entrée. Cela divise parfaitement l'entrée en lettres (65-122) et en chiffres (48-57).la source
Rubis , 31 octets
Essayez-le en ligne!
la source
Mathematica, 129 octets
la source