Analysez mon espéranto!


21

La célèbre langue construite espéranto utilise l'alphabet latin (surtout, voir la page wikipedia liée pour plus de détails). Cependant, il y a quelques caractères avec des accents: ĉ, ĝ, ĥ, ĵ, ŝ et ŭ . (C-circonflexe, g-circonflexe, h-circonflexe, j-circonflexe, s-circonflexe, et u- breve .) Bien entendu, ces caractères sont très difficiles à saisir. Même pour cette question, j'ai dû rechercher dans le sélecteur Unicode les caractères. Pour cette raison, une convention utilisant la lettre "x" a été développée pour une utilisation électronique. Par exemple, "cxu" est utilisé pour "ĉu". (Remarque: la lettre "x" n'est pas utilisée normalement dans l'alphabet espéranto. "

Cependant, je suis un puriste de la langue! Cette * citation aérienne * x un non-sens me tue! J'ai besoin d'un programme pour résoudre ce problème, de préférence aussi court que possible afin que je puisse le taper dans mon terminal le plus rapidement possible!

Défi

Votre mission est de prendre une chaîne d'espéranto en utilisant la convention x et de la convertir en véritable espéranto.

En effet, vous devez mapper:

cx: ĉ
gx: ĝ
hx: ĥ
jx: ĵ
sx: ŝ
ux: ŭ
Cx: Ĉ
Gx: Ĝ
Hx: Ĥ
Jx: Ĵ
Sx: Ŝ
Ux: Ŭ

Tous les autres caractères ASCII imprimables doivent être acceptés et non modifiés. Unicode serait bien, mais pas nécessaire.

L'entrée et la sortie peuvent être dans n'importe quel format raisonnable pour votre langue. Bonne chance!

Cas de test

"input" : "output"
_____________
"gxi estas varma" : "ĝi estas varma"
"Cxu sxi sxatas katojn aux hundojn?" : "Ĉu ŝi ŝatas katojn aŭ hundojn?"
"Uxcxsxabcd(hxSx)efg{};" : "Ŭĉŝabcd(ĥŜ)efg{};"
"qwertyuiop" : "qwertyuiop"
" " : " "
"" : ""
"x" : "x"
"xc" : "xc"
"xcx" : "xĉ"
"cxx" : "ĉx"

Notation

C'est du . Les réponses sont notées par le plus petit nombre d'octets dans l'encodage par défaut de la langue.

Voici un extrait de pile pour générer à la fois un classement régulier et un aperçu des gagnants par langue.

Pour vous assurer que votre réponse s'affiche, veuillez commencer votre réponse avec un titre, en utilisant le modèle Markdown suivant:

# Language Name, N bytes

Nest la taille de votre soumission. Si vous améliorez votre score, vous pouvez conserver les anciens scores dans le titre, en les barrant. Par exemple:

# Ruby, <s>104</s> <s>101</s> 96 bytes

Si vous souhaitez inclure plusieurs nombres dans votre en-tête (par exemple, parce que votre score est la somme de deux fichiers ou que vous souhaitez répertorier les pénalités de drapeau d'interprète séparément), assurez-vous que le score réel est le dernier numéro de l'en-tête:

# Perl, 43 + 2 (-p flag) = 45 bytes

Vous pouvez également faire du nom de la langue un lien qui apparaîtra ensuite dans l'extrait de classement:

# [><>](http://esolangs.org/wiki/Fish), 121 bytes

Bonne chance, amusez-vous et n'hésitez pas à suggérer des améliorations!

Précisions:

  • Vous n'avez qu'à vous soucier des caractères ASCII imprimables .

  • Il vous suffit de sortir un caractère qui ressemble à la sortie correcte. Oui, cela signifie que vous pouvez coller l’accent sur le caractère standard.


ASCII signifie ici 20-7E caractères imprimables, 00-7F, ou quoi?
user202729

Tous ceux imprimables.
OldBunny2800

Remarque: J'ai ajouté une clarification que vous pouvez utiliser la lettre et l'accent du modificateur.
OldBunny2800

5
La combinaison de circonflexe est à 0302 ̂, et la combinaison de breve est à 0306 ̆.
user202729

^ Chacun prend 2 octets en UTF8 comme compte TIO .
user202729

Réponses:


9

QuadR , 65 octets

.x
3::⍵M'ĉĝĥĵŝŭĈĜĤĴŜŬ'['cghjsuCGHJSU'⍳⊃⍵M]

Essayez-le en ligne!

.x remplacer tout caractère suivi de "x" par

3::⍵M en cas d'erreur d'indexation, renvoyez la correspondance non modifiée,
 essayez maintenant:
'ĉĝĥĵŝŭĈĜĤĴŜŬ'[] indexez dans cette chaîne avec
  ⍵M l'  index
   de la première lettre de la correspondance  dans cette chaîne
  
  'cghjsuCGHJSU'

Cela équivaut à la fonction tacite Dyalog APL:

'.x'R{3::⍵.Match'ĉĝĥĵŝŭĈĜĤĴŜŬ'['cghjsuCGHJSU'⍳⊃⍵.Match]}

Bonne réponse! +1
OldBunny2800

Je ne sais pas comment les octets sont comptés ici. L'utilisation simple de ⎕R n'est-elle pas plus courte? ('cghjsuCGHJSU',¨'x')⎕r(,¨'ĉĝĥĵŝŭĈĜĤĴŜŬ')
2017

@ngn C'est vrai, mais ma batterie est épuisée avant que j'aie eu la chance de poster ça.
Adám

6

Rétine , 27 octets

iT`x`̂`[cghjs]x
iT`x`̆`ux

Essayez-le en ligne!

Ce programme est composé de deux translittérations. En raison de la combinaison de caractères dans le code, cela ne rend pas trop bien, la première ligne devrait en fait ressembler à iT`x`^`[cghjs]x, où ^représente le caractère de combinaison d'accent circonflexe. Ce que cela veut dire, c'est qu'il devrait Tréécrire ( icasse gnorante) tous les xs dans l'entrée dans a ^, chaque fois qu'ils suivent une lettre [cghjs].


Remarque: TIO mesure incorrectement ce code en tant que 25 octets. En fait, ce programme Retina utilise le codage UTF-8 (d'autres programmes peuvent utiliser UTF-32 ou ISO 8859-1) et les deux caractères de combinaison présents coûtent chacun 2 octets.


5

C,  173  154 octets

Merci à @Colera Su d'avoir économisé 17 octets!

p,c,i;f(char*s){for(char*l="cghjsuCGHJSU";p=*s;~c&&putchar(p))for(c=*++s,i=0;c=='x'&&l[i];++i)l[i]-p||write(1,"ĉĝĥĵŝŭĈĜĤĴŜŬ"+i*2,2,c=-1,++s);}

Essayez-le en ligne!

Explication:

p,c,i;
f(char*s)
{
    // The outer loop and an array of characters that are modified by a trailing 'x'.
    // The array/string is used for getting the index for the accented character later.
    for (char*l="cghjsuCGHJSU";

                                // Store the current character of the input string in 'p'.
                                // If it is '\0', the loop terminates.
                                p=*s;

                                      // The last statement in the loop.
                                      // If 'c==-1', it outputs the char stored in 'p'. 
                                      ~c&&putchar(p))

        // Store the character following 'p' in 'c' and increment the string pointer.
        for(c=*++s, i=0;

                        // If 'c' is not the letter 'x', the inner loop terminates
                        // immediately. Otherwise it loops through the characters of
                        // string 'l'.
                        c=='x'&&l[i]; ++i)

            // If the character stored in 'p' is found inside the string 'l'...
            l[i]-p ||

                      // ...then print the accented character corresponding to 'p'.
                      // 'i' is the index of 'p' in 'l', and, because the characters
                      // with accents are two bytes each, the index is multiplied by 2.
                      write(1,"ĉĝĥĵŝŭĈĜĤĴŜŬ"+i*2,2,

                      // Finally set 'c' to -1 so that the non-accented character doesn't
                      // get printed too, and increment the string pointer so that the
                      // letter 'x' doesn't get printed either.
                                                    c=-1, ++s);
}

Agréable! Puis-je avoir une explication s'il vous plaît?
OldBunny2800

Vous pouvez probablement utiliser un octet nul littéral au lieu de \0?
user202729

(mais cela ne fonctionne malheureusement pas sur TIO)
user202729

Vous pouvez utiliser write(1,"..."+i*2,2)pour enregistrer 17 octets. Essayez-le en ligne!
Colera Su

5

Python 3 , 81 octets

lambda s,T="cĉgĝhĥjĵsŝuŭ":eval("s"+".replace('%sx',%r)"*12%(*T+T.upper(),))

Essayez-le en ligne!

Génère et évalue la chaîne:

s.replace('cx','ĉ').replace('gx','ĝ').replace('hx','ĥ').replace('jx','ĵ').replace('sx','ŝ').replace('ux','ŭ').replace('Cx','Ĉ').replace('Gx','Ĝ').replace('Hx','Ĥ').replace('Jx','Ĵ').replace('Sx','Ŝ').replace('Ux','Ŭ')

Erik l'Outgolfer a enregistré un octet.


@EriktheOutgolfer Nice one, thanks!
2017

3

/// , 75 octets

/,/\/\///>/x\,/c>ĉ,g>ĝ,h>ĥ,j>ĵ,s>ŝ,u>ŭ,C>Ĉ,G>Ĝ,H>Ĥ,J>Ĵ,S>Ŝ,U>Ŭ/

Remarque: Parce que la demande OP tous les caractères imprimables doivent être traités, mes "caractères spéciaux" choisis ne doivent pas être imprimables. J'ai donc choisi tab et newline au lieu de, ce qui ne change pas mes fonctionnalités de bytecount ou de code. Le code ressemblerait à:

/
/\/\/// /x\
/c  ĉ
g   ĝ
h   ĥ
j   ĵ
s   ŝ
u   ŭ
C   Ĉ
G   Ĝ
H   Ĥ
J   Ĵ
S   Ŝ
U   Ŭ/

Cependant, cela nécessite que l'entrée ne contienne pas de tabulation ni de retour à la ligne.

Essayez-le en ligne!

Car /// ne peut pas prendre d'entrée, vous devez mettre l'entrée après le code.

Assez simple. Je suppose que ça ne peut pas être plus court parce que/// faut un traitement spécial de chaque personnage.

Explication:

/,/\/\//       Replace all `,` in the code by `//`
               (two slashes are represented as two backslash-ed slashes)
/>/x\,         (in original code) becomes
/>/x\//        (because `,` is replaced by `//`) - replace all occurence of 
               `>` by `x/`.
/cx/ĉ//gx/ĝ//hx/ĥ//jx/ĵ//sx/ŝ//ux/ŭ//Cx/Ĉ//Gx/Ĝ//Hx/Ĥ//Jx/Ĵ//Sx/Ŝ//Ux/Ŭ/
               ^ The remaining part of the code should look like this.
               Straightforward replacement.

3

Python 3 , 95 octets

f=lambda x,v="cĉgĝhĥjĵsŝuŭCĈGĜHĤJĴSŜUŬ":v and f(x.replace(v[0]+"x",v[1]),v[2:])or x

Essayez-le en ligne!

-10 octets grâce à WhatToDo
-1 octet grâce à Colera Su



@ user507295 oh idée intelligente. Merci!
HyperNeutrino

Utilisez and-or pour économiser un octet: essayez-le en ligne!
Colera Su

@ColeraSu oh cool, merci. Je ne sais pas pourquoi cette astuce a disparu D:
HyperNeutrino

@HyperNeutrino Parce que je ne connaissais pas cette astuce. Pardon!
WhatToDo

2

Rétine , 55 octets

iT`CG\HJSUcg\hjsux`ĈĜĤĴŜŬĉĝĥĵŝŭ_`[cghjsux]x

Essayez-le en ligne! Approche non combinatoire. Les octets pourraient être enregistrés sinon pour les xcas de test autonomes .



1

JavaScript (ES6), 92 octets

s=>[..."cghjsuCGHJSU"].reduce((a,v,i)=>a.split(v+"x").join("ĉĝĥĵŝŭĈĜĤĴŜŬ"[i]),s)

Essayez-le en ligne!

La méthode de jointure partagée utilisée est recommandée ici pour réduire le nombre d'octets carnew RegExp(/*blah*/) constructeur a pris trop d'octets.

Comparaison:

Original: a.replace(new RegExp(v+"x", "g"), "ĉĝĥĵŝŭĈĜĤĴŜŬ"[i])
New     : a.split(v+"x").join("ĉĝĥĵŝŭĈĜĤĴŜŬ"[i])

Plus courte, combinant une approche d'accentuation (63 octets), mais avec certains artefacts visibles.

s=>s.replace(/([cghjs])x/gi," ̂$1").replace(/(u)x/gi," ̌$1");

Note de bas de page: je réclame ma réponse 92 octets car la solution à 63 octets a des artefacts qui peuvent affecter la sortie.


1

APL (Dyalog Unicode) , 57 octets

Fonction tacite anonyme. Coutumes:

  1. Fonction de préfixe à chaîne. Cela transcrit la chaîne.

  2. Fonction de préfixe pour lister les chaînes. Cela transcrit les chaînes.

  3. Fonction d'infixation avec le numéro de lien du fichier d'entrée comme argument de droite et le numéro de lien du fichier de sortie comme argument de gauche. Cela remplit le fichier de sortie avec le contenu translittéré du fichier d'entrée.

('cghjsuCGHJSU',¨'x')⎕R(,¨'ĉĝĥĵŝŭĈĜĤĴŜŬ')

(... )⎕R(... ) PCRE R eplace

'cghjsuCGHJSU' Ces lettres

,¨'x' chacun suivi d'un x

 … avec…

,¨'ĉĝĥĵŝŭĈĜĤĴŜŬ' chacune de ces lettres sous forme de chaînes

Essayez-le en ligne!


1

J , 64 63 octets

rplc((_2]\'ĉĝĥĵŝŭĈĜĤĴŜŬ');~"1'cghjsuCGHJSU',.'x')"0

Comment ça marche:

Avec _2]\je réorganise la chaîne «ĉĝĥĵŝŭĈĜĤĴŜŬ» dans une colonne de 12 lignes afin de s'adapter à la forme de l'autre chaîne.

,. ajoute «x» à chaque caractère de la chaîne «cghjsuCGHJSU» et crée un tableau de 12 lignes par 2 colonnes

;~"1' fait une liste des paires encadrées de ce qui précède, "1 - rang 1 - appliquer à chaque ligne.

┌──┬──┐
│cx│ĉ │
├──┼──┤
│gx│ĝ │
├──┼──┤
│hx│ĥ │
├──┼──┤
│jx│ĵ │
├──┼──┤
│sx│ŝ │
├──┼──┤
│ux│ŭ │
├──┼──┤
│Cx│Ĉ │
├──┼──┤
│Gx│Ĝ │
├──┼──┤
│Hx│Ĥ │
├──┼──┤
│Jx│Ĵ │
├──┼──┤
│Sx│Ŝ │
├──┼──┤
│Ux│Ŭ │
└──┴──┘

rplc utilise ces éléments en boîte pour remplacer chaque occurrence de l'élément en boîte gauche d'une paire par la droite.

Essayez-le en ligne!


1

Befunge , 2x48 +1 = 99 octets

>~:1+!#@_:"x"-v>$ 11p0"cghjsuCGHJSU"1\ >\31p11g-v
^ # #, : ++$\ _^#1"x"0*4!-"u"g11*"ʊ"!\_^#!:\*g13<

Essayez-le (TIO est super bizarre à propos de Befunge et je n'ai pu obtenir aucune de mes solutions pour y travailler)

Comment ça marche

>~:1+!@_

Obtient une entrée et vérifie si c'est la fin. Arrêtez le programme s'il l'est.

          "x"-v>
^ # #, : ++$\ _^

Vérifie si le caractère est un "x". Sinon, conservez une copie du personnage et imprimez-le.

               >$ 11p0"cghjsuCGHJSU"1\

Stockez le dernier caractère à (1,1). Met tous les personnages à archiver dans la pile.

                                       >\31p11g-v
                                      _^#!:\*g13<

Comparez le dernier caractère avec toutes les valeurs de la pile.

                 1"x"0*4!-"u"g11*"ʊ"!\

Multipliez la vérification (0 ou 1) par ʊ (valeur unicode 650). Vérifiez si le personnage était au (pour la brève) et ajoutez 4 à la pile si c'est le cas. Enfin, ajoutez également la valeur ascii de x (100). Le total s'additionne à l'accent correct si nécessaire ou à un "x" sinon.

>~:1+!#@_  
^ # #, : ++$\ _^#

Ajoutez toutes les valeurs de la pile ensemble, imprimez-la et conservez-en une copie. Remontez pour la prochaine entrée.


1

R , 75 70 octets

function(s)gsub('([cghjs])x','\\1\U302',gsub('(u)x','\\1\U306',s,T),T)

Essayez-le en ligne!

-5 octets grâce à Giuseppe

Explication

  • gsub('(u)x','\\1\U306',s,T): remplace à schaque occurrence d'un "u" majuscule ou minuscule (en utilisant ignore.case=TRUEvia le quatrième argument T) suivi d'un "x" le "u" suivi du unicode pour un breve
  • gsub('([cghjs])x','\\1\U302',gsub('(u)x','\\1\U306',s,T),T): prendre le résultat de cela et remplacer chaque occurrence d'une majuscule ou d'une minuscule (en utilisant ignore.case=TRUEvia le quatrième argumentT ) "c", "g", "h", "j" ou "s" suivi d'un "x" avec la lettre suivie de l'unicode pour un accent circonflexe

utiliser l'ordre des arguments plutôt que de nommer économise 3 octets, et deux autres se débarrassent du zéro de tête \U0302et \U0306: Essayez-le en ligne!
Giuseppe

@Giuseppe - bonne idée, merci!
duckmayr

1

QuadR , 25 octets

Combiner l'édition diacritique.

ux
([cghjs])x
 ̆&
 ̂\1

i drapeau

Essayez-le en ligne!

Remplacer…

(u)x         u followed by x and
([cghjs])x   any of these letters followed by x 
 ̆\1          by a breve followed by the first group (the u) and
 ̂\1          a circumflex followed by the first group (the letter)

cas i nsensitivement

Équivalent au code Dyalog APL suivant:

'(u)x' '([cghjs])x'R' ̆\1' ' ̂\1'

Pourquoi est-ce 28 et non 24 octets?
Erik the Outgolfer

Le compteur SBCS de @EriktheOutgolfer TIO m'a confondu. Fixé. Merci. Attends, ça veut dire que je gagne?
Adám

Huh, maintenant il semble que ce soit 27 octets (copiés depuis TIO), mais 24 octets lorsqu'ils sont copiés d'ici. Qu'est-ce que l'encodage QuadR et lequel est correct?
Erik the Outgolfer

@EriktheOutgolfer Les deux liens rapportent 24 sur mon FFQ / Win10. QuadR utilise Dyalog Classic ou tout Unicode.
Adám

C'est donc 24 octets ou quoi?
Erik the Outgolfer

1

C, 145 144 octets

Une autre approche C. Retournez en écrasant l'entrée, en utilisant le fait que circumflex / breve font 2 octets.

-1 octets grâce à Steadybox .

i,t;f(char*s){for(t=1;*s;s++)if(*s^'x')for(i=12,t=1;i--;)t="cghjsuCGHJSU"[i]-*s?t:i*2;else t^1&&memcpy(s-1,"ĉĝĥĵŝŭĈĜĤĴŜŬ"+t,2),t=1;}

Essayez-le en ligne!


1
Utiliser t^1&&memcpy(s-1,"ĉĝĥĵŝŭĈĜĤĴŜŬ"+t,2),t=1;au lieu d' t^1?memcpy(s-1,"ĉĝĥĵŝŭĈĜĤĴŜŬ"+t,2),t=1:0;enregistrer un octet. Essayez-le en ligne!
Steadybox

1

Mathematica, 81 octets ou 57 octets

StringReplace[RemoveDiacritics@#<>"x"->#&/@Characters@"ĉĝĥĵŝŭĈĜĤĴŜŬ"]

Il applique une règle de remplacement où la lettre sans chapeau avec un "x" est remplacée par la lettre.

Voici une alternative en utilisant le caractère accentué ajouté: StringReplace[{"ux"->"ŭ","Ux"->"Ŭ",c_~~"x":>c<>"̂"}]


1

Perl 5 , 49 + 2 ( -p -C) = 61 51 octets

s/[CGHJScghjs]\Kx/\x{0302}/g;s/[Uu]\Kx/\x{0306}/g

Essayez-le en ligne!

10 octets enregistrés grâce à Nahuel Fouilleul


pourrait économiser 7 octets:s/[CGHJScghjs]\Kx/\x{0302}/g;s/[Uu]\Kx/\x{0306}/g
Nahuel Fouilleul

semble que cela fonctionne aussi juste avec -Cet sans -Cavertissement ( Wide character in print)
Nahuel Fouilleul

1
de perlrun-C on its own (not followed by any number or option list), or the empty string "" for the PERL_UNICODE environment variable, has the same effect as -CSDL.
Nahuel Fouilleul

0

CJam , 51 octets

q"ĉĝĥĵŝŭĈĜĤĴŜŬ""cghjsuCGHJSU".{'x+@\/*}

Essayez-le en ligne!

Explication:

q                   Read input
"ĉĝĥĵŝŭĈĜĤĴŜŬ"      String literal
"cghjsuCGHJSU"      Another string literal
.{                  Iterate over the strings in parallel
  'x+                 Add an 'x to the normal character
  @                   Rotate to bring the input to the top of stack
  \                   Swap to bring the "cx" to the top
  /                   Split the input on instances of "cx"
  *                   Join the input on instances of the accented character
}

Est-ce vraiment 39 octets? Je compte 39 caractères et je ne pense pas que CJam ait un encodage spécial.
user202729

@ user202729 modifié (TIO comptait les octets comme caractères pour une raison quelconque)
Esolanging Fruit

Parce que TIO croit que toutes les langues de golf ont une page de codes de caractères spéciale, et cela ne dérange pas de vérifier si tous les caractères sont dans la page de codes correcte.
user202729

0

sed, 108 octets

s/cx/ĉ/g
s/gx/ĝ/g
s/hx/ĥ/g
s/jx/ĵ/g
s/sx/ŝ/g
s/ux/ŭ/g
s/Cx/Ĉ/g
s/Gx/Ĝ/g
s/Hx/Ĥ/g
s/Jx/Ĵ/g
s/Sx/Ŝ/g
s/Ux/Ŭ/g

Vous devez formater le code en tant que code par `...`ou <pre><code>...</code></pre>ou 4 retraits.
user202729

@ user202729 Je le savais évidemment. Je soumettais depuis mon téléphone Android, donc je ne l'ai pas formaté correctement.
iBug

2
Il semble que ce soit 119 octets de long.
Erik the Outgolfer

0

PowerShell, 58 octets

C'est 54 caractères et l'enregistrer dans PowerShell ISE le fait UTF-8 + BOM pour 58 octets. Il ne s'affiche pas aussi bien dans un navigateur:

$args-replace'(?<=u)x','̆'-replace'(?<=[cghjs])x','̂'

regex remplace le x par la combinaison des caractères Unicode du commentaire de @ user202729.

par exemple

PS C:\> .\eo.ps1 "Cxu vi sxatas la cxapelliterojn? Mi ankaux."
Ĉu vi ŝatas la ĉapelliterojn? Mi ankaŭ.

0

Clojure, 126 115 octets

-11 octets en changeant le mappage de remplacement en partition d'une chaîne.

#(reduce(fn[a[f r]](clojure.string/replace a(str f\x)(str r)))%(partition 2"cĉgĝhĥjĵsŝuŭCĈGĜHĤJĴSŜUŬ")) 

Une réduction sur une carte des remplacements à rechercher et sur quoi les remplacer.

Toujours en train de trouver un moyen de compresser la carte de remplacement.

(defn translate [^String esperanto]
  (reduce (fn [acc [f r]] (clojure.string/replace
                            acc ; Replace the translation so far by
                            (str f \x) ; adding a x after each character, search for it in the string,
                            (str r))) ; and replace it with a stringified accented char

          esperanto ; Before the reduction happens, the accumulator is the original string

          ; A list of [char-to-find what-to-replace-with] pairs
          (partition 2"cĉgĝhĥjĵsŝuŭCĈGĜHĤJĴSŜUŬ")))))


0

Scala , 110 octets

Solution de regex ennuyeux:

def?(s:String)="(.)x".r.replaceAllIn(s,m=>m.group(0)(0)+(if(m.group(0)(0).toUpper=='U')"\u0306"else"\u0302"))

Ancienne solution Scala (116 octets)

def?(s:String)=s.foldLeft("")((r,c)=>if(c=='x')r.init+r.last+(if(r.last.toUpper=='U')"\u0306"else"\u0302")else r+c)

Non golfé

def?(s:String)=
  s.foldLeft("")((r,c)=>  // 'Fold' string with empty string as first result
    if(c=='x')            // If current character is x
      r.init+             // Take the every character from result but the last
        r.last+           // The last character from result and add
          (if(r.last.toUpper=='U')
            "\u0306"      // combining breve if 'u' or 'U'
          else"\u0302")   // combining circumflex in any other case
 else r+c                 // Otherwise return result + character
)

0

JavaScript, 35 caractères, 36 octets

s=>s.replace(/([cghjsu])x/gi,"$1̂")

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.