Considere las siguientes definiciones tomadas de El número de ejecuciones en una cadena por W. Rytter. Tenga en cuenta que palabra, cadena y subcadena son todos sinónimos.
Una ejecución en una cadena es un segmento periódico no extensible (con el mismo período mínimo) en una cadena.
Un punto p de una palabra w es cualquier número entero positivo p tal que w [i] = w [i + p] siempre que se definan ambos lados de esta ecuación. Deje que por (w) denote el tamaño del período más pequeño de w. Decimos que una palabra w es periódica iff per (w) <= | w | / 2.
Por ejemplo, considere la cadena x = abcab
. per(abcab) = 3
como x[1] = x[1+3] = a
, x[2]=x[2+3] = b
y no hay un período más pequeño. La cadena, abcab
por lo tanto, no es periódica. Sin embargo, la cadena abab
es periódica según (abab) = 2.
Una ejecución (o periodicidad máxima) en una cadena w es un intervalo [i ... j] con j> = i, de modo que
- w [i ... j] es una palabra periódica con el período p = per (w [i ... j])
- Es maxima. Formalmente, ni w [i-1] = w [i-1 + p] ni w [j + 1] = w [j + 1-p]. Informalmente, la ejecución no puede estar contenida en una ejecución mayor con el mismo período.
Denote por RUNS (w) el conjunto de corridas de w.
Ejemplos
Las cuatro carreras de atattatt
son [4,5] = tt, [7,8] = tt, [1,4] = atat, [2,8] = tattatt.
La cadena aabaabaaaacaacac
contiene las siguientes 7 ejecuciones:
[1,2] = aa, [4,5] = aa, [7,10] = aaaa, [12,13] = aa, [13,16] = acac, [1,8] = aabaabaa, [9 , 15] = aacaaca.
Su salida debe ser una lista de ejecuciones. Cada ejecución debe especificar el intervalo que representa pero no necesita generar la subcadena en sí. El formato exacto puede ser lo que sea conveniente para usted.
Los ejemplos usan la indexación 1, pero puede usar la indexación 0 si es más conveniente.
TAREA
Escriba el código que le da una cadena w, emite RUNS (w).
Idiomas e insumos
Puede usar cualquier idioma que desee y tomar la cadena de entrada en la forma que sea más conveniente. Sin embargo, debe proporcionar un programa completo y debe mostrar un ejemplo de su código ejecutándose en la entrada de ejemplo.
class A{public static ...}
cada vez que quería código de golfRespuestas:
Pyth, 38 bytes
Banco de pruebas
fuente
[i, j]
representa la partida rebanada entre caracteres (0 reajustables)i-1
yi
y termina entre los personajesj-1
yj
. Esta es la convención estándar en Pyth y en la mayoría de los idiomas sanos, como debería ser (ver aquí y aquí ).CJam, 66
Pruébalo en línea
Breve explicacion:
El algoritmo funciona en 4 pasos (los primeros 3 de ellos corresponden a los 3 bloques principales que puede observar):
Me gustaría jugar más al golf, así que todo está sujeto a cambios.
fuente