Defino o método de combinar uma sequência para significar que todos os números na sequência são concatenados como uma sequência, e esse resultado é transformado em um número inteiro.
[1, 2, 3] -> 123
Para cada sequência finita de pelo menos 3 números inteiros consecutivos, faltando exatamente um elemento na sequência, e esse elemento ausente pode não ser o primeiro ou o último elemento na sequência, produza o número inteiro resultante da sequência combinada. Estou me referindo a isso como um "número inteiro com perda única".
[1, 2, 3] -> {1, 3} (missing an element) -> 13
Essa sequência de números inteiros com perda única é a união das seguintes subsequências (partições?):
A primeira subsequência {n, n+2}
é A032607 .
{n, n+2} -> 13, 24, 35, 46, 57, 68, 79, 810, 911, 1012, ...
{n, n+1, n+3} -> 124, 235, 346, ...
{n, n+2, n+3} -> 134, 245, 356, ...
{n, n+1, n+2, n+4} -> 1235, 2346, 3457, ...
{n, n+1, n+3, n+4} -> 1245, 2356, 3467, ...
{n, n+2, n+3, n+4} -> 1345, 2456, 3567, ...
...
for n ∈ ℕ (integers >= 1)
Esses números inteiros devem ser impressos em ordem crescente. Os primeiros 25 números inteiros com perda única estão abaixo :
13, 24, 35, 46, 57, 68, 79, 124, 134, 235, 245, 346, 356, 457, 467, 568, 578, 679, 689, 810, 911, 1012, 1113, 1214, 1235, ...
Primeiros 7597 inteiros com perda única
Implementações de referência não destruídas. Eu fiz isso para ser mais rápido, ao invés de menor.
Regras:
- O código mais curto vence
- Você pode (diga qual):
- Imprimir os números inteiros com perda única para sempre
- Dado um número inteiro positivo n , imprima ou retorne os primeiros n elementos como uma lista ou como uma string delimitada por vírgula ou espaço em branco.
- Você deve suportar números inteiros arbitrariamente grandes se o seu idioma permitir, especialmente se você estiver imprimindo para sempre.
Nota: Ainda não há uma entrada no OEIS para esta sequência.
Outra observação: eu os nomeei "Inteiros com perdas simples", para que, por sua vez, possam ser "Inteiros com perdas duplas", "Inteiros com perdas n-ly", "Inteiros com perdas n-ly", "(N + 1) inteiros com perdas" e "Inteiros com perdas" "(união de todos estes).
fastest-code
desafio divertido .Respostas:
Mathematica, 101 bytes
Yay! Pela primeira vez eu tenho a resposta mais curta!
Party[Hard]
fonte
Party[_]:=While[True,Print["PARTY!!!"]]
. O argumento é ignorado porque todas as partes estão participando.Party[Where]
deve imprimirHere!
eParty[When]
deve imprimirNow!
etc. Não pense levemente em festas.Party[x_]:=Switch[x,Where,"Here!",When,"Now!",How,Pause[1];"...Really?",_,While [True,Print["PARTY!!!"]]]
Haskell,
131,114, 106 bytesIsso é limitado pelo tamanho de
Int
, mas pode ser facilmente estendido substituindo-oInt
porInteger
.Menos golfe:
8 bytes jogados por @nimi.
fonte
n
?Integer
, continuará até você ficar sem memória (ou paciência). Ele continuará comInt
, mas começará a dar respostas erradas assim que for excedido (> 2^29-1
).main=print$
que o GHCi não. O GHC.io fica sem memória e o conjunto de recursos do TryHaskell.org é muito limitado.Python 3,
136127126122 bytessolução de força bruta, eu nem tento n = 7000 (já são necessários 10s para n = 100)
Explicação
Resultados
Obrigado a @ mbomb007 e @FricativeMelon por sua ajuda
fonte
)
e o caractere a seguir, e pode adicionart=range
ao início do programa e substituir todasrange
as chamadas de função port
chamadas. Isso deve reduzir muito a contagem de bytes.i!=l+k
também pode ser substituído porl+k-i
, o que salva um byte.str(i)for i in r(1+k,j+k)if l+k-i
pode ser substituído porstr(i+k)for i in r(1,j)if l-i
, economizando 4 bytes.Python 3,
319,270, 251 bytesToma uma
h
entrada como de STDIN e imprime uma matriz dos primeirosh
números inteiros com perda única. Também é muito rápido, levando apenas alguns segundosh=7000
.Explicação: Observe que, se tivéssemos tempo infinito, poderíamos simplesmente iterar sobre todos
n,k
e, para cada par, soltar cada uma dasn+1,n+2,...,n+k-1
(k-1
possibilidades) e obter todos os valores (infinitamente muitos) desses, basta classificar a sequência em ordem crescente e truncar parah
elementos. Obviamente, não podemos realmente fazer isso, mas se pudermos chegar a um ponto em que os primeirosh
elementos classificados não possam mais mudar adicionando os valores de quaisquern,k
pares futuros , podemos apenas truncar e terminar em tempo finito. Para qualquern,k
par, ele tem pelo menosfloor(log10(n)+1)*k
dígitos, possivelmente mais. Então, vamos agrupar esses pares pelo valorc(n,k)=floor(log10(n)+1)*k
, onde garantimos quec(a,b)<c(n,k)
, se processarmosa,b
antesn,k
. Se tivermos a lista classificada e seu último elemento tiverd
dígitos e,d<c(n,k)
para o próximon,k
processo, podemos parar, já que não podemos mais obter um número com tantos ou menos dígitos, pois, como garantia, já deveríamos processá-lo e, portanto, independentemente dos números que acabaria computando, os primeirosh
elementos não podem mudar, para que possamos devolvê-los.Então agora precisamos da função que garante a ordem declarada
c(n,k)
. Para cada umy
obtidoc(n,k)
, precisamos processar tudo(n,k)
issoy=c(n,k)
. Vamos dizerL=floor(log10(n)+1)
para algunsn
. Portanto,y=L*k
deve aguentar. Comece comk=2,L=y/2
,k=3,L=y/3;k=4,L=y/4...k=y,L=1
ignorando valores não inteiros deL
. Para gerar toda ac(n,k)
função, comece com(1,2)
comy=2
, e aumentary
por 1 e começar de novo sempre que você receberL==1
. Agora, temos uma enumeração de pares(L,k)
e ela satisfaz nossa condição. No entanto, precisamos recuperar todos os possíveisn
a partirL
, o que fazemos, enumerando todos os inteiros comL
dígitos. Então, para cada um desses(n,k)
pares, para cada um dosk-1
possíveis elementos eliminados, devemos gerar o número de perdas que obtemos como resultado e adicioná-lo à nossa lista, que começa vazia. Depois, ordenamos a lista e repetimos no próximo(L,k)
par, parando quando temos o qued<c(n,k)
foi dito anteriormente.Repartição de código (um pouco desatualizada):
fonte
len(`q[h]`)
deverialen(str(q[h]))
apoiar números inteiros arbitrários? Ou apenas diga se funciona apenas até um determinado limite, pois você está usando um parâmetro e não imprimindo para sempre.2**63-1
) terá umL
no final, se estiver usandorepr
. Observe que essa entrada provavelmente está muito adiantada na sequência.