Inspiré par ce défi (ou, plus précisément, en le mal interprété), j'ai trouvé le défi suivant:
Étant donné une chaîne d'entrée S, inversez l'ordre de tous les caractères majuscules et de tous les caractères minuscules. Laissez tous les caractères non-lettre en place. Par exemple:
Notez que la majuscule W
(la première lettre majuscule) a été remplacée par H
(la dernière). Il en va de même pour les lettres minuscules: 'd' (le premier) est échangé avec e
(le dernier), l
(le deuxième) est remplacé par l
(pen-ultimate) ... Tous les caractères non-lettre sont laissés en place.
Contribution
- L'entrée est une chaîne contenant uniquement des caractères ASCII compris entre 32 et 126.
- La saisie est garantie sur au moins 1 caractère et ne dépassera pas la limite de votre langue.
Sortie
- Cette même chaîne, avec les caractères échangés comme décrit.
Règles supplémentaires
- Les failles standard sont interdites
- La réponse doit être un programme complet ou une fonction, pas un extrait de code ou une entrée REPL.
- code-golf , réponse la plus courte en octets gagne.
Cas de test
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!
.+
à.*
)Réponses:
MATL , 14 octets
Essayez-le sur MATL Online
Explication
la source
2:"tttXk>f)5MP(Yo
pour 17 octetsRétine , 19 octets
Retina n'a pas de moyen direct pour inverser une chaîne, mais nous pouvons le faire en exploitant l'étape de tri:
Trier (
O
), en les lisant sous forme de nombres (#
), puis inverser l'ordre (^
), de toutes les chaînes correspondant à l'expression régulière donnée (lettres minuscules pour la première ligne et lettres majuscules pour la seconde).Cela fonctionne parce que lorsque nous essayons de lire des chaînes sans caractères numériques comme des nombres, elles sont traitées comme
0
si tous les caractères ont la même valeur pour le tri. Étant donné que le tri est stable, ils sont laissés dans le même ordre et leur inversion renvoie la chaîne d'origine inversée.Essayez-le en ligne!
la source
Perl , 45 octets
44 octets de code +
-p
indicateur.Essayez-le en ligne!
Classes de caractères Unicode
\p{Lu}
et\p{Ll}
correspond respectivement aux lettres majuscules et minuscules.Ainsi
/\p{L$c}/
, la liste de toutes les lettres majuscules (ou minuscules) sera retournée (et stockée à l'intérieur@T
).Et puis, l'expression régulière
s/\p{$c}/pop@T/ge
remplacera chaque lettre (majuscule puis minuscule) par la dernière lettre de@T
tout en la supprimant@T
.la source
JavaScript (ES6),
74737170 octetsEdit: 1 octet enregistré grâce à @Arnauld.
la source
JavaScript (ES6), 92 octets
Il a obtenu d'être un moyen de tirer profit de la similitude entre les expressions rationnelles ...
Extrait de test
Afficher l'extrait de code
la source
f
? Ne devrait-ce pas être dans le nombre d'octets?F
puis l'appelle récursivement deux fois. La fonction externe ne s'appelle en fait à aucun moment..*
dans les expressions rationnelles?a
dans([x],a,y)=>
)Perl 6 ,
7569 octetsComment ça marche
my @a=.comb;
Divisez la chaîne en caractères et stockez-les dans un tableau.
for /<:Lu>/,/<:Ll>/
Pour deux expressions rationnelles correspondant respectivement aux lettres majuscules et minuscules ...
@(grep $_,@a)
Obtenez une tranche de toutes les entrées de tableau correspondant à l'expression régulière.
.&{@$_=[R,] $_}
Attribuez-lui l'inverse de la tranche.
[~] @a
Concaténez le tableau modifié pour former à nouveau une chaîne et renvoyez-le.
-6 octets en volant l'idée d'utiliser des classes Unicode au lieu de plages de caractères, dans la solution de @ Dada.
la source
Gelée , 14 octets
Essayez-le en ligne!
Comment ça marche
la source
Utilitaires Bash + Unix,
122121 octetsEssayez-le en ligne!
Pas vraiment très court; peut-être que quelqu'un peut jouer au golf plus loin.
Entrée sur stdin, sortie sur stdout.
Cela fonctionnera correctement sur les entrées de moins de 200 caractères.
(En fait, il gère correctement toute chaîne contenant moins de 200 lettres minuscules et moins de 200 lettres majuscules.)
Si vous augmentez le 99 dans le code à 102 (au prix d'un octet supplémentaire), il traitera les chaînes jusqu'à 205 caractères.
Cependant, vous ne pouvez pas augmenter le 99 dans le code au-delà de 102, car vous dépasserez alors la longueur d'argument maximale de sed.
Voici une version sans limitation de taille d'entrée particulière, mais le nombre est un peu plus long, 137 octets. (Cette version plus longue écrit dans un fichier auxiliaire nommé t.)
Essais:
la source
sed
implémentation installée sur votre système, mais à GNUsed
vous pouvez ajouter une-r
option et supprimer l'\
échappement de toutes les parenthèses.Python 2 , 115 octets
Essayez-le en ligne!
la source
exec
est analysé comme du code Python habituel, donc la boucle for doit être sur sa propre ligne.Java (OpenJDK 8) , 271 octets
Essayez-le en ligne!
la source
s->new String...
char[]o=s.toCharArray();char c;int b;
au golf: pourchar o[]=s.toCharArray(),c,b;
; et les deux&&
à&
'; etc=o[i];return b>1?!Character.isUpperCase(c):!Character.isLowerCase(c);
àc=o[i];Character x=c;return b>1?!x.isUpperCase(c):!x.isLowerCase(c);
( 259 octets au total ). Et j'ai probablement raté certaines choses pour jouer au golf plus. De plus, si vous ne l'avez pas encore vu, des conseils pour jouer au golf à Java pourraient être intéressants à lire.R , 107 octets
Adapté de ma réponse au défi lié. C'est beaucoup plus facile que de simplement échanger des paires. Je me demande si je pourrais obtenir moins de 100 avec certains golfs ...
Essayez-le en ligne!
la source