Le programme doit prendre une chaîne en tant qu'entrée et inverser les consonnes qu'il contient tout en conservant l'ordre des voyelles. Toutes les lettres seront en minuscules, vous n’avez donc pas à vous soucier de la casse. Des exemples suivent.
Entrée:
a test case
.
Les consonnes ici sontt,s,t,c,s
. Ils devraient venir dans l' ordre inverse, à savoirs,c,t,s,t
et à l' arrière inséré dans la chaîne aux mêmes positions où les caractères inversés pré-ont été trouvés:a sect sate
.Entrée:
well-done
. Sortie:nedl-lowe
.- Entrée:
reverse the consonants
. Sortie:setenne sne cohtosarvr
.
C'est le code golf, la solution la plus courte l'emporte.
Y
devrait être considéré comme une voyelle, peu importe de quoi il s'agit et non inversé.
N'importe quel élément, ainsi que des chiffres, des signes de ponctuation, des guillemets et d'autres symboles ( @#$%^&*(){}[]\|/<>~-_+=`
), pourrait éventuellement apparaître dans l'entrée.
-[...]
spécifique à la rétine, ou spécifique aux regex .net ou est-ce une fonctionnalité de regex générale que j'ai négligée jusqu'à présent?[...&&[^...]]
.<[b..z] - [eiouy]>
ou<:Ll - [aeiouy]>
à faire la différence définiePython 2, 86 octets
Prend l'entrée sous forme de chaîne entre guillemets. Itère dans l'entrée en remplaçant chaque consonne par
%s
danss
. Le tuplec
stocke les consonnes rencontrées dans l'ordre inverse. Ensuite, le formatage des chaînes remplace le%s
'ss
par les consonnes dec
.Merci à Sp3000 pour la vérification des consonnes, qui a économisé 4 octets sur la liste des consonnes.
la source
Gelée ,
22 à20 octetsEssayez-le en ligne!
Comment ça marche
la source
JavaScript ES6,
82818078 octetsA sauvé un octet à chacun de Martin et Leaky Nun, et 2 octets à Neil!
Essai
la source
/(?![aeiouy])[a-z]/g
/(?[_aeiouy])\w/g
travailler?_
, c'est un symbole que le PO veut garder en place.q.onchange=q.onkeydown=q.onkeyup=
pourq.oninput=
...Python 2, 106 octets
Attend une entrée
"quotes"
, ce qui, je pense, est autorisé.la source
Pyke, 18 octets
Essayez-le ici!
ou 16 octets avec la nouvelle version:
(Modifiez donc si, pour renvoie la totalité de la sortie de chaîne et avait une entrée de chaîne, renvoie chaîne au lieu d'une liste)
Essayez-le ici!
~c
contient les consonnes:bcdfghjklmnpqrstvwxz
la source
GNU sed, 73
Le score inclut +1 pour le
-r
drapeau passé à sed.Idéone.
Commute à plusieurs reprises la première et la dernière consonne minuscule et les convertit en majuscules jusqu'à ce qu'il n'y ait plus de correspondance. Reconvertissez ensuite la chaîne entière en minuscule.
la source
J, 53 octets
Peut-être que ce n'est pas la meilleure façon, mais je voulais utiliser
C.
car cela peut être résolu en utilisant des permutations.Usage
Explication
la source
MATL,
182221 octets1 octet enregistré grâce à @Luis
Malheureusement, la partie la plus longue de ceci est d'obtenir la liste des consonnes (
2Y211Y2'y'hX-
).Essayez-le en ligne!
Explication
la source
tt2Y211Y2'y'hX-m)P5M(
Perl 5 (58 + 4 = 62 octets)
Pénalité de +4 pour l'exécution avec
-0777
flag, qui définit Perl en mode slurp pour gérer correctement les nouvelles lignes.Accepte les entrées via STDIN et imprime vers STDOUT.
Explication
la source
JavaScript (ES6), 72 octets
Le fait de diviser les
/([^\W\d_aeiouy])/
résultats dans les consonnes tombant dans les entrées impaires du tableau. Il suffit ensuite de basculer ces entrées avec l'entrée équivalente comptant à partir de la fin du tableau et de joindre le résultat.la source
JavaScript (ES6), 57
70Modifier 20% d'économies incroyables @Neil
En retard pour la fête, mais il semble que toutes les personnes en javascript ont oublié quelque chose
Tester
la source
c.pop()
.Perl 5,
926855 octetsSauvegardé 37 octets grâce à l 'aide de @manatwork . ;-)
Une traduction de la solution @Lynn Python en Perl.
la source
g
" force y aiderait:@s=split//;
→@s=/./g;
etfor(@s){push@a,$_ if(/[^\Waeiou]/);}
→@a=/[^\Waeiou]/g;
. Je veux dire,m//
avecg
modificateur renvoie un tableau de toutes les correspondances.@b=@a=…
. De plus , lefor
ayant une seule instruction dans le bloc (auquel cas le;
n'est pas nécessaire après), vous pouvez le transformer en modificateur de déclaration et de rechange délimiteurs:print$_~~@b?pop@a:$_ for/./g
. (Yepp, désolé, a raté ça: pas besoin de stocker la@s
valeur dans une variable.)Pyth,
26252423 octetsSuite de tests.
la source
Julia, 53 octets
Cela prend un tableau de caractères en entrée et inverse ses consonnes sur place. Essayez-le en ligne!
Le crédit va à @ Sp3000 pour le contrôle de consonne minuscule.
Comment ça marche
i=find(...,s)
donne tous les indices de s pour lesquels le prédicat ... renvoie true et les enregistre dans la variable i .c->'}'>c∉"aeiouy"<"$c"
effectue trois tests et renvoie true si et seulement si tous sont positifs.'}'>c
vérifie si le caractère c vient avant { ."aeiou"
vérifie si la chaîne c vient après a .c∉"aeiouy"
vérifie que c n'est pas une voyelle.Enfin,
s[i]
donne toutes les consonnes et less[flipud(i)]=s[i]
affecte aux positions dans s qui correspondent aux indices inversés dans dans i .la source
∉
)?Java,
319305261188 octetsNous remercions @ Leaky Nun pour son aide :-)
Vieux:
Inspiration prise d' ici ❤
Ungolfed
la source
0
comme caractère spécial (ilnull
est garanti ne pas figurer dans la chaîne), et vous pouvez le vérifier pars[i]<1
(il n'y a pas de caractère négatif)char
vous en morceaux. :)Ruby,
53 ans50 octets-3 octets de @manatwork
Essayez ici
la source
Python 2,
10398100 octetsPort de ma réponse JavaScript. Edit: 5 octets enregistrés grâce à @ Dennis ♦, dont j'ai rapidement dû passer deux chiffres de réparation.
la source
R, 120 octets
Nouvelle réponse:
prend une chaîne de caractères comme x
L'ancienne réponse ci-dessous (110 octets) était de mauvaise qualité de ma part, ce qui a simplement inversé les consonnes:
la source
APLX, 31 octets
⎕a~'aeoiuy'
alphabet en minuscule sans voyellest←⍞
stocke la saisie de caractères sous la forme tc←(
…)∊
store Boolean "consonant?" as ct/⍨
extract (consonnes) de t⌽
reverse(c/t)←
remplace les consonnes par (les inverses)t
retourne la chaîne modifiéela source
Python 2.7, 144 octets
Cela construit d'abord une liste inversée des consonnes, puis insère chacun des autres caractères dans leur index d'origine.
Non-golfé:
https://repl.it/C30O
la source
Mathematica 216 octets
la source
Haskell,
157131 octetsMise à jour
La solution de @ atlasologist m'a fait comprendre que je n'avais besoin que d'une liste de consonnes au lieu de paires (inutile de les inverser, bien que j'utilise le bon pli.)
Ungolfed
Vieux
Crée une liste de paires de consonnes, puis parcourt la chaîne en remplaçant chaque consonne à l’aide de cette liste.
Un peu primitif, mais je voulais comprendre cela sans regarder les réponses en premier. :)
la source
if ... then ... else
. b)f
est mieux écrit en tant qu'opérateur infixe, par exemple%
. c) pas besoin de la paire intérieure de()
dans((r:q),s)
. d) remplacer""
par_
dans la deuxième ligne def
. Dans l' ensemble (k
reste le même):c%(r:q,s)|c`elem`k=(q,r:s)|1<2=(r:q,c:s);c%(_,s)=("",c:s);g s=snd$foldr(%)(filter(`elem`k)s,"")s
.s-lang ,
1716 octets (non concurrents)Un octet enregistré car s-lang ne nécessite plus de crochet de dernier argument
Essayez-le en ligne!
J'ai commencé à travailler sur un langage de golf à manipulation de cordes (je voulais le faire depuis un moment maintenant) et j'ai pensé que ce serait une question amusante de travailler dessus.
Explication:
r
inverse la chaîne avec un attribut de caractère de regex donné (si aucun argument de regex n'est donné, sa valeur par défaut sera.
)[
commence l'argument optionnel regex pourr
(?![aeiouy])\w
la regex pour faire correspondre toute consonne à l'exception de y (malheureusement, JavaScript ne permet pas la soustraction de classe de caractère)]
termine généralement l'argument optionnel regex pourr
, mais nous n'en avons pas besoin puisqu'il s'agit de la dernière fonction et du dernier argumentla source
Matlab, 67 caractères
Pour une entrée
'this is a string of- stuff.'
produit
s = ffit is a fgnirt os- ssuht.
si
est les indices des consonnes dans la chaîne d'entrée. L'instruction finale remplace les caractères par les mêmes caractères, mais dans l'ordre inverse par indexation.la source
-
. La question dit que toute ponctuation est une entrée valide et doit être ignorée. En outre, vous devrez soit utiliserinput('')
pour saisir l'entrée ou écrire une fonction anonyme, car nous ne pouvons pas accepter une variable comme entrée comme celle-ci.flip
pour inverser la chaîne.ans
, car c’est à cela qu’une entrée par défaut de la console Matlab est affectée?s=input('')
ou de le transformer en une fonction anonyme@(s)
PowerShell , 81 octets
Essayez-le en ligne!
Moins joué au golf:
PowerShell , 88 octets, -f
Essayez-le en ligne!
la source
q / kdb +, 45 octets
Solution:
Explication:
Trouvez les indices des consonnes et remplacez-les par les consonnes inversées:
Remarques:
J'avais 3 façons de construire la liste des consonnes, celle de la solution est légèrement meilleure que celle des alternatives:
"bcdfghjklmnpqrstvwxz"
pour 22 caractères (le plus ennuyeux).Q.a _/0 3 6 11 16 19
pour 21 caractères (cool, laissez tomber chaque index).Q.a except"aeiouy"
pour 19 caractères (deuxième plus ennuyeux)la source
Jq 1.5 ,
289263 octetsExplication
Échantillon échantillon
Essayez-le en ligne
la source
Java 8, 157 octets
Essayez-le en ligne!
Remarque: affiche les avertissements du compilateur sur stderr.
Explication:
Je ne vais pas mentir, mon seul objectif était de battre cette réponse
la source
APL (Dyalog Extended) , 22 octets
Essayez-le en ligne!
la source