Definição
Vamos chamar uma sequência inteira (infinita) de universal se ela contiver toda sequência inteira finita como uma subsequência contígua.
Em outras palavras, a sequência inteira (a 1 , a 2 ,…) é universal se e somente se, para cada sequência inteira finita (b 1 ,…, b n ) , existe um deslocamento k tal que (a k + 1 ,…, A k + n ) = (b 1 ,…, b n ) .
A sequência de números primos positivos, por exemplo, não é universal, entre outros pelos seguintes motivos.
Não contém números inteiros negativos, 1 ou números compostos.
Embora contenha 3 , não contém a subsequência contígua (3, 3, 3) .
Embora contenha 2 e 5 , não contém a subsequência contígua (2, 5) .
Embora contenha a subsequência contígua (7, 11, 13) , não contém a subsequência contígua (13, 11, 7) .
Tarefa
Escolha qualquer sequência inteira universal única (a 1 , a 2 ,…) e implemente-a na linguagem de programação de sua escolha, respeitando as seguintes regras.
Você pode enviar um programa completo ou uma função.
Você tem três opções para E / S:
Não faça nenhuma entrada e imprima ou retorne a sequência inteira.
Pegue um índice n como entrada e imprima ou retorne um n .
Pegue um índice n como entrada e imprima ou retorne (a 1 ,…, a n ) .
Para as opções de E / S 2 e 3 , você pode usar a indexação baseada em 0, se preferir.
Seu envio deve ser determinístico: se executado várias vezes com a mesma entrada, deve produzir a mesma saída.
Além disso, a menos que seja imediatamente óbvio, prove que a sequência que você escolheu é universal. Sua prova pode não depender de conjecturas não comprovadas.
Aplicam-se as regras padrão de código de golfe . Que ganhe o código mais curto em bytes!
Respostas:
Casca , 5 bytes
Isso imprime uma lista infinita
Experimente online! ou encontre o primeiro índice da sua sequência . (Leva muita memória para a maioria das seqüências)
Explicação:
Em Husk
Ṗ
se comporta bem para listas infinitas. Você pode ver o seu comportamento aquifonte
Q
funciona. (Eu acho que eu entendi, mas eu não tenho certeza.)Ṗ
, nãoQ
Python 2 ,
494643 bytesf(n)
retorna um n apenas. Isso usa o menor dígito den
na based
para extrair um dos dígitos mais altos.Experimente online! Esse script (cortesia de Dennis) pega qualquer sequência finita e mostra
n
onde essa sequência começa.Explicação
Por exemplo, para
n
na faixa3141592650
de3141592659
,d=10
e o último dígito don
Selecciona um dos outros dígitos. Em seguida, adicionamos-d/2
para obter valores negativos.Alternativa autônoma, também 43 bytes:
fonte
len(`n`)
vez delen(str(n))
.n=2**63-1
desde que a representação éL
anexada (issostr(n)
seria endereçado por três bytes, se necessário).Braquilog 2, 11 bytes
Experimente online!
Eu também tentei um algoritmo usando partições aditivas em uma lista, mas não foi mais curto. Este é um gerador que produz um fluxo infinito de números inteiros como saída; o link do TIO possui um cabeçalho para imprimir os dez mil primeiros.
Explicação
O programa inicia tentando todos os números possíveis em sequência (
≜
tenta todas as possibilidades restantes, para números inteiros por padrão). Isso é 0, 1, -1, 2, -2, etc. (embora os números inteiros negativos não cheguem ao final do programa). Este é o único passo "infinito" do programa; todos os outros são finitos.~×
depois gera todas as possíveis fatorações do número inteiro, tratando diferentes ordens como diferentes e usando apenas valores de 2 para cima (portanto, existem apenas finitas); observe que números compostos são permitidos na fatoração, não apenas números primos. Isso significa que todas as seqüências possíveis de números inteiros ≥ 2 serão geradas por esta etapa em algum momento da execução da função (como tal sequência necessariamente possui algum produto e esse produto será gerado em algum momento pela inicial≜
).Precisamos, então, mapear o conjunto dessas seqüências para o conjunto de todas as seqüências inteiras, o que é feito em duas etapas: subtraindo 2 (
-₂
) de cada elemento (ᵐ
), fornecendo o conjunto de todas as sequências inteiras não-negativas e, em seguida, recebendo mais ou menos (~ȧ
, ou seja, "um valor cujo valor absoluto é") cada elemento (ᵐ
) O último passo é obviamente não determinístico, então Brachylog o trata como um gerador, gerando todas as listas possíveis cujos elementos são mais ou menos o elemento correspondente da lista de entrada. Isso significa que agora temos um gerador para todas as seqüências inteiras possíveis e as gera em uma ordem que significa que todas são geradas (especificamente, a ordem que você obtém se usar o valor absoluto de cada elemento, adicione 2 a cada e, em seguida, faça o pedido pelo produto dos elementos resultantes).Infelizmente, a pergunta quer uma única sequência, não uma sequência de sequências, por isso precisamos de mais dois comandos. Primeiro,
≜
solicita ao Brachylog que gere explicitamente a sequência de sequências estritamente (em vez de produzir uma estrutura de dados descrevendo o conceito de uma sequência gerada por esse método, e não gerando as seqüências até que seja necessário); isso acontece para acelerar o programa nesse caso e garante que a saída seja produzida na ordem solicitada. Finalmente,∋
faz com que o gerador produza os elementos das sequências individuais, um de cada vez (passando para a próxima sequência, uma vez que todos os elementos da anterior são gerados).O resultado final: cada sequência inteira possível é gerada e gerada, um elemento de cada vez, e todos concatenados juntos em uma única sequência universal.
fonte
Pitão - 11 bytes
n
produto cartesiano de potência de[-n, n]
, para todosn
.Experimente on-line aqui (finitamente).
fonte
Python 2 ,
10099 bytesitertools
loop interno para indefinidamente.Experimente online!
Imprime indefinidamente todas as permutações do
n
intervalo inteiro repetido vezes[-n; n)
para todos os números inteiros não negativosn
.Você pode procurar o primeiro deslocamento
k
para qualquer subsequência usando esta versão modificada .fonte
while~0:
. Heh heh ...itertools.count
Perl 6 , 91 bytes
Experimente online!
Isso usa um método semelhante a algumas das outras respostas. Ele usa produtos cartesianos para imprimir os elementos de
(-1,0,1)
, em seguida, todos os pares ordenados dos elementos(-2,-1,0,1,2)
, em seguida, todos os trigêmeos ordenados dos elementos(-3,-2,-1,0,1,2,3)
, etc.Eu sou novo no Perl, então pode haver mais golfe a ser feito.
Versão mais legível:
fonte