Arreglar el Meeesesessessesseesseessedessed upp teeexexextext

38

Esto está inspirado en el Lunes Mini-Golf # 6: Meeesesessess upp teeexexextext

Fondo

ETHproductions tiene dificultades para ingresar texto en su página web habitual. Cada vez que use dígitos o letras, el texto será memesessessesesseesseessedessed. Su tarea es ayudarlo a escribir para que se logre el comportamiento normal.

La transformación

La transformación afecta las ejecuciones de caracteres alfanuméricos ( [0-9A-Za-z]) delimitados por cualquier carácter no alfanumérico. En el siguiente ejemplo, la primera línea se transformaría en la segunda (las otras líneas muestran el desglose de la transformación)

An12num:
Annn1n12n12nn12nn12nun12nun12numn12num
A
 nn
   n1
     n12
        n12nn12n
                n12nun12nu
                          n12numn12num

En particular, cualquier carácter alfanumérico después del primero en una ejecución se transformará en toda la ejecución hasta ahora, excepto el primer carácter . Además, si el personaje es una letra (en lugar de un dígito), el personaje se convertirá en dos veces la carrera.

Afortunadamente, la tecla de retroceso eliminará el último carácter y también restablecerá el comienzo de la ejecución.

Tarea

Esta vez su tarea no es realizar la transformación. En cambio, dada una cadena de entrada, debe devolver un texto codificado que, si se transforma, dará como resultado la entrada. La salida debe ser lo más corta posible, donde se \<char>cuenta como un solo carácter.

El texto se codifica de la siguiente manera:

\                   -> \\
backspace character -> \b
linefeed            -> \n

Puede escribir un programa o función, tomando la entrada a través de STDIN (o la alternativa más cercana), argumento de línea de comando o argumento de función y generando el resultado a través de STDOUT (o la alternativa más cercana), el valor de retorno de la función o el parámetro de función (out).

Casos de prueba

Cada caso de prueba tiene dos líneas, la primera entrada y la segunda salida.

Heeeeeelp me. It shouldn't be messed up.
Hee \blp\b me\b. It\b sh\bou\bld\bn't be\b me\bss\bed\b up\b.

alert("Hello, world!");
al\ber\bt("He\bll\bo, wo\brl\bd!");

1223234234523456
123456
Akangka
fuente
66
Está bien definido, pero ¿por qué no hay respuesta?
Akangka
1
De alguna manera me perdí esto; buen spin-off! Quizás intente escribir una respuesta más tarde.
ETHproductions
Esto me recuerda el momento en que un amigo mío envió un
mensaje de
1
Creo que su caso de prueba final necesita una solución. Incluyes el primer personaje ( 1cada vez) en las carreras.
Leif Willerts
Sinceramente, no entiendo lo que se supone que debo hacer ... Lo siento. ¿Podría agregar algunas entradas y salidas y agregar algunos ejemplos con la explicación? Lo siento.
Yassin Hajaj

Respuestas:

10

CJam, 207

{_,1>{:E1<_0{:I2$,+E=:C+:R1>C'9>)*+:P,E,<{EP#{L0}{PRI)1}?}{PE#L{R8cP,E,-*+}?0}?}g}&}:U;LqS+'a+{_'[,_el^A,s+&,V={+}{s\V!:V{L{:BU_aL?B,,1>Bf{_2$<U_{_W=8>S8c+*+\@>j+}{?;}?}+{,}$0=}j}|\}?}%s'\8cN++'\"\bn"f+er-2<

Pruébalo en línea

Explicación:

Casi se me olvida escribir esto: p

El problema se resuelve en varios pasos:

  • el texto se separa en series de caracteres alfanuméricos (llamémoslas palabras) y series de caracteres no alfanuméricos (no palabras)
  • las no palabras se imprimen tal como están y las palabras se corrigen
  • la corrección de una palabra se realiza de forma recursiva (con memorización): divida la palabra en 2 fragmentos de todas las formas posibles (incluido el segundo fragmento vacío), intente desunir el primer fragmento (consulte a continuación), arregle el segundo fragmento y combine los resultados con un espacio -retroceso si es necesario; tomar la sub-solución más corta
  • Descomponer un fragmento significa encontrar una cadena mínima de caracteres alfanuméricos posiblemente seguidos de algunos espacios de retroceso (pero sin espacios de retroceso en el medio) que, cuando se estropean, dan como resultado el fragmento dado; se realiza con un algoritmo codicioso simple, yendo de izquierda a derecha, construyendo la cadena no mezclada y su versión desordenada en paralelo, y determinando el siguiente carácter necesario en cada paso; algunos trozos no pueden ser desenredados
aditsu
fuente
1
Santa vaca ... ¡ese es un gran programa de CJam! Buen trabajo.
ETHproductions