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
,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)?ab
,ab/baa
,ab/bbb
,ab/bbb/bbaa
,ab/bbb/bbaa/baaaa
,ab/bbb/bbaa/baaaa/aaaaaa
são diferentes mesas.Respostas:
GolfScript (
106103 caracteres)Em algum lugar do coração, é claro, há algum código da string X é uma subsequência da string Y?
fonte
Ruby, 142 caracteres
Esse algoritmo é construtivo, ou seja, cria todos os tabelas possíveis para a sequência de entrada e os conta. Isso torna o programa muito, muito lento - mas ei, é um codegolf.
Exemplo é executado:
fonte
aab
) sejam viáveis, mas não tenho certeza - seu programa está em execução há cerca de uma hora para esse exemplo. NB: Não haverá saída viável para qualquer entrada que envolva mais de duas letras distintas; por exemplo, algumas das mesas que começam comabc
comprimento maior que o número 7000º Ackermann .300,000
entradas comaab
, continuava vendo os 10 primeiros termos sendo todos idênticos. Então, acho que pode não ser viável para algo maior que dois caracteres. Pelo menos, não sem alguma inteligência e cálculos heurísticos.