Deixa para definir uma sequência de ponteiro para ser qualquer sequência de tal modo que uma (n) = a ((n-1) - (a (n-1))) forall n maior do que um número finito. Por exemplo, se nossa sequência começou com
3 2 1
Nosso próximo termo seria 2
, porque a (n-1) = 1 , (n-1) -1 = 1 , a (1) = 2 (este exemplo é índice zero, no entanto, não importa qual índice você use, o cálculo será sempre seja o mesmo.) Se repetirmos o processo, obtemos a sequência infinita
3 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2
Tarefa
Dada uma matriz inicial de números inteiros positivos, a seqüência do ponteiro começa com essa matriz.
Tipos de saída
A saída deve ser flexível; se você optar por escrever uma função como seu programa, ela poderá retornar, uma lista infinita de números inteiros ou uma função que indexe a sequência. Se você optar por escrever um programa completo, poderá imprimir os termos da sequência indefinidamente.
Você também pode optar por receber duas entradas, a matriz inicial e um índice. Se você optar por fazer isso, precisará gerar apenas o termo da sequência nesse índice.
Você nunca receberá uma sequência que requer indexação antes do início da sequência. Por exemplo, 3
não é uma entrada válida porque você precisaria de termos anteriores ao 3
para resolver o próximo termo.
Isso é código-golfe, então sua pontuação será o número de bytes no seu programa, com uma pontuação menor sendo melhor.
Casos de teste
casos de teste são truncados para simplificar
2 1 -> 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 ...
2 3 1 -> 2 3 1 3 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 ...
3 3 1 -> 3 3 1 3 3 3 1 3 3 3 1 3 3 3 1 3 3 3 1 3 3 3 1 3 3 3 1 3 ...
4 3 1 -> 4 3 1 3 4 4 3 3 4 4 4 3 4 4 4 4 3 4 4 4 4 3 4 4 4 4 3 4 ...