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 ...
Respostas:
JavaScript (ES6), 25 bytes
Uma função anônima que, quando chamada, cria uma função
f
que fornece o item em um determinado índice na sequência.Por favor, deixe-me saber se eu não entendi nada ...
fonte
f(n)
de dentrof(n)
. Acho que isso nunca terminará, mas não conheço JS.n
estiver baixo o suficientea[n]
, retornará um valor verdadeiro, portanto, ele||
entrará em curto-circuito e impedirá que ele se repita infinitamente.n
não diminui a cada chamada. Eu tenho certeza que sen
for maior que o comprimento dea
você nunca irá parar.--n
atribuan
an-1
para que a próxima referência a ela se refira ao decrementadon
.--n
diminuin
, o que significa quef(--n-f(n))
é o mesmo quef((n-1)-f(n-1))
Casca ,
76 bytesRetorna uma lista infinita. Experimente online! Observe que leva um tempo para o TIO truncar e imprimir o resultado.
Explicação
O operador
¡
tem vários significados. Aqui eu estou usando "construir lista infinita repetindo uma função que calcula um novo elemento da lista dos existentes". Dada uma lista do comprimento N , o novo elemento terá o índice baseado em 1 N + 1 . Tudo o que precisamos fazer é negar o último elemento da lista (que é o valor anterior) e indexar na lista usando o resultado.fonte
Haskell , 36 bytes
Pega uma lista e retorna uma função que indexa a sequência
Experimente online!
Explicação
Aqui estamos definindo uma função
!
que recebe uma listal
e um índicen
. Sen
for menor do que o comprimento dol
que o índicel
porn
, caso contrário, vamos voltarl!((n-1)-l!(n-1))
. Isso segue a definição recursiva da função que dei na pergunta.Aqui está o mesmo programa não destruído.
Em
e<-n-1
vez disso, uso em vez disso para salvar bytes ao atribuirn-1
a,e
para que possa ser usado posteriormente.fonte
MATL ,
139 bytesGera os termos iniciais seguidos por n termos adicionais (permitidos pelo desafio), em que n é um número inteiro positivo recebido como entrada.
Experimente online!
Explicação
fonte
Mathematica, 63 bytes
leva duas entradas
Experimente online!
-3 bytes de Martin Ender
fonte
R , 55 bytes
Experimente online!
Toma duas entradas.
fonte
ML padrão (MLton) , 58 bytes
Experimente online! A função
a
pega a lista inicial e um índice e retorna o elemento de sequência nesse índice. Exemplo de uso:a [4,3,1] 5
rendimentos4
.fonte
Gelatina , 6 bytes
Leva uma sequência S e um inteiro k , e adiciona k termos de S .
Experimente online!
Como funciona
fonte
Python 2 , 48 bytes
Experimente online!
fonte
CJam, 10 bytes
Para CJam, isso funciona muito bem (até bate 05ab1e!).
Este é um bloco anônimo que espera entrada no formulário
i n
na pilha, ondei
está o índice na sequência en
é uma matriz de números iniciais.A razão pela qual isso funciona tão bem é por causa do
j
operador, que fornece recursão memorizada de um conjunto de valores iniciais.Explicação:
fonte
Java (8), 60 bytes
Toma duas entradas (número
a
inteiro e número inteiron
) e gera on
'th valor da sequência.Explicação:
Experimente aqui. (Pode demorar alguns segundos.)
fonte
Perl, 38 +3 (-anl) bytes
Experimente Online
fonte
05AB1E , 20 bytes
Espera a entrada como uma sequência separada por espaço, continua a produzir indefinidamente; implementação bastante direta
Exemplo de execução:
fonte
Java (OpenJDK 8) ,
95939190 bytesExperimente online!
fonte
b[(j-1)-...]
equivalente ab[~-j-...]
?j>=a.length
paraj<a.length
salvar um byte:j<a.length?a[j]:b[~-j-b[j-1]]
. Também estou curioso: por que você adotou uma abordagem em loop, quando a abordagem recursiva que também é explicada na descrição do desafio em si é de apenas 60 bytes?Perl 5 ,
-a
30 bytesExperimente online!
fonte