O famoso idioma construído Esperanto usa o alfabeto latino (principalmente, consulte a página da wikipedia vinculada para obter detalhes). No entanto, existem alguns caracteres com acentos: ĉ, ĝ, ĥ, ĵ, ŝ e ŭ . (C-circunflexo, g-circunflexo, h-circunflexo, j-circunflexo, s-circunflexo e u- breve .) Naturalmente, esses caracteres são muito difíceis de digitar. Mesmo para essa pergunta, tive que procurar no seletor Unicode os caracteres. Devido a isso, uma convenção usando a letra "x" foi desenvolvida para uso eletrônico. Por exemplo, "cxu" é usado para "ĉu". (Nota: a letra "x" não é usada normalmente no alfabeto esperanto. "
No entanto, sou um purista da linguagem! Essa * citação no ar * x absurdo está me matando! Eu preciso de um programa para corrigir isso, de preferência o mais curto possível, para que eu possa digitá-lo no meu terminal o mais rápido possível!
Desafio
Sua missão é pegar uma série de esperanto usando a convenção x e convertê-la em esperanto real.
Na verdade, você precisa mapear:
cx: ĉ
gx: ĝ
hx: ĥ
jx: ĵ
sx: ŝ
ux: ŭ
Cx: Ĉ
Gx: Ĝ
Hx: Ĥ
Jx: Ĵ
Sx: Ŝ
Ux: Ŭ
Todos os outros caracteres ASCII imprimíveis devem ser aceitos e não alterados. Unicode seria bom, mas não necessário.
A entrada e a saída podem estar em qualquer formato razoável ao seu idioma. Boa sorte!
Casos de teste
"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"
Pontuação
Este é o código-golf . As respostas são pontuadas pelo menor número de bytes na codificação padrão do idioma.
Aqui está um snippet de pilha para gerar uma classificação regular e uma visão geral dos vencedores por idioma.
Para garantir que sua resposta seja exibida, inicie-a com um título, usando o seguinte modelo de remarcação:
# Language Name, N bytes
onde N
está o tamanho do seu envio. Se você melhorar sua pontuação, poderá manter as pontuações antigas no título, identificando-as. Por exemplo:
# Ruby, <s>104</s> <s>101</s> 96 bytes
Se você quiser incluir vários números em seu cabeçalho (por exemplo, porque sua pontuação é a soma de dois arquivos ou deseja listar as penalidades de sinalizador de intérprete separadamente), verifique se a pontuação real é o último número no cabeçalho:
# Perl, 43 + 2 (-p flag) = 45 bytes
Você também pode transformar o nome do idioma em um link que será exibido no snippet da tabela de classificação:
# [><>](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>
Boa sorte, divirta-se e fique à vontade para sugerir melhorias!
Esclarecimentos:
Você só precisa se preocupar com caracteres ASCII imprimíveis .
Você só precisa produzir um caractere que se pareça com a saída correta. Sim, isso significa que você pode colocar o sotaque no caractere padrão.
̂
e a combinação de breve está em 0306̆
.Respostas:
QuadR , 65 bytes
Experimente online!
.x
substitua qualquer caractere seguido de "x" por3::⍵M
em caso de erro de indexação, retorne a correspondência sem modificação⋄
agora tente:'ĉĝĥĵŝŭĈĜĤĴŜŬ'[
…]
indexe nesta sequência com⍵M
o índice da⊃
primeira letra da correspondência nessa sequência⍳
'cghjsuCGHJSU'
Isso é equivalente à função tácita Dyalog APL:
fonte
('cghjsuCGHJSU',¨'x')⎕r(,¨'ĉĝĥĵŝŭĈĜĤĴŜŬ')
Retina , 27 bytes
Experimente online!
Este programa é composto por duas transliterações. Devido à combinação de caracteres no código, isso não renderiza muito bem, a primeira linha deve parecer semelhante a
iT`x`^`[cghjs]x
, onde^
significa o caractere de combinação de acento circunflexo. O que isto está dizendo é que ele deveT
traduzir novamente (i
caso de gnoring) todos osx
s da entrada em a^
, sempre que eles estiverem seguindo qualquer letra[cghjs]
.Nota: O TIO mede incorretamente esse código como 25 bytes. Na verdade, esse programa Retina usa codificação UTF-8 (outros programas podem usar UTF-32 ou ISO 8859-1) e os dois caracteres combinados presentes custam 2 bytes cada.
fonte
C,
173154 bytesAgradecemos a @Colera Su por salvar 17 bytes!
Experimente online!
Explicação:
fonte
\0
?write(1,"..."+i*2,2)
para salvar 17 bytes. Experimente online!Python 3 , 81 bytes
Experimente online!
Gera e avalia a sequência:
Erik, o Outgolfer, salvou um byte.
fonte
/// , 75 bytes
Nota: Como o pedido de OP todos os caracteres imprimíveis devem ser processados, meus "caracteres especiais" escolhidos não devem ser imprimíveis. Então, escolhi a guia e a nova linha em vez de, o que não altera minha funcionalidade de bytecount ou código. O código ficaria assim:
No entanto, isso requer que a entrada não deva conter tab ou novas linhas.
Experimente online!
Como
///
não pode receber entrada, você deve colocar a entrada após o código.Bem direto. Eu acho que não pode ser mais curto porque
///
precisa de tratamento especial de cada personagem.Explicação:
fonte
Python 3 , 95 bytes
Experimente online!
-10 bytes graças a WhatToDo
-1 byte graças a Colera Su
fonte
Retina , 55 bytes
Experimente online! Abordagem não combinada. Os bytes podem ser salvos se não for para os
x
casos de teste independentes .fonte
Perl 5 , 101 + 1 (
-p
) = 102 bytesExperimente online!
fonte
JavaScript (ES6), 92 bytes
Experimente online!
Utilizou o método de junção dividida recomendado aqui para reduzir a contagem de bytes, porque o
new RegExp(/*blah*/)
construtor ocupou muitos bytes.Comparação:
Menor, combinando abordagem de acentuação (63 bytes), mas com alguns artefatos visíveis.
Nota de rodapé: estou reivindicando minha resposta 92 bytes porque a solução de 63 bytes possui artefatos que podem afetar a saída.
fonte
APL (Dyalog Unicode) , 57 bytes
Função tácita anônima. Usos:
Função de prefixo para string. Isso translitera a string.
Função de prefixo para lista de strings. Isso translitera as strings.
Função Infix com número de ligação do arquivo de entrada como argumento à direita e número de ligação do arquivo de saída como argumento à esquerda. Isso preenche o arquivo de saída com o conteúdo transliterado do arquivo de entrada.
('cghjsuCGHJSU',¨'x')⎕R(,¨'ĉĝĥĵŝŭĈĜĤĴŜŬ')
(
...)⎕R(
...)
PCRE R moran Jr.'cghjsuCGHJSU'
Estas cartas,¨'x'
cada um seguido por um x... com ...
,¨'ĉĝĥĵŝŭĈĜĤĴŜŬ'
cada uma dessas letras como cadeiasExperimente online!
fonte
J ,
6463 bytesComo funciona:
Com
_2]\
eu reorganizo a string 'ĉĝĥĵŝŭĈĜĤĴŜŬ' em uma coluna de 12 linhas para ajustar o formato da outra string.,.
adiciona 'x' a cada caractere da sequência 'cghjsuCGHJSU' e cria uma matriz de 12 linhas por 2 colunas;~"1'
faz uma lista dos pares em caixas dos itens acima ", 1 - classificação 1 - aplica-se a cada linha.rplc
usa esses itens em caixas para substituir cada ocorrência do item em caixas à esquerda de um par pelo da direita.Experimente online!
fonte
Befunge , 2x48 1 = 99 bytes
Experimente (o TIO é super estranho no Befunge e eu não consegui nenhuma das minhas soluções para trabalhar nele)
Como funciona
Obtém entrada e verifica se é o fim. Finalize o programa, se estiver.
Verifica se o personagem é um "x". Caso contrário, mantenha uma cópia do caractere e imprima-o.
Armazene o último caractere em (1,1). Coloca todos os caracteres para fazer check-in na pilha.
Compare o último caractere com todos os valores na pilha.
Multiplique a verificação (0 ou 1) por ʊ (valor unicode 650). Verifique se o personagem era au (para o breve) e adiciona 4 à pilha, se for o caso. Por fim, adicione o valor ascii de x (100) também. O total adiciona o acento correto, se necessário, ou apenas um "x", se não.
Adicione todos os valores na pilha, imprima e mantenha uma duplicata. Volte para a próxima entrada.
fonte
R ,
7570 bytesExperimente online!
-5 bytes graças a Giuseppe
Explicação
gsub('(u)x','\\1\U306',s,T)
: substitua ems
todas as ocorrências de um "u" maiúsculo ou minúsculo (usandoignore.case=TRUE
o quarto argumentoT
) seguido de um "x" o "u" seguido do unicode por um brevegsub('([cghjs])x','\\1\U302',gsub('(u)x','\\1\U306',s,T),T)
: pegue o resultado disso e substitua todas as ocorrências de maiúsculas ou minúsculas (usandoignore.case=TRUE
o quarto argumentoT
) "c", "g", "h", "j" ou "s" seguido de um "x" por a letra seguida pelo unicode para um circunflexofonte
\U0302
e\U0306
: Experimente online!QuadR , 25 bytes
Combinando edição diacrítica.
i
bandeiraExperimente online!
Substituir…
caso eu nsensitively
Equivalente ao seguinte código Dyalog APL:
fonte
C,
145144 bytesOutra abordagem C. Retorne substituindo a entrada, usando o fato de circumflex / breve são 2 bytes.
-1 bytes graças ao Steadybox .
Experimente online!
fonte
t^1&&memcpy(s-1,"ĉĝĥĵŝŭĈĜĤĴŜŬ"+t,2),t=1;
vez det^1?memcpy(s-1,"ĉĝĥĵŝŭĈĜĤĴŜŬ"+t,2),t=1:0;
salva um byte. Experimente online!Mathematica, 81 bytes ou 57 bytes
StringReplace[RemoveDiacritics@#<>"x"->#&/@Characters@"ĉĝĥĵŝŭĈĜĤĴŜŬ"]
Aplica uma regra de substituição em que a letra sem o chapéu junto com um "x" é substituída pela letra.
Aqui está uma alternativa usando o caractere de acentos adicionados:
StringReplace[{"ux"->"ŭ","Ux"->"Ŭ",c_~~"x":>c<>"̂"}]
fonte
Perl 5 , 49 + 2 (
-p -C
) =6151 bytesExperimente online!
Guardado 10 bytes graças a Nahuel Fouilleul
fonte
s/[CGHJScghjs]\Kx/\x{0302}/g;s/[Uu]\Kx/\x{0306}/g
-C
e sem-C
com advertência (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
Experimente online!
Explicação:
fonte
sed, 108 bytes
fonte
`...`
ou<pre><code>...</code></pre>
ou 4 travessões.PowerShell, 58 bytes
Tem 54 caracteres e salvá-lo no PowerShell ISE o torna UTF-8 + BOM por 58 bytes. Não é tão bem renderizado em um navegador:
regex substitui x pelos caracteres Unicode combinados do comentário de @ user202729.
por exemplo
fonte
Clojure,
126115 bytes-11 bytes, alterando o mapa de substituição para uma partição de uma sequência.
Uma redução em relação ao mapa de substituições a procurar e com o que substituí-las.
Ainda trabalhando em uma maneira de compactar o mapa de substituição.
fonte
JavaScript (ES6), 91 bytes
Experimente online!
fonte
Scala , 110 bytes
Solução regex chata:
Solução Scala antiga (116 bytes)
Ungolfed
fonte
JavaScript, 35 caracteres, 36 bytes
fonte
sed, 40 bytes (38 caracteres)
Experimente online!
Acredito que isso seja diferente o suficiente da resposta do iBug .
fonte