La idea es simple. Debe crear un reemplazo de letra "visualizado", proporcionando 3 cadenas (la entrada puede estar separada por comas, entradas separadas o como una matriz). El primer segmento es la palabra que desea corregir, y el segundo segmento son las letras que desea reemplazar, y el tercer segmento es el reemplazo de las letras en el segmento 2.
Por ejemplo:
| | 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 |
Explicación
Los reemplazos deben hacerse paso a paso con sus respectivos pares. Aquí hay una ilustración con una entrada de mississippi -is -i +iz +p
para dar la salida mpzspzsppp
(ver ejemplo #7
arriba)
| Step | Input | Output |
|------ |--------------------------- |------------- |
| #1 | mississippi -is -i +iz +p | |
| #2 | mississippi -is +iz | mizsizsippi |
| #3 | mizsizsippi -i +p | mpzspzspppp |
Reglas
- Las entradas siempre están en este orden
<starting_string> <list_of_letters_to_replace> <replacement_letters>
. - Las letras para reemplazar y los grupos de reemplazo nunca se mezclarán (es decir, nunca lo habrá
-a +i -e +o
). - Las letras para reemplazar siempre tienen el prefijo
-
y las letras de reemplazo siempre tienen el prefijo+
. (El prefijo es obligatorio) - Puede haber más de un conjunto de letras para reemplazar, por lo que deberá mirar el prefijo.
- Suponga que la cantidad de grupos de letras para reemplazar y la cantidad de grupos de letras de reemplazo siempre son iguales (es decir, nunca habrá
-a -e +i
) - Los reemplazos distinguen entre mayúsculas y minúsculas (ver ejemplo
#1
y#2
). - Los reemplazos se realizan en el orden en que fueron dados en la entrada.
- Los reemplazos de letras se pueden reemplazar con otros reemplazos. Ver ejemplo
#6
. - El primer segmento (palabra inicial) nunca incluirá
-
o+
caracteres. - Este es el código de golf, por lo que ganan los bytes más cortos.
Tablas de clasificación
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=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
(con prefijo-
) y la entrada int (n / 2) +1 a n-1 sonreplacement
(con prefijo+
)gello
) y luego me enviaba los reemplazos de letras (-g +h
) porque quería ser molesto en lugar de enviarhello*
.Respuestas:
05AB1E ,
1517 bytesPruébalo en línea!
Explicación
O con un formato de entrada menos estricto
Pruébalo en línea
fuente
JavaScript (ES6),
8583 bytesCasos de prueba
Mostrar fragmento de código
fuente
Pyke,
1311 bytesPruébalo aquí!
O 2 bytes si está en un formato de entrada diferente:
Pruébalo aquí!
fuente
Perl, 58 bytes
Código de 57 bytes + 1 para
-p
.Requiere el primer artículo en una línea, luego los reemplazos en la siguiente. ¡ Muchas gracias a @Dada que ideó un enfoque diferente para ayudar a reducir en 4 bytes!
Uso
fuente
perl -pE 's/(.*?) -(\S*)(.*?)\+(\S*)/"(\$1=~s%$2%$4%gr).\"$3\""/ee&&redo'
. No puedo lograr que sea más corto, pero tal vez puedas :)perl -pE '$a=<>;1while$a=~s%-(\S*)(.*?)\+(\S*)%"s/$1/$3/g;q{$2}"%ee'
. (toma la cuerda en una línea y las "banderas" en la línea siguiente)GNU sed 86 Bytes
Incluye +1 para -r
Pruébalo en línea!
Ejemplo:
fuente
PHP,
9897 bytesEste desafío describe el comportamiento exacto de str_replace, por lo que para php se trata de hacer matrices de reemplazos. Traté de hacerlo usando solo una "subcadena", pero esa podría no ser la mejor solución. Usar como:
editar: 1 byte guardado gracias a Titus
fuente
$v[0]>'+'
ahorra un byte$v[0]=='-'
. También podría usarord($v)&4
en su lugar.Java 7,
153133bytesUngolfed y código de prueba:
Pruébalo aquí
Salida:
fuente
new String[]{'Rom Ro. Rom", "-Ro." , "+No."}
? Simplemente escribo algo que (con suerte) coincide con una expresión regular incorrecta.Rom No. Rom
. Por cierto, puedes probarlo tú mismo haciendo clic en elTry it here.
enlace de la publicación y luego bifurcarlo. :)PHP, 164 bytes
fuente
Vim, 25 bytes
qq+dE+r-PdiW:1s<C-R>"-g<CR>@qq@q
Asume entrada en este formato:
+dE+r-PdiW
: Combina-
y+
en registro único, con el+
convertido en a-
.:1s<C-R>"-g
: Utiliza el registro como un fragmento de código, insertado directamente en el:s
comando, con-
el separador.fuente
Convexo , 19 bytes
Pruébalo en línea!
fuente
R,
9894 bytesEditar: guardado 4 bytes gracias a @rturnbull
Sin golf y casos de prueba
Debido a que
scan
(lee la entrada de stdin) no funciona correctamente en R-fiddle, muestro el programa envolviéndolo en una función. Obsérvese que la función toma un vector como una entrada y se puede ejecutar por ejemplo:f(c("Hello world", "-wo", "-ld", "+Ea", "+th"))
. El programa gofled anterior solicitaría al usuario que ingrese usando stdin, por lo que escribir"Hello world" -wo -ld -Ea +th
en la consola produciría el mismo resultado.Ejecute el código en R-fiddle
fuente
"
alrededor de la cadena de entrada?"Hello world" => enter => "-wo" => enter => "-ld" => enter => "+Ea" => enter =>"+th"
que generalmente es cómo se leen las cadenas de todos modos.l=length(i)
al=length(i)/2
y la actualización de las referencias posteriores al
.Haskell,
8578 bytesEjemplo de uso:
("mississippi" # "-is -i") "+lz +p"
->"mlzslzspppp"
.Cómo funciona:
Editar: @BlackCap encontró 6 bytes para guardar y yo mismo otro.
fuente
import Data.Lists;a#b=foldl(uncurry replace
voltear)a.zip(g b).g;g=map tail.words
flip
infijo. El prefijo estándar es un byte más corto.Python 3, 93 bytes
Pruébalo en línea!
La entrada es una lista con cadenas, las cadenas de reemplazo están separadas por espacios.
Entrada de ejemplo:
['mississippi','-is -i','+iz +p']
fuente
PowerShell v2 +, 90 bytes
Toma de entrada como tres argumentos, con el
-
y+
cadenas espacio separados. Realiza un-split
encendido$b
(el-split
cuando actúa de manera unaria se divide en espacios en blanco), luego recorre|%{...}
cada uno de ellos. Cada iteración estamos eliminando-
, encontrando la siguiente[$i++]
cadena de reemplazo y quitándola+
, y usando el-creplace
(reemplazo sensible a mayúsculas y minúsculas) para cortar y cortar en dados$a
y almacenarlo nuevamente$a
. Luego,$a
se deja en la tubería y la salida es implícita.fuente
PHP, 106 bytes
Enfoque directo. Corre con
php -r '<code> <arguments>
.fuente