A ideia é simples. Você deve criar uma substituição de letra "visualizada", fornecendo três cadeias (a entrada pode ser separada por vírgula, entradas separadas ou como uma matriz). O primeiro segmento é a palavra que você deseja corrigir e o segundo segmento são as letras que você deseja substituir e o terceiro segmento é a substituição das letras no segmento 2.
Por exemplo:
| | Input | Starting Word | Output |
|----|-----------------------------|---------------|-------------|
| #1 | Hello world -wo -ld +Ea +th | Hello world | Hello Earth |
| #2 | Hello World -wo -ld +Ea +th | Hello World | Hello Worth |
| #3 | Hello -llo +y | Hello | Hey |
| #4 | Red -R -d +Gr +en | Red | Green |
| #5 | mississippi -is -i +lz +p | mississippi | mlzslzspppp |
| #6 | Football -o -a +a +i | Football | Fiitbill |
| #7 | mississippi -is -i +iz +p | mississippi | mpzspzspppp |
Explicação
As substituições devem ser feitas passo a passo com o respectivo par. Aqui está uma ilustração com uma entrada de mississippi -is -i +iz +p
para fornecer a saída mpzspzsppp
(veja o exemplo #7
acima)
| Step | Input | Output |
|------ |--------------------------- |------------- |
| #1 | mississippi -is -i +iz +p | |
| #2 | mississippi -is +iz | mizsizsippi |
| #3 | mizsizsippi -i +p | mpzspzspppp |
Regras
- As entradas estão sempre nessa ordem
<starting_string> <list_of_letters_to_replace> <replacement_letters>
. - Cartas para substituir e substituir grupos nunca serão misturadas (ou seja: nunca haverá
-a +i -e +o
). - As letras a serem substituídas sempre são prefixadas
-
e as letras de substituição são sempre prefixadas+
. (O prefixo é obrigatório) - Pode haver mais de um conjunto de letras para substituir, portanto, você deve procurar o prefixo.
- Suponha que a quantidade de grupos de letras a ser substituída e a quantidade de grupos de letras de substituição sejam sempre iguais (ou seja: nunca haverá
-a -e +i
) - As substituições diferenciam maiúsculas de minúsculas (veja o exemplo
#1
e#2
). - As substituições são feitas na ordem em que foram fornecidas na entrada.
- As substituições de letras podem ser substituídas por outras substituições. Veja exemplo
#6
. - O primeiro segmento (palavra inicial) nunca incluirá
-
ou+
caracteres. - Isso é código-golfe, então os bytes mais curtos vencem.
Classificação
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 do placar de líderes:
# [><>](http://esolangs.org/wiki/Fish), 121 bytes
var QUESTION_ID=96473,OVERRIDE_USER=38505;function answersUrl(e){return"http://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"http://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>
letter to replace
(com prefixo-
) e a entrada int (n / 2) +1 a n-1 sãoreplacement
(com prefixo+
)gello
) e depois me enviou as substituições de cartas (-g +h
) porque ele queria ser irritante em vez de enviarhello*
.Respostas:
05AB1E ,
1517 bytesExperimente online!
Explicação
Ou com um formato de entrada menos estrito
Experimente online
fonte
JavaScript (ES6),
8583 bytesCasos de teste
Mostrar snippet de código
fonte
Pyke,
1311 bytesExperimente aqui!
Ou 2 bytes, se estiver em um formato de entrada diferente:
Experimente aqui!
fonte
Perl, 58 bytes
Código de 57 bytes + 1 para
-p
.Requer o primeiro item em uma linha e as substituições na próxima. Muito obrigado a @Dada, que criou uma abordagem diferente para ajudar a reduzir em 4 bytes!
Uso
fonte
perl -pE 's/(.*?) -(\S*)(.*?)\+(\S*)/"(\$1=~s%$2%$4%gr).\"$3\""/ee&&redo'
. Não consigo diminuí-lo, mas talvez você possa :) #perl -pE '$a=<>;1while$a=~s%-(\S*)(.*?)\+(\S*)%"s/$1/$3/g;q{$2}"%ee'
. (pega a corda em uma linha e as "bandeiras" na próxima linha)GNU sed 86 bytes
Inclui +1 para -r
Experimente online!
Exemplo:
fonte
PHP,
9897 bytesEste desafio descreve o comportamento exato do str_replace, portanto, para o php, trata-se de fazer as matrizes de substituições. Tentei fazê-lo usando apenas uma "substring", mas essa pode não ser a melhor solução. Use como:
editar: 1 byte salvo graças a Titus
fonte
$v[0]>'+'
economiza um byte$v[0]=='-'
. Você também pode usarord($v)&4
.Java 7,
153133 bytesUngolfed & código de teste:
Experimente aqui.
Resultado:
fonte
new String[]{'Rom Ro. Rom", "-Ro." , "+No."}
? Basta escrever algo que (espero) corresponda a uma expressão regular errada.Rom No. Rom
. Aliás, você pode tentar você mesmo clicando noTry it here.
link da publicação e depois bifurcando-o. :)PHP, 164 bytes
fonte
Vim, 25 bytes
qq+dE+r-PdiW:1s<C-R>"-g<CR>@qq@q
Assume a entrada neste formato:
+dE+r-PdiW
: Combina-
e+
em um único registro, com o+
transformado em-
.:1s<C-R>"-g
: Usa o registro como um trecho de código, inserido diretamente no:s
comando, com-
o separador.fonte
Convexo , 19 bytes
Experimente online!
fonte
R,
9894 bytesEdit: salvou 4 bytes graças a @rturnbull
Casos não testados e de teste
Como
scan
(lê a entrada de stdin) não funciona corretamente no R-fiddle, mostro o programa envolvendo-o em uma função. Note-se que a função leva um vector tal como uma entrada, e pode ser executado por, por exemplo:f(c("Hello world", "-wo", "-ld", "+Ea", "+th"))
. O programa gofled acima solicitaria ao usuário a entrada usando stdin, digitando"Hello world" -wo -ld -Ea +th
o console renderia o mesmo resultado.Execute o código no R-fiddle
fonte
"
torno da string de entrada?"Hello world" => enter => "-wo" => enter => "-ld" => enter => "+Ea" => enter =>"+th"
:), que geralmente é como as strings são lidas de qualquer maneira.l=length(i)
al=length(i)/2
e atualizar as referências posterioresl
.Haskell,
8578 bytesExemplo de uso:
("mississippi" # "-is -i") "+lz +p"
->"mlzslzspppp"
.Como funciona:
Edit: @BlackCap encontrado 6 bytes para salvar e eu mesmo outro.
fonte
import Data.Lists;a#b=foldl(uncurry replace
flip)a.zip(g b).g;g=map tail.words
flip
infix. O prefixo padrão é um byte mais curto.Python 3, 93 bytes
Experimente online!
A entrada é uma lista com cadeias, as cadeias de substituição são separadas por espaço.
Exemplo de entrada:
['mississippi','-is -i','+iz +p']
fonte
PowerShell v2 +, 90 bytes
Toma entrada como argumentos três, com a
-
e+
cadeias de espaço separado. Executa um-split
on$b
(-split
quando atua de maneira unária divide-se em espaço em branco) e, em seguida,|%{...}
percorre cada um deles. A cada iteração que estamos removendo-
, localizando a próxima[$i++]
cadeia de substituição e removendo+
dela, e usando a-creplace
(substituição com distinção entre maiúsculas e minúsculas) para cortar e cortar dados$a
e armazená-la novamente$a
. Em seguida,$a
é deixado no pipeline e a saída é implícita.fonte
PHP, 106 bytes
abordagem direta. Corra com
php -r '<code> <arguments>
.fonte