Palíndromos são divertidos, mas algumas das outras strings estão começando a parecer deixadas de fora. Podemos transformar essas cordas em palíndromos em pedaços dividindo-os em matrizes palindrômicas de pedaços.
Por exemplo, a string "abcabca"
não é um palíndromo se a lermos caractere por caractere, mas temos três maneiras diferentes de torná-lo um palíndromo robusto :
["abcabca"]
["a" "bcabc" "a"]
["a" "bc" "a" "bc" "a"]
Como você pode ver, palindromicidade robusta é um conceito muito inclusivo; toda corda pode ser transformada em um palíndromo robusto de pelo menos uma maneira.
Tarefa
Escreva um programa ou uma função que receba uma string como entrada e retorne sua robustez palindrômica , ou seja, o número de partições que são matrizes palindrômicas.
Casos de teste
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"
Regras adicionais
Você pode assumir que a entrada consistirá em 42 ou menos caracteres ASCII imprimíveis, opcionalmente cercados pelos delimitadores de string do seu idioma e / ou seguidos por uma nova linha.
Para cada sequência de entrada válida, seu código deve terminar em menos de um minuto na minha máquina (Intel Core i7-3770, 16 GiB RAM, Fedora 21).
Com um algoritmo adequado, deve ser fácil cumprir esse limite de tempo. No entanto, você provavelmente não conseguirá iterar em todas as partições da sequência de entrada.
Se você optar por imprimir a saída para STDOUT, ela poderá ser seguida por uma única nova linha.
Aplicam-se as regras de código-golfe padrão .