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 code-golf . 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
où N
est 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
var QUESTION_ID=149292,OVERRIDE_USER=47670;function answersUrl(e){return"https://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(e,s){return"https://api.stackexchange.com/2.2/answers/"+s.join(";")+"/comments?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){answers.push.apply(answers,e.items),answers_hash=[],answer_ids=[],e.items.forEach(function(e){e.comments=[];var s=+e.share_link.match(/\d+/);answer_ids.push(s),answers_hash[s]=e}),e.has_more||(more_answers=!1),comment_page=1,getComments()}})}function getComments(){jQuery.ajax({url:commentUrl(comment_page++,answer_ids),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){e.items.forEach(function(e){e.owner.user_id===OVERRIDE_USER&&answers_hash[e.post_id].comments.push(e)}),e.has_more?getComments():more_answers?getAnswers():process()}})}function getAuthorName(e){return e.owner.display_name}function process(){var e=[];answers.forEach(function(s){var r=s.body;s.comments.forEach(function(e){OVERRIDE_REG.test(e.body)&&(r="<h1>"+e.body.replace(OVERRIDE_REG,"")+"</h1>")});var a=r.match(SCORE_REG);a&&e.push({user:getAuthorName(s),size:+a[2],language:a[1],link:s.share_link})}),e.sort(function(e,s){var r=e.size,a=s.size;return r-a});var s={},r=1,a=null,n=1;e.forEach(function(e){e.size!=a&&(n=r),a=e.size,++r;var t=jQuery("#answer-template").html();t=t.replace("{{PLACE}}",n+".").replace("{{NAME}}",e.user).replace("{{LANGUAGE}}",e.language).replace("{{SIZE}}",e.size).replace("{{LINK}}",e.link),t=jQuery(t),jQuery("#answers").append(t);var o=e.language;/<a/.test(o)&&(o=jQuery(o).text()),s[o]=s[o]||{lang:e.language,user:e.user,size:e.size,link:e.link}});var t=[];for(var o in s)s.hasOwnProperty(o)&&t.push(s[o]);t.sort(function(e,s){return e.lang>s.lang?1:e.lang<s.lang?-1:0});for(var c=0;c<t.length;++c){var i=jQuery("#language-template").html(),o=t[c];i=i.replace("{{LANGUAGE}}",o.lang).replace("{{NAME}}",o.user).replace("{{SIZE}}",o.size).replace("{{LINK}}",o.link),i=jQuery(i),jQuery("#languages").append(i)}}var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk",answers=[],answers_hash,answer_ids,answer_page=1,more_answers=!0,comment_page;getAnswers();var SCORE_REG=/<h\d>\s*([^\n,]*[^\s,]),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/,OVERRIDE_REG=/^Override\s*header:\s*/i;
body{text-align:left!important}#answer-list,#language-list{padding:10px;width:290px;float:left}table thead{font-weight:700}table td{padding:5px}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b"> <div id="answer-list"> <h2>Leaderboard</h2> <table class="answer-list"> <thead> <tr><td></td><td>Author</td><td>Language</td><td>Size</td></tr></thead> <tbody id="answers"> </tbody> </table> </div><div id="language-list"> <h2>Winners by Language</h2> <table class="language-list"> <thead> <tr><td>Language</td><td>User</td><td>Score</td></tr></thead> <tbody id="languages"> </tbody> </table> </div><table style="display: none"> <tbody id="answer-template"> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table> <table style="display: none"> <tbody id="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table>
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.
̂
, et la combinaison de breve est à 0306̆
.Réponses:
QuadR , 65 octets
Essayez-le en ligne!
.x
remplacer tout caractère suivi de "x" par3::⍵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:
la source
('cghjsuCGHJSU',¨'x')⎕r(,¨'ĉĝĥĵŝŭĈĜĤĴŜŬ')
Rétine , 27 octets
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 devraitT
réécrire (i
casse gnorante) tous lesx
s 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.
la source
C,
173154 octetsMerci à @Colera Su d'avoir économisé 17 octets!
Essayez-le en ligne!
Explication:
la source
\0
?write(1,"..."+i*2,2)
pour enregistrer 17 octets. Essayez-le en ligne!Python 3 , 81 octets
Essayez-le en ligne!
Génère et évalue la chaîne:
Erik l'Outgolfer a enregistré un octet.
la source
/// , 75 octets
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 à:
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:
la source
Python 3 , 95 octets
Essayez-le en ligne!
-10 octets grâce à WhatToDo
-1 octet grâce à Colera Su
la source
Rétine , 55 octets
Essayez-le en ligne! Approche non combinatoire. Les octets pourraient être enregistrés sinon pour les
x
cas de test autonomes .la source
Perl 5 , 101 + 1 (
-p
) = 102 octetsEssayez-le en ligne!
la source
JavaScript (ES6), 92 octets
Essayez-le en ligne!
La méthode de jointure partagée utilisée est recommandée ici pour réduire le nombre d'octets car
new RegExp(/*blah*/)
constructeur a pris trop d'octets.Comparaison:
Plus courte, combinant une approche d'accentuation (63 octets), mais avec certains artefacts visibles.
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.
la source
APL (Dyalog Unicode) , 57 octets
Fonction tacite anonyme. Coutumes:
Fonction de préfixe à chaîne. Cela transcrit la chaîne.
Fonction de préfixe pour lister les chaînes. Cela transcrit les chaînes.
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înesEssayez-le en ligne!
la source
J ,
6463 octetsComment ç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.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!
la source
Befunge , 2x48 +1 = 99 octets
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
Obtient une entrée et vérifie si c'est la fin. Arrêtez le programme s'il l'est.
Vérifie si le caractère est un "x". Sinon, conservez une copie du personnage et imprimez-le.
Stockez le dernier caractère à (1,1). Met tous les personnages à archiver dans la pile.
Comparez le dernier caractère avec toutes les valeurs de la pile.
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.
Ajoutez toutes les valeurs de la pile ensemble, imprimez-la et conservez-en une copie. Remontez pour la prochaine entrée.
la source
R ,
7570 octetsEssayez-le en ligne!
-5 octets grâce à Giuseppe
Explication
gsub('(u)x','\\1\U306',s,T)
: remplace às
chaque occurrence d'un "u" majuscule ou minuscule (en utilisantignore.case=TRUE
via le quatrième argumentT
) suivi d'un "x" le "u" suivi du unicode pour un brevegsub('([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 utilisantignore.case=TRUE
via le quatrième argumentT
) "c", "g", "h", "j" ou "s" suivi d'un "x" avec la lettre suivie de l'unicode pour un accent circonflexela source
\U0302
et\U0306
: Essayez-le en ligne!QuadR , 25 octets
Combiner l'édition diacritique.
i
drapeauEssayez-le en ligne!
Remplacer…
cas i nsensitivement
Équivalent au code Dyalog APL suivant:
la source
C,
145144 octetsUne autre approche C. Retournez en écrasant l'entrée, en utilisant le fait que circumflex / breve font 2 octets.
-1 octets grâce à Steadybox .
Essayez-le en ligne!
la source
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!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<>"̂"}]
la source
Perl 5 , 49 + 2 (
-p -C
) =6151 octetsEssayez-le en ligne!
10 octets enregistrés grâce à Nahuel Fouilleul
la source
s/[CGHJScghjs]\Kx/\x{0302}/g;s/[Uu]\Kx/\x{0306}/g
-C
et sans-C
avertissement (Wide character in print
)-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.
CJam , 51 octets
Essayez-le en ligne!
Explication:
la source
sed, 108 octets
la source
`...`
ou<pre><code>...</code></pre>
ou 4 retraits.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:
regex remplace le x par la combinaison des caractères Unicode du commentaire de @ user202729.
par exemple
la source
Clojure,
126115 octets-11 octets en changeant le mappage de remplacement en partition d'une chaîne.
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.
la source
JavaScript (ES6), 91 octets
Essayez-le en ligne!
la source
Scala , 110 octets
Solution de regex ennuyeux:
Ancienne solution Scala (116 octets)
Non golfé
la source
JavaScript, 35 caractères, 36 octets
la source
sed, 40 octets (38 caractères)
Essayez-le en ligne!
Je pense que c'est assez différent de la réponse d' iBug .
la source