Comencemos definiendo un reflejo de un personaje en una cadena:
Dada una cadena con letras alfabéticas en minúsculas distintas sin espacios como abcdefg
, defina un reflejo de una letra en la cadena c
como moviéndola (sin cambiar el orden de ninguna otra letra) a un nuevo lugar en la cadena de manera que el número de letras originalmente a la derecha está el número de letras a la izquierda.
Por lo tanto, un reflejo de la letra c
en abcdefg
sería abdecfg
. Explicación: había 4 letras a la derecha de c
y ahora, hay 4 letras a la izquierda de c
.
Algunos ejemplos más:
Reflejar el carácter e
en myfriend
formaría la cadenamyefrind
Reflejar el carácter a
en axyz
formaría la cadena xyza
.
Reflejar el carácter b
en abc
formaría la cadena abc
.
Reflejar el carácter d
en d
formaría la cadena d
.
Reflejar el carácter e
en ef
formaría la cadena fe
.
Para obtener más información o probar algunos casos de prueba, aquí hay un programa (algo largo) que escribí en C ++.
El reto
Dada una cadena con letras minúsculas distintas, revise cada carácter alfabéticamente y "refleje" en la cadena.
Aclaraciones: las letras de la cadena son de a-z
, no hay espacios, las letras son únicas y la cadena tiene al menos 1 letra de largo y como máximo 26 letras de largo.
Ejemplos
Entrada: dcba
. Salida: dcba
.
Motivo: Primero, refleje el a
carácter de la cadena que aparece más temprano en el alfabeto. Lo conseguirás adcb
. Luego, refleje b
como viene a continuación en el alfabeto, para obtener badc
. Luego, refleje el c
para obtener cbad
, y luego el d
para obtener dcba
.
Entrada: myface
. Salida: fyecma
.
Sugerencia: revisa las letras en el orden a, c, e, f, m, y
.
Entrada: a
. Salida: a
.
Entrada: acb
. Salida: bac
.
Entrada: cwmfjordbankglyphsvextquiz
. Salida: ieabhqzugdltkfnvpjxsormycw
.
Tanteo
- La entrada y salida se pueden dar por cualquier método conveniente .
- Un programa completo o una función son aceptables. Si es una función, puede devolver el resultado en lugar de imprimirlo.
- Las lagunas estándar están prohibidas.
- Este es el código de golf, por lo que se aplican todas las reglas habituales de golf, y gana el código más corto (en bytes).
- Aceptando ~ 100 horas después de la publicación.
Ganador actual
<style>body { text-align: left !important} #answer-list { padding: 10px; width: 290px; float: left; } #language-list { padding: 10px; width: 290px; float: left; } table thead { font-weight: bold; } table td { padding: 5px; }</style><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="language-list"> <h2>Shortest Solution 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> <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> <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><script>var QUESTION_ID = 162891; var ANSWER_FILTER = "!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe"; var COMMENT_FILTER = "!)Q2B_A2kjfAiU78X(md6BoYk"; var OVERRIDE_USER = 12012; var answers = [], answers_hash, answer_ids, answer_page = 1, more_answers = true, comment_page; function answersUrl(index) { return "https://api.stackexchange.com/2.2/questions/" + QUESTION_ID + "/answers?page=" + index + "&pagesize=100&order=desc&sort=creation&site=codegolf&filter=" + ANSWER_FILTER; } function commentUrl(index, answers) { return "https://api.stackexchange.com/2.2/answers/" + answers.join(';') + "/comments?page=" + index + "&pagesize=100&order=desc&sort=creation&site=codegolf&filter=" + COMMENT_FILTER; } function getAnswers() { jQuery.ajax({ url: answersUrl(answer_page++), method: "get", dataType: "jsonp", crossDomain: true, success: function (data) { answers.push.apply(answers, data.items); answers_hash = []; answer_ids = []; data.items.forEach(function(a) { a.comments = []; var id = +a.share_link.match(/\d+/); answer_ids.push(id); answers_hash[id] = a; }); if (!data.has_more) more_answers = false; comment_page = 1; getComments(); } }); } function getComments() { jQuery.ajax({ url: commentUrl(comment_page++, answer_ids), method: "get", dataType: "jsonp", crossDomain: true, success: function (data) { data.items.forEach(function(c) { if (c.owner.user_id === OVERRIDE_USER) answers_hash[c.post_id].comments.push(c); }); if (data.has_more) getComments(); else if (more_answers) getAnswers(); else process(); } }); } getAnswers(); var SCORE_REG = /<h\d>\s*([^\n,<]*(?:<(?:[^\n>]*>[^\n<]*<\/[^\n>]*>)[^\n,<]*)*),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/; var OVERRIDE_REG = /^Override\s*header:\s*/i; function getAuthorName(a) { return a.owner.display_name; } function process() { var valid = []; answers.forEach(function(a) { var body = a.body; a.comments.forEach(function(c) { if(OVERRIDE_REG.test(c.body)) body = '<h1>' + c.body.replace(OVERRIDE_REG, '') + '</h1>'; }); var match = body.match(SCORE_REG); if (match) valid.push({ user: getAuthorName(a), size: +match[2], language: match[1], link: a.share_link, }); else console.log(body); }); valid.sort(function (a, b) { var aB = a.size, bB = b.size; return aB - bB }); var languages = {}; var place = 1; var lastSize = null; var lastPlace = 1; valid.forEach(function (a) { if (a.size != lastSize) lastPlace = place; lastSize = a.size; ++place; var answer = jQuery("#answer-template").html(); answer = answer.replace("{{PLACE}}", lastPlace + ".") .replace("{{NAME}}", a.user) .replace("{{LANGUAGE}}", a.language) .replace("{{SIZE}}", a.size) .replace("{{LINK}}", a.link); answer = jQuery(answer); jQuery("#answers").append(answer); var lang = a.language; lang = jQuery('<a>'+lang+'</a>').text(); languages[lang] = languages[lang] || {lang: a.language, lang_raw: lang.toLowerCase(), user: a.user, size: a.size, link: a.link}; }); var langs = []; for (var lang in languages) if (languages.hasOwnProperty(lang)) langs.push(languages[lang]); langs.sort(function (a, b) { if (a.lang_raw > b.lang_raw) return 1; if (a.lang_raw < b.lang_raw) return -1; return 0; }); for (var i = 0; i < langs.length; ++i) { var language = jQuery("#language-template").html(); var lang = langs[i]; language = language.replace("{{LANGUAGE}}", lang.lang) .replace("{{NAME}}", lang.user) .replace("{{SIZE}}", lang.size) .replace("{{LINK}}", lang.link); language = jQuery(language); jQuery("#languages").append(language); } }</script>
Respuestas:
Brain-Flak , 188 bytes
Pruébalo en línea!
Además de las reflexiones descritas en la especificación de desafío, este código también invierte la cadena exactamente 26 veces. Esto no tiene ningún efecto en el resultado final.
fuente
05AB1E ,
2017 bytesPruébalo en línea!
Explicación
Con ejemplo para la primera iteración de
myface
La cadena está rodeada de espacios en cada iteración, ya que la división en la primera o última letra de la cadena daría como resultado una lista de longitud 1 de lo contrario y la fusión no incluiría esa letra.
fuente
Pyth,
18161916 bytesPruébalo aquí
Explicación
fuente
Python 3 ,
8073 bytesGracias a Esolanging Fruit por recordarme que las funciones pueden regresar modificando su argumento.
Pruébalo en línea!
Toma la entrada como una lista de caracteres.
fuente
Python 2 , 70 bytes
Pruébalo en línea!
Modifica la lista de entrada.
fuente
Retina 0.8.2 , 61 bytes
Pruébalo en línea! El enlace incluye casos de prueba. Explicación:
Comience el ciclo a las
a
.Si la entrada contiene la letra actual, muévala al final, con una cadena de
_
s que represente su posición original.Por cada
_
movimiento, la letra retrocede un carácter.Incrementa la letra. Después de
z
cambiarlo a a!
para que no coincida con nada y el ciclo termina.Eliminar el
!
.fuente
Java 8,
1409692888785 bytes-44 bytes creando un puerto de respuesta de Python 2 de @TFeld .
-6 bytes gracias a @ OlivierGrégoire .
Modifica la lista de entrada en lugar de crear una nueva.
Explicación:
Pruébalo en línea.
fuente
s->{for(char c=96;++c<123;){int i=s.indexOf(c);if(i>=0)s.add(s.size()+~i,s.remove(i));}}
for(char c=9;++c>1;)
es mejor ;-)char
también se envuelve comoInteger.MAX_VALUE + 1 == Integer.MIN_VALUE
.. ¡Inteligente!s
es una ArrayList, porindexOf
lo que será de tipo genéricoT
(que esCharacter
para esta lista de entrada).JavaScript,
858079 bytes-6 bytes gracias a @DanielIndie
Pruébalo en línea!
fuente
Ruby , 51 bytes
Pruébalo en línea!
Toma una variedad de caracteres
Devuelve modificando la entrada
fuente
Rojo ,
9694 bytes2 bytes guardados gracias a Kevin Cruijssen
Pruébalo en línea!
Más legible:
fuente
find x c replace x c""insert at x i c
afind x c insert at replace x c""i c
para deshacerse de unx
y espacio.R ,
737269 bytesPruébalo en línea!
Entradas y salidas de un vector de caracteres.
fuente
c
como nombre de variable? eso es horrible, incluso para el golf de código!c
forchar
) en lugar de los elementos integrados no utilizados.c
, y fue horrible cuando no pude entender lo que estaba sucediendo. Normalmente usoK
ok
inclusoC
solo para evitar problemas como ese, pero lo entiendo totalmente.append
Definitivamente es la herramienta adecuada para el trabajo.Perl 5
-p
, 37 bytesPruébalo en línea!
fuente
Japt ,
2322 bytesGuardado un byte gracias a Oliver .
Pruébalo en línea!
fuente
,É
conJ
Haskell, 87 bytes
Pruébalo en línea!
fuente
f s=foldl(#)s['a'..'z']
?['a'..]
no es infinito, porqueChar
pertenece a la claseBounded
. Una lista con..]
deBounded
valores se detiene enmaxBound
. Proveedores:print [False ..]
.SNOBOL4 (CSNOBOL4) ,
132128 bytesPruébalo en línea!
Implementación directa del algoritmo requerido. Ahorró unos pocos bytes al cambiar a una función en lugar de un programa completo; La explicación sigue siendo la misma, más o menos.
fuente
Jalea ,
1211 bytesUn enlace monádico que acepta una lista de caracteres y devuelve una lista de caracteres.
Pruébalo en línea!
¿Cómo?
fuente
ḟ
(filtrar) pero aún no lo he logrado.sorted
y luego ejecuta n iteraciones de lo que parecen ser operaciones menos complejas (aplanamiento, división en índices encontrados, unión, inversión) ) - y Pythonsorted
es O (n log n).C (clang) ,
164162 bytesPruébalo en línea!
f()
toma la matriz de caracteres que contiene la cadena de entrada y la longitud de esta matriz como parámetros y realiza las reflexiones requeridas en su lugar.callf()
hace una bonita impresión.Créditos
-2 bytes. @Kevin. Gracias
fuente
char *s
y cambiari=96
ai=9
para guardar 2 bytes.a
. GraciasAPL + WIN, 63 bytes
Solicita cadena de entrada
Explicación:
fuente
Perl ,
7470 bytes8480 bytes incluyendo invocación como filtro unixfuente