El famoso lenguaje construido Esperanto usa el alfabeto latino (principalmente, vea la página de Wikipedia vinculada para más detalles). Sin embargo, hay algunos caracteres con acentos: ĉ, ĝ, ĥ, ĵ, ŝ y ŭ . (C-circumflex, g-circumflex, h-circumflex, j-circumflex, s-circumflex y u- breve .) Naturalmente, estos caracteres son muy difíciles de escribir. Incluso para esta pregunta, tuve que buscar en el selector Unicode los caracteres. Debido a esto, se ha desarrollado una convención que usa la letra "x" para uso electrónico. Por ejemplo, "cxu" se usa para "ĉu". (Nota: la letra "x" no se usa normalmente en el alfabeto esperanto ".
Sin embargo, ¡soy un purista del lenguaje! ¡Esta * cita aérea * x tonterías me está matando! ¡Necesito un programa para solucionar esto, preferiblemente lo más corto posible para poder escribirlo en mi terminal lo más rápido posible!
Reto
Tu misión es tomar una cadena de esperanto usando la convención x y convertirla en esperanto real.
En efecto, tienes que mapear:
cx: ĉ
gx: ĝ
hx: ĥ
jx: ĵ
sx: ŝ
ux: ŭ
Cx: Ĉ
Gx: Ĝ
Hx: Ĥ
Jx: Ĵ
Sx: Ŝ
Ux: Ŭ
Todos los demás caracteres ASCII imprimibles deben aceptarse y no modificarse. Unicode sería bueno, pero no necesario.
La entrada y salida pueden estar en cualquier formato razonable para su idioma. ¡Buena suerte!
Casos de prueba
"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"
Tanteo
Este es el código de golf . Las respuestas se puntúan por el bytecount más pequeño en la codificación predeterminada del idioma.
Aquí hay un fragmento de pila para generar una tabla de clasificación regular y una descripción general de los ganadores por idioma.
Para asegurarse de que su respuesta se muestre, comience con un título, utilizando la siguiente plantilla de Markdown:
# Language Name, N bytes
¿Dónde N
está el tamaño de su envío? Si mejora su puntaje, puede mantener los puntajes antiguos en el título, tachándolos. Por ejemplo:
# Ruby, <s>104</s> <s>101</s> 96 bytes
Si desea incluir varios números en su encabezado (por ejemplo, porque su puntaje es la suma de dos archivos o desea enumerar las penalizaciones de la bandera del intérprete por separado), asegúrese de que el puntaje real sea el último número en el encabezado:
# Perl, 43 + 2 (-p flag) = 45 bytes
También puede hacer que el nombre del idioma sea un enlace que luego aparecerá en el fragmento de la tabla de clasificación:
# [><>](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>
¡Buena suerte, diviértete y no dudes en sugerir mejoras!
Aclaraciones:
Solo necesita preocuparse por los caracteres ASCII imprimibles .
Solo necesita generar un carácter que se vea como el resultado correcto. Sí, esto significa que puede agregar el acento al carácter estándar.
̂
, y la combinación de breve está en 0306̆
.Respuestas:
QuadR , 65 bytes
Pruébalo en línea!
.x
reemplace cualquier carácter seguido de "x" con3::⍵M
tras el error de indexación, devuelva la coincidencia sin modificar⋄
ahora intente:'ĉĝĥĵŝŭĈĜĤĴŜŬ'[
...]
indexar en esta cadena con⍵M
el índice de la⊃
primera letra de la coincidencia en esta cadena⍳
'cghjsuCGHJSU'
Esto es equivalente a la función tácita Dyalog APL:
fuente
('cghjsuCGHJSU',¨'x')⎕r(,¨'ĉĝĥĵŝŭĈĜĤĴŜŬ')
Retina , 27 bytes
Pruébalo en línea!
Este programa está compuesto por dos transliteraciones. Debido a que tiene caracteres combinados en el código, esto no se procesa demasiado bien, la primera línea debería ser similar a
iT`x`^`[cghjs]x
, donde^
representa el carácter combinatorio acento circunflejo. Lo que esto está diciendo es que deberíaT
ransliterate (i
caso de gnoring) todos losx
s en la entrada en a^
, siempre que estén siguiendo cualquier letra[cghjs]
.Nota: TIO mide incorrectamente este código como 25 bytes. En realidad, este programa Retina usa codificación UTF-8 (otros programas pueden usar UTF-32 o ISO 8859-1) y los dos caracteres combinados presentan un costo de 2 bytes cada uno.
fuente
C,
173154 bytes¡Gracias a @Colera Su por guardar 17 bytes!
Pruébalo en línea!
Explicación:
fuente
\0
?write(1,"..."+i*2,2)
para guardar 17 bytes. Pruébalo en línea!Python 3 , 81 bytes
Pruébalo en línea!
Genera y evalúa la cadena:
Erik el Outgolfer salvó un byte.
fuente
/// , 75 bytes
Nota: Debido a que la solicitud OP debe procesar todos los caracteres imprimibles, mis "caracteres especiales" elegidos no deben ser imprimibles. Así que elegí tab y nueva línea en lugar de, lo que no cambia mi bytecount o la funcionalidad del código. El código se vería así:
Sin embargo, eso requiere que la entrada no debe contener tabulaciones o nuevas líneas.
Pruébalo en línea!
Debido a
///
que no puede tomar entrada, debe poner la entrada después del código.Muy claro. Supongo que no puede ser más corto porque
///
necesita un manejo especial de cada personaje.Explicación:
fuente
Python 3 , 95 bytes
Pruébalo en línea!
-10 bytes gracias a WhatToDo
-1 byte gracias a Colera Su
fuente
Retina , 55 bytes
Pruébalo en línea! Enfoque sin combinación. Los bytes podrían guardarse si no fuera por los
x
casos de prueba independientes .fuente
Perl 5 , 101 + 1 (
-p
) = 102 bytesPruébalo en línea!
fuente
JavaScript (ES6), 92 bytes
Pruébalo en línea!
Se usó el método de unión dividida recomendado aquí para reducir el conteo de bytes porque el
new RegExp(/*blah*/)
constructor tomó demasiados bytes.Comparación:
Más corto, combinando enfoque de acento (63 bytes), pero con algunos artefactos visibles.
Nota al pie: Estoy reclamando mi respuesta 92 bytes porque la solución de 63 bytes tiene artefactos que pueden afectar la salida.
fuente
APL (Dyalog Unicode) , 57 bytes
Función tácita anónima. Usos:
Función de prefijo a cadena. Esto translitera la cadena.
Función de prefijo a la lista de cadenas. Esto translitera las cuerdas.
Función de infijo con número de enlace del archivo de entrada como argumento derecho y número de enlace del archivo de salida como argumento izquierdo. Esto llena el archivo de salida con el contenido transliterado del archivo de entrada.
('cghjsuCGHJSU',¨'x')⎕R(,¨'ĉĝĥĵŝŭĈĜĤĴŜŬ')
(
...)⎕R(
...)
PCRE R eplace'cghjsuCGHJSU'
estas cartas,¨'x'
cada uno seguido de una x… con…
,¨'ĉĝĥĵŝŭĈĜĤĴŜŬ'
cada una de estas letras como cadenasPruébalo en línea!
fuente
J ,
6463 bytesCómo funciona:
Con
_2]\
reorganizo la cadena 'ĉĝĥĵŝŭĈĜĤĴŜŬ' en una columna de 12 filas para que se ajuste a la forma de la otra cadena.,.
agrega 'x' a cada carácter de la cadena 'cghjsuCGHJSU' y forma una matriz de 12 filas por 2 columnas;~"1'
hace una lista de los pares en caja de los anteriores, "1 - rango 1 - se aplica a cada fila.rplc
usa estos elementos en caja para reemplazar cada aparición del elemento en caja izquierda de un par con el derecho.Pruébalo en línea!
fuente
Befunge , 2x48 +1 = 99 bytes
Pruébelo (TIO es muy extraño sobre Befunge y no pude conseguir que ninguna de mis soluciones funcionara)
Cómo funciona
Obtiene información y comprueba si es el final. Fin del programa si es así.
Comprueba si el personaje es una "x". Si no, conserve una copia del personaje e imprímalo.
Almacene el último personaje en (1,1). Pone a todos los personajes para verificar en la pila.
Compare el último carácter con todos los valores en la pila.
Multiplique el cheque (0 o 1) por ʊ (valor unicode 650). Comprueba si el personaje era au (para el breve) y agrega 4 a la pila si es así. Finalmente, agregue el valor ascii de x (100) también. El total se suma al acento correcto si es necesario o simplemente una "x" si no.
Agregue todos los valores en la pila, imprímalo y mantenga un duplicado. Regrese para la siguiente entrada.
fuente
R ,
7570 bytesPruébalo en línea!
-5 bytes gracias a Giuseppe
Explicación
gsub('(u)x','\\1\U306',s,T)
: reemplace ens
cada aparición de una "u" mayúscula o minúscula (mediante el usoignore.case=TRUE
del cuarto argumentoT
) seguido de una "x", la "u" seguida de unicode para un brevegsub('([cghjs])x','\\1\U302',gsub('(u)x','\\1\U306',s,T),T)
: tome el resultado de eso y reemplace cada aparición de mayúsculas o minúsculas (ignore.case=TRUE
mediante el cuarto argumentoT
) "c", "g", "h", "j" o "s" seguido de una "x" con la letra seguida del unicode para un circunflejofuente
\U0302
y\U0306
: ¡ Pruébelo en línea!QuadR , 25 bytes
Edición combinada de diacríticos.
i
banderaPruébalo en línea!
Reemplazar…
entre mayúsculas i nsensitively
Equivalente al siguiente código Dyalog APL:
fuente
C,
145144 bytesOtro enfoque de C. Regrese sobrescribiendo la entrada, usando el hecho de que circunflex / breve son 2 bytes.
-1 bytes gracias a Steadybox .
Pruébalo en línea!
fuente
t^1&&memcpy(s-1,"ĉĝĥĵŝŭĈĜĤĴŜŬ"+t,2),t=1;
lugar det^1?memcpy(s-1,"ĉĝĥĵŝŭĈĜĤĴŜŬ"+t,2),t=1:0;
guardar un byte. Pruébalo en línea!Mathematica, 81 bytes o 57 bytes
StringReplace[RemoveDiacritics@#<>"x"->#&/@Characters@"ĉĝĥĵŝŭĈĜĤĴŜŬ"]
Aplica una regla de reemplazo donde la letra sin el sombrero junto con una "x" se reemplaza por la letra.
Aquí hay una alternativa usando el carácter de acentos agregado:
StringReplace[{"ux"->"ŭ","Ux"->"Ŭ",c_~~"x":>c<>"̂"}]
fuente
Perl 5 , 49 + 2 (
-p -C
) =6151 bytesPruébalo en línea!
Guardado 10 bytes gracias a Nahuel Fouilleul
fuente
s/[CGHJScghjs]\Kx/\x{0302}/g;s/[Uu]\Kx/\x{0306}/g
-C
y sin-C
advertencia (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 bytes
Pruébalo en línea!
Explicación:
fuente
sed, 108 bytes
fuente
`...`
o<pre><code>...</code></pre>
o 4 guiones.PowerShell, 58 bytes
Tiene 54 caracteres y guardarlo en PowerShell ISE lo convierte en UTF-8 + BOM para 58 bytes. No se procesa tan bien en un navegador:
regex reemplaza la x con la combinación de caracteres Unicode del comentario de @ user202729.
p.ej
fuente
Clojure,
126115bytes-11 bytes cambiando el mapa de reemplazo a una partición de una cadena.
Una reducción sobre un mapa de reemplazos a buscar y con qué reemplazarlos.
Todavía estoy trabajando en una forma de comprimir el mapa de reemplazo.
fuente
JavaScript (ES6), 91 bytes
Pruébalo en línea!
fuente
Scala , 110 bytes
Solución aburrida de expresiones regulares:
Antigua solución scala (116 bytes)
Sin golf
fuente
JavaScript, 35 caracteres, 36 bytes
fuente
sed, 40 bytes (38 caracteres)
Pruébalo en línea!
Creo que esto es lo suficientemente diferente de la respuesta de iBug .
fuente