Considere uma matriz de bits, digamos
1 1 1 0 0 0 0 1 0 0 1 0 1 1 1 1 1 0 1 0
Chamamos um sub-arranjo contíguo de comprimento ≥ 5 uma fase se pelo menos 85% dos bits forem iguais e o primeiro / último bits forem iguais ao bit maioritário. Além disso, chamamos uma fase de máximo se não for um sub-arranjo estrito de alguma outra fase.
Aqui estão as fases máximas do exemplo acima:
1 1 1 0 0 0 0 1 0 0 1 0 1 1 1 1 1 0 1 0
-------------
-------------
-------------
Como você pode ver, existem 3
fases máximas. Por outro lado, isso
1 1 1 0 0 0 0 1 0 0 1 0 1 1 1 1 1 0 1 0
---------
não é uma fase máxima, pois é um sub-arranjo estrito de pelo menos uma outra fase.
O desafio
Entrada é uma sequência de ≥ 5 bits via STDIN, linha de comando ou argumento de função. Os bits podem aparecer como uma string ou uma matriz.
Você deve gerar um único número inteiro, o número máximo de fases da matriz, impresso via STDOUT ou retornado de uma função.
Pontuação
Isso é código-golfe, então o programa com o menor número de bytes vence.
Casos de teste
0 1 0 1 0 -> 0
0 0 0 0 0 -> 1
0 0 0 0 1 0 1 1 1 1 -> 0
0 0 0 0 0 1 0 1 1 1 1 1 -> 2
1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 -> 1
0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 -> 2
0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 -> 1
0 1 0 1 0 0 1 0 1 0 1 0 0 0 1 1 1 1 0 1 0 0 1 1 0 0 0 1 1 0 -> 0
1 1 1 1 1 0 0 0 0 0 1 1 1 1 1 0 0 1 0 0 0 0 0 0 0 0 1 1 0 1 -> 4
0 1 1 0 0 0 0 0 0 0 0 0 0 0 1 0 1 1 1 1 1 1 1 0 1 0 0 0 0 0 -> 5
Aqui está a explicação para o último caso:
0 1 1 0 0 0 0 0 0 0 0 0 0 0 1 0 1 1 1 1 1 1 1 0 1 0 0 0 0 0
---------------------------
-------------------------
-----------------
-----------------
-------------
Curiosidade: esse desafio surgiu de um problema de mineração de dados com o objetivo de detectar alterações nos dados temporais.
0
e terminando no último.
1 1 0 1 1
85% de 5 é 4,25, o que é Então o comprimento 5 seria impossível ou devemos arredondar para 4?