La langue: l'opposition
Une langue amusante à parler est créée en appliquant le processus suivant à chaque mot:
- Placez
op
après chaque consonne. DevientCode
ainsiCopodope
.
Oui c'est ça. Aux fins de ce défi, y
est toujours une consonne.
Le défi: la désoppification
Étant donné un mot oppified, renvoyez le mot d'origine. L'entrée ne contiendra que des lettres. La première lettre peut être en majuscule. Le mot d'origine ne sera jamais vide et contiendra toujours une voyelle.
Cas de test:
Oppified -> Original
a a
I I
itop it
opop op
Opop Op
popopop pop
Copopop Cop
opopopop opop
Kopicopkop Kick
Asopia Asia
soptopopop stop
hopoopopsop hoops
hopoopopedop hooped
ooooohop oooooh
aaaopopaaa aaaopaaa
Popopopsopicoplope Popsicle
gopaloplopopopinopgop galloping
aopopbopopopcopopop aopbopcop
code-golf
string
natural-language
mbomb007
la source
la source
op
, donc une réponse dans le sens dereplace(/(.)op/, '\1')
n'échouera aucun d'entre eux. Je vous suggère d'ajouter un mot commehoop
oulooped
aux cas de test.Réponses:
V ,
12, 5 octetsEssayez-le en ligne!
Sauvegardé 7 octets grâce à la réalisation de @ Xnor que puisque l'entrée doit toujours être oppée, nous n'avons pas à vérifier les voyelles.
la source
...op
me fait rire beaucoup plus fort qu'il ne le devraitRétine , 9 octets
Essayez-le en ligne!
Au lieu de vérifier que le caractère précédent est une consonne, nous nous assurons simplement que le courant
op
n'est pas adjacent au début de la chaîne ou à la correspondance précédente. Le seul cas où nous pourrions faire correspondre un incorrectop
est si la chaîne d'origine contenait unop
(résultant enopop
). Mais dans ce cas, nous allons simplement supprimer le premierop
au lieu du second et le résultat sera le même.la source
loop
?loop
n'est pas une entrée valide car vous ne pouvez pas l'obtenir en oppifiant un autre mot.lopoop
(la version oppifiée deloop
) est valide et n'est pas désopposéeloop
.loop
islopoopop
.Python , 42 octets
Essayez-le en ligne!
Si je ne me trompe pas, vous pouvez simplement remplacer tout
?op
par?
sans vous soucier des voyelles. Si la chaîne d'origine contientop
, alors elle est oppifiéeopop
et le remplaçant la renvoieop
et pas plus loin. En effet, le motif correspondant à?op
ne peut pas se chevaucher, donc un seulop
est supprimé.Une solution non regex est plus longue de 5 octets.
Python , 47 octets
Essayez-le en ligne
la source
re
après l'avoir référencé‽Perl 5 , 10 + 1 = 11 octets
Essayez-le en ligne!
Courir avec
-p
(1 octet de pénalité); les langages de golf peuvent faire des E / S implicites automatiquement, mais Perl a besoin d'une option pour cela.Quand j'ai vu la réponse de @ xnor , je me suis rendu compte qu'elle pouvait être améliorée en utilisant une fonction d'expression régulière spécifique à Perl;
s/a\Kb/c/g
est équivalent às/ab/ac/g
(en d'autres termes, les///
seul remplace les choses après le premier\K
). Voici donc à quoi cela ressemble en Perl.la source
Rétine ,
158 octetsEssayez-le en ligne!
-7 octets grâce à Kevin Cruijssen
la source
[^aeiou]
par.
. Voir l'explication de @xnor dans sa réponse Python .Allez ,
10392 octetsDoit ... compiler ... Go Les fonctions intégrées ont des noms étranges. : P
Essayez-le en ligne!
la source
Haskell (
936261 octets)merci aux suggestions @nimi dans les commentaires!
la source
v
eto
une seule fois, vous pouvez l'intégrer.notElem
est plus court quenot(...elem...)
. Vous pouvez remplacer le&&
dans un garde par un,
. Le dernier cas poura
peut s'écrirea x=x
. Pas besoin d'()
enx:(a r)
.=="op"
peut être remplacé par une correspondance de motif littéral:a(x:'o':'p':r)|notElem x"aeiouAEIOU"=x:a r
x
et"
.PHP , 36 octets
Essayez-le en ligne!
la source
preg_replace
pour corriger.$argn
est une variable réservée qui est disponible lorsque PHP est exécuté avec l'-R
option depuis la ligne de commandeJapt , 9 octets
Essayez-le en ligne
la source
JavaScript (ES6), 35 octets
Ajoutez
f=
au début et invoquez commef(arg)
.Je suis surpris que personne n'ait encore publié de solution JavaScript ....
Extrait de test
la source
C (gcc) , 83 octets
Essayez-le en ligne!
la source
/// , 18 octets
Essayez-le en ligne!
Notez que cet extrait de code veut remplacer
op
par un.
, mais plus tard il y a un remplacement défini oùop
est remis dans la chaîne. Cette deuxième instruction devrait êtreop
remplacée par un.
(et donc insérer un.
dans le résultat final), j'ai donc utilisé un\
entre leo
etp
pour briser le motif.la source
APL (Dyalog) , 13 octets
Essayez-le en ligne!
Il suffit de PCRE R eplace un caractère suivi de « op » avec le caractère lui - même.
la source
Cristal, 39 octets
Comment ça fonctionne
Il recherche simplement chaque consonne, suivi de la séquence
op
. Si oui, remplacez cette séquence uniquement par la consonne trouvée avant:([^aeiou])
.Essayez-le en ligne
la source
Java 8,
3626 octets-10 octets en remplaçant
[^aeiou]
par.
, grâce à l' explication de @xnor dans sa réponse Python .Essayez-le ici.
la source
Rubis ,
342722 + 1 = 23 octets-4 octets grâce à RJHunter.
+1 octet pour le
-p
drapeau.Essayez-le en ligne!
la source
-p
option Ruby coûtera un octet mais permettra à votre script de démarrer directementgsub
.sed, 22 octets
Lit de STDIN jusqu'à EOF et sort une chaîne désoppée
Utilise la même technique de réduction de longueur que la réponse Python de @ xnor
la source
R , 29 octets
Essayez-le en ligne!
Tout comme la plupart des autres solutions ici, capture le caractère suivi de op, le remplace par le caractère lui-même.
la source