O iBug recentemente adquiriu uma barra longa feita de materiais compostos, mas valiosos. A barra é tão longa que o iBug não pode vendê-la facilmente por créditos, então ele quer cortá-la. A barra é feita de materiais tão frágeis e mágicos que, se uma peça for quebrada, todas as partes da barra feitas com o mesmo material também quebrarão, dificultando o corte arbitrário.
O iBug deseja cortar a barra em tantos pedaços quanto possível. Ele também gosta de programas muito curtos e de código-golfe, por isso fez uma análise abstrata de seu problema.
A barra mágica do iBug é representada como uma string (ou uma matriz ou uma sequência de caracteres, se você preferir), assim:
aaabbccccccbbbaaacccccaabbbaaaaa
Cada letra da string representa um material mágico. A barra sempre corresponde ao RegEx ^\w*$
, portanto, pode haver até 63 materiais na barra. Uma "parte" é uma sequência consecutiva de caracteres que não são separados por espaços.
O iBug deseja que você escreva um programa que calcule o máximo de partes possível, se zero ou mais conjuntos de caracteres forem totalmente removidos (substituídos por espaços) e informe o número ao iBug.
Exemplo 1:
In: aaabbccccccbbbaaacccccaabbbaaaaa
Out: 4
Descrição: se b
for totalmente removido da barra, o iBug poderá obter 4 partes. Ele também pode obter 4 partes removendo b
e c
, como mostrado abaixo
aaabbccccccbbbaaacccccaabbbaaaaa # Original string
aaa cccccc aaacccccaa aaaaa # Remove 'b'
aaa aaa aa aaaaa # Remove 'b' and 'c'
E esse é o número máximo de peças que o iBug pode obter dessa barra
Exemplo 2:
In: 111aa___9999____aaa99111__11_a_aa999
Result: 111aa 9999 aaa99111 11 a aa999
Out: 6
Descrição: removendo apenas o sublinhado, o iBug pode obter 6 partes da barra e esse é o máximo.
Exemplo 3:
In: __________
Out: 1
Descrição: O que? Você quer cortar isso? Só é possível obter 1 parte se você não a cortar.
Exemplo 4:
In:
Out: 0
Descrição: não há nada para cortar, então zero.
Existem também algumas regras que o iBug deseja que os programas obedeçam:
O iBug não gosta de brechas padrão e é proibido.
Desde que funcione, ele não precisa ser um programa completo. Também é aceita uma função que recebe entrada de um parâmetro e fornece saída via valor de retorno.
Entrada e saída flexíveis são permitidas. Seu programa ou função pode ter uma string, uma matriz de caracteres ou o que você achar mais fácil de lidar. Você pode fornecer a saída imprimindo o número ou retornando-o.
Exemplos de casos de teste (mas não limitados a estes)
aaabbbaaa = 2
123456789 = 5
AaAaAaAa = 4
aaabcccdedaaabefda = 6
________ = 1
(empty) = 0
Como este é um código de golfe , o programa mais curto (em bytes) em cada idioma vence!
Extra
O iBug aprecia muito se você pode fornecer uma explicação para o seu programa, mesmo que isso não afete sua pontuação (ainda é o comprimento em bytes).
2468
, para o segundo, remova bd
.
2,4,6,8
do primeiro e b,d,f
do segundo.
123456789
rende 5? E comoaaabcccdedaaabefda
produz 6? Recebo 2 e 4, respectivamente, para esses dois casos de teste.