I palindromi sono divertenti, ma alcune delle altre corde stanno iniziando a sentirsi escluse. Possiamo trasformare quelle corde in grossi palindromi dividendoli in schiere palindromiche di grossi pezzi.
Ad esempio, la stringa "abcabca"
non è un palindromo se la leggiamo carattere per carattere, ma abbiamo tre diversi modi per renderlo un grosso palindromo:
["abcabca"]
["a" "bcabc" "a"]
["a" "bc" "a" "bc" "a"]
Come puoi vedere, la palindromicità pesante è un concetto molto inclusivo; ogni stringa può essere trasformata in un grosso palindromo in almeno un modo.
Compito
Scrivi un programma o una funzione che riceve una stringa come input e restituisce il suo chunkiness palindromico , cioè il numero delle sue partizioni che sono array palindromici.
Casi test
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"
Regole aggiuntive
Si può presumere che l'input sarà composto da 42 o meno caratteri ASCII stampabili, facoltativamente circondati dai delimitatori di stringa della propria lingua e / o seguiti da una nuova riga.
Per ogni stringa di input valida, il mio codice deve terminare in meno di un minuto sulla mia macchina (Intel Core i7-3770, 16 GiB RAM, Fedora 21).
Con un algoritmo adeguato, dovrebbe essere facile rispettare questo limite di tempo. Tuttavia, molto probabilmente non sarai in grado di iterare su tutte le partizioni della stringa di input.
Se si sceglie di stampare l'output su STDOUT, potrebbe essere seguito da una nuova riga.
Si applicano le regole standard del code-golf .