Los palíndromos son divertidos, pero algunas de las otras cuerdas comienzan a sentirse excluidas. Podemos convertir esas cuerdas en palíndromos gruesos dividiéndolos en conjuntos palindrómicos de trozos.
Por ejemplo, la cadena "abcabca"
no es un palíndromo si lo leemos carácter por carácter, pero tenemos tres formas diferentes de convertirlo en un palíndromo grueso :
["abcabca"]
["a" "bcabc" "a"]
["a" "bc" "a" "bc" "a"]
Como puede ver, la palindrómica gruesa es un concepto muy inclusivo; cada cadena se puede convertir en un grueso palíndromo de al menos una forma.
Tarea
Escriba un programa o una función que reciba una cadena como entrada y devuelva su fragmentación palindrómica , es decir, el número de sus particiones que son matrices palindrómicas.
Casos de prueba
OUTPUT | INPUT
--------+---------------------------------------------
1 | ""
1 | "a"
1 | "ab"
2 | "aa"
2 | "aaa"
3 | "abcabca"
4 | "abababab"
28 | "abcabcaabababababcabca"
1 | "bbbbabababbbbababbbaaaaa"
20 | "ababbaaaabababbbaaabbbaa"
5 | "baaabaabababaababaaabbaab"
62 | "bbaaababbabbabbbabaabaabb"
2 | "a man a plan a canal panama"
25 | "ama nap lan aca nal pan ama"
93 | "SATOR AREPO TENET OPERA ROTAS"
976 | "abcabcaabcabcaabcabcaabcabcaabcabcaabcabca"
28657 | "ababababababababababaababababababababababa"
2097152 | "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
Reglas adicionales
Puede suponer que la entrada consistirá en 42 caracteres ASCII o menos imprimibles, opcionalmente rodeados por los delimitadores de cadena de su idioma y / o seguidos por una nueva línea.
Para cada cadena de entrada válida, su código debe finalizar en menos de un minuto en mi máquina (Intel Core i7-3770, 16 GiB RAM, Fedora 21).
Con un algoritmo adecuado, debería ser fácil cumplir con este límite de tiempo. Sin embargo, lo más probable es que no pueda iterar sobre todas las particiones de la cadena de entrada.
Si elige imprimir el resultado en STDOUT, puede ir seguido de una nueva línea.
Se aplican reglas estándar de código de golf .