Objetivo
Escriba una rutina que acepte una cadena de caracteres ASCII imprimibles, sy devuelva una cadena que contenga los mismos caracteres que s , reordenados para que no aparezca una subcadena de dos caracteres más de una vez. El programa debe procesar todas las cadenas de referencia (ver más abajo) en menos de un minuto cada una en una computadora moderna . También otorgaré una bonificación especial de 50 repeticiones a la respuesta con la puntuación más baja que procese cualquier cadena válida de 30 caracteres en menos de un minuto.
Por ejemplo, dada la entrada Mississippi
, una salida válida sería issiMspiips
(no aparecerían subcadenas de dos caracteres dos veces), mientras que una salida no válida sería ipMsispiiss
(ya que la subcadena is
aparece dos veces).
La rutina puede tomar la forma de:
- un programa completo que lee
stdin
(o equivalente) o la línea de comando, y que sale astdout
(o equivalente) - una función que acepta un argumento de cadena única y devuelve una cadena
Puede suponer que la cadena de entrada siempre admite al menos una salida válida.
El reto
Su rutina debe comprender 5 o más líneas de código separadas por nuevas líneas. Las líneas vacías (que incluyen líneas que contienen solo espacios en blanco) se ignoran en todos los contextos y no cuentan para el recuento total de líneas.
Intercambiar dos líneas en su código fuente debe producir un error fatal. Por "error fatal", nos referimos a cualquiera de las siguientes condiciones:
- el código fuente no se compila, y el compilador / intérprete declara un error fatal
- la rutina aborta con un error fatal en tiempo de ejecución o una excepción de tiempo de ejecución no controlada
- la rutina se ve forzada a una terminación abrupta y anormal del programa que no produce ningún tipo de salida, excepto un posible mensaje de error y / o volcado de pila
Alternativamente , se pueden usar bloques contiguos de código que no contengan caracteres de nueva línea en lugar de líneas. Estos bloques deben mostrarse en su propia línea en el archivo fuente, con el entendimiento de que las nuevas líneas se eliminan antes de que se compile / interprete el código fuente.
Por ejemplo, el código
aaaa
bbbb
cccc
se condensaría a
aaaabbbbcccc
antes de ser evaluado.
En este modo, la condición de error fatal se aplica al intercambio de dos bloques de código (y, por lo tanto, al intercambio de líneas en el código fuente antes de eliminar las nuevas líneas). Por lo tanto, en el ejemplo anterior, las rutinas aaaaccccbbbb
, bbbbaaaacccc
y ccccbbbbaaaa
todas deben producir errores fatales, ya sea en tiempo de compilación o en tiempo de ejecución.
Las presentaciones que utilizan este modo alternativo deben declarar su uso.
Puntuación
Sea n el número de líneas de texto no vacías en su archivo fuente, con n ≥ 5. Sea c el número de bytes comprendidos por la línea de texto más larga (por longitud de byte) en su archivo fuente, sin contar ninguna línea nueva final.
El puntaje de una presentación es dado por c ( n + 10).
La presentación con el puntaje más bajo es el ganador.
La mejor de las suertes. ;)
Cuerdas de referencia
Abracadabra Alacazam
Is Miss. Mississauga Missing?
Ask Alaska's Alaskans
GGGGAAAATTTTCCCCgggaaatttccc
A Man A Plan A Canal Panama
Mspiisiipss
válido ya que la única repetición es en la ii
que no ocurre Mississippi
?
CooliO
, salidaoOoCli
?