Vocês já devem estar familiarizados com a sequência de Conway (também conhecida como sequência de "olhe e diga") :
1
11
21
1211
111221
312211
etc
Você também pode começar por qualquer número arbitrário como ponto de partida. Let f(s)
Ser o próximo elemento da seqüência. Agora, para cada dado s
que podemos encontrar f(s)
. O inverso não é tão trivial: não é y
possível encontrar o predecessor de s
tal maneira que seja possível f(s) = y
. Por exemplo, porque y = 1
não conseguimos encontrar um antecessor. Mas se y
tiver um comprimento par, você pode dividi-lo em pares de dígitos que descrevem cada parte de um predecessor:
513211 divides in 51,32,11
so: 51 comes from 11111
32 comes from 222
11 comes from 1
put together: 111112221
Dessa forma, podemos definir um predecessor exclusivo para todos os y
comprimentos pares.
Nota : O 'predecessor' s
definido dessa maneira geralmente NÃO é satisfatório f(s) = y
.
Objetivo
Escreva um trecho de função / programa que aceite uma sequência de dígitos como entrada que
- calcula o próximo elemento da sequência de Conway se o comprimento da sequência de entrada for ímpar
- calcula o predecessor da sequência de entrada, conforme definido acima, se o comprimento da sequência de entrada for par .
O menor código em bytes vence.
Perguntas recentes baseadas nas seqüências do tipo look-and-say:
11111111111111
ser? De acordo com suas especificações, seria 1111111
. Você deve modificar sua especificação para definir uma resposta razoável para isso.
11111111111111
simplesmente não tem antecessor. É uma entrada ilegal.
513111
se divide em51
,32
e11
?