Кажется, ни одно из этих решений не является правильным. Я не думаю, что они ищут подпоследовательность правильно.
Я решил это рекурсивно в C, с этим алгоритмом:
/* global cstring for our pi data */
const char *g_numbers = 3.14........[100,000 digits];
/* global to hold our large total : some compilers don't support uint64_t */
uint64_t g_total = 0;
/* recursively compute the subsequnces of 1-2-3 */
void count_sequences(const char c, unsigned int index)
{
while (index < 100000){
switch (g_numbers[index]){
case '1': if (c == '1') count_sequences('2', index+1); break;
case '2': if (c == '2') count_sequences('3', index+1); break;
case '3':
if (c == '3'){
g_total++;
count_sequences('3', index+1);
return;
}
default: break;
}
index++;
}
}
Извините, я не могу раздать решение Python - но я надеюсь, что это поможет. Это не должно быть слишком сложно для переделки. Я попробовал данные ответы на Python, и они, похоже, не сработали.