Esto se inspiró en una pregunta CS.SE ahora eliminada .
Tarea
Dadas dos cadenas de entrada no vacías A y B, genera la distancia más pequeña de A a un palíndromo que contiene B como una subcadena. La distancia se define por el número de reemplazos de caracteres ( distancia de Hamming ).
Restricciones
- Entrada sensible: existe un palíndromo. Esto significa | A | ≥ | B |.
- A y B contienen solo caracteres ASCII inferiores, las minúsculas y mayúsculas son distintas (al igual que todos los demás caracteres).
- Si su idioma no puede tratar con caracteres ASCII, también puede usar números enteros (o algún otro tipo de datos razonable), y puede elegir limitar el rango a 128 elementos.
- Puede recibir información de stdin, argumentos de función, argumentos de línea de comando, etc.
- Puede dar el resultado en stdout, valor de retorno, etc.
- No necesita dar un palíndromo que funcione, la distancia más pequeña a uno es suficiente.
Ejemplos
A B Output
thilloaoyreot hello 4 (thelloaolleht)
benjonson stack 9 (stackcats)
neversaynever! odd 9 (neveroddoreven)
ppcggcpp gg 0 (ppcggcpp)
stars tat 1 (stats)
Puntuación
Este es el código de golf, el código más corto en bytes gana.
code-golf
string
palindrome
Comunidad
fuente
fuente

Pyth, 45 bytes
Pruébalo en línea. Banco de pruebas.
Todavía no estoy exactamente satisfecho con cómo resultó esto. Pero al menos es bastante difícil de entender sin una explicación ahora. (¿Éxito, supongo?)
Explicación
Qy B comoz.m…_BQCalcule lo siguiente para A y su reverso comod:m…h-ldlzCalcule lo siguiente para todoskdesde 0 hastalen(A) - len(B)inclusive:+BklzConsigue el park, k + len(B).cdDivididoden esos índices.X...1zReemplace la segunda parte (del medio) con B.KsConcatenar las piezas y guardar enK. B ahora se inserta en la posiciónken A o en su reverso.hc2Divide la cuerda resultante en dos y mantén la primera pieza. Esto le da a la mitad de la cadena el posible carácter del medio.hc2PKElimina el último personaje y haz la misma división, manteniendo la primera pieza. Esto le da la mitad de la cadena sin el posible carácter del medio.+…_Agregue el reverso de la pieza más corta a la pieza más larga. Ahora tenemos un palíndromo.sConcatenar los resultados para A y su reverso.f}zTElimine todas las cadenas que no contengan B.mCalcule lo siguiente para todas las cadenas resultantesd:nVQdObtenga la desigualdad por pares con A. Esto da verdadero para los pares que necesitan ser cambiados.sSuma la lista. Esto le da a Hamming la distancia.hSToma el resultado mínimo.fuente
JavaScript (Firefox 30+),
152146 bytesEnfoque de fuerza bruta: genere cada posible superposición de A y B, convierta cada uno en un palíndromo, calcule las distancias de Hamming desde A y tome la menor de las distancias resultantes.
Probablemente podría jugar al golf un poco más ...
Fragmento de prueba
Mostrar fragmento de código
fuente