Vamos chamar uma lista não vazia de strings de mesa se as seguintes condições forem válidas :
- Cada sequência listada não está vazia e usa apenas caracteres que ocorrem na primeira sequência.
- Cada sequência sucessiva tem exatamente um caractere a mais que a sequência anterior.
- Nenhuma sequência na lista é uma subsequência de qualquer outra sequência na lista.
O termo "mesa" é visualizado desta maneira (onde os x
s devem ter vários caracteres):
xx..x
xx..xx
xx..xxx
.
.
.
xx..xxx..x
NB: É um fato matemático que apenas finitas mesas começam com uma determinada sequência. Observe a distinção entre subsequência vs. substring ; por exemplo, 'anna' é uma subsequência (mas não uma substring) de 'banana'.
Desafio:
- Escreva o programa mais curto que pega uma sequência de entrada alfanumérica arbitrária e não vazia e gera o número de mesas que começam com essa sequência.
Entrada (stdin):
- Qualquer sequência alfanumérica não vazia.
Saída (stdout):
- O número de mesas que começam com a sequência de entrada.
Pontuação:
- O vencedor é o programa com o menor número de bytes.
Mesas de exemplo
Apenas uma mesa começa com a
:
a
Apenas uma mesa começa com aa
:
aa
Muitas mesas começam com ab
:
ab ab ab ab (and so on)
baa aaa bbb
bbba bbaa
baaaa
aaaaaa
ab
, ab/baa
, ab/bbb
, ab/bbb/bbaa
, ab/bbb/bbaa/baaaa
, ab/bbb/bbaa/baaaa/aaaaaa
são diferentes mesas.
ab
,bbb
como mesa, apenas parando no segundo mandato. Isso é válido? Ou eles sempre precisam ser feitos o maior tempo possível? Além disso, se houver vários rearranjos possíveis donth
termo (comobaa
,aba
,aab
), não todos eles contam como mesas separadas bem (desde é claro que todos eles seguem as regras)?