Defino el método de combinar una secuencia para significar que cada número de la secuencia se concatena como una cadena, luego ese resultado se convierte en un entero.
[1, 2, 3] -> 123
Por cada secuencia finita de al menos 3 enteros consecutivos, que faltan exactamente un elemento en la secuencia, y este elemento que falta puede no ser el primer o el último elemento en la secuencia, genera el entero resultante de la secuencia combinada. Me refiero a esto como un "entero con pérdida individual".
[1, 2, 3] -> {1, 3} (missing an element) -> 13
Esta secuencia de enteros con pérdida individual es la unión de las siguientes subsecuencias (particiones?):
La primera subsecuencia {n, n+2}
es 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)
Estos enteros deben imprimirse en orden ascendente. Los primeros 25 enteros con pérdida individual están a continuación :
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, ...
Primeros 7597 enteros con pérdida individual
Implementaciones de referencia sin golf. Lo hice para ser más rápido, en lugar de más pequeño.
Reglas:
- El código más corto gana
- Usted puede (decir cuál):
- Imprime los enteros perdidos para siempre
- Dado un número entero positivo n , imprime o devuelve los primeros n elementos como una lista, o una cadena delimitada por comas o espacios en blanco.
- Debe admitir enteros arbitrariamente grandes si su idioma lo permite, especialmente si imprime para siempre.
Nota: Todavía no hay una entrada en el OEIS para esta secuencia.
Otra nota: los llamé "Enteros con pérdida única" para que a su vez pudiera haber "Enteros con pérdida doble", "Enteros con pérdida N-ly", "Enteros con pérdida (N + 1)" y "Enteros con pérdida" "(unión de todos estos).
fastest-code
desafío divertido .Respuestas:
Mathematica, 101 bytes
¡Hurra! ¡Por una vez tengo la respuesta más corta!
Party[Hard]
fuente
Party[_]:=While[True,Print["PARTY!!!"]]
. El argumento se ignora porque todas las fiestas son fiestas.Party[Where]
debe imprimirHere!
, yParty[When]
debe imprimirNow!
, etc. No piense a la ligera en fiestas.Party[x_]:=Switch[x,Where,"Here!",When,"Now!",How,Pause[1];"...Really?",_,While [True,Print["PARTY!!!"]]]
Haskell,
131,114, 106 bytesEsto está limitado por el tamaño de
Int
, pero se puede extender fácilmente reemplazándoloInt
porInteger
.Menos golfizado:
8 bytes jugado por @nimi.
fuente
n
?Integer
, continuará hasta que se quede sin memoria (o paciencia). Continuará conInt
, pero comenzará a dar respuestas incorrectas una vez que se desborde (> 2^29-1
).main=print$
que GHCi no lo haga. GHC.io se queda sin memoria y el conjunto de funciones de TryHaskell.org es demasiado limitado.Python 3,
136127126122 bytessolución de fuerza bruta, ni siquiera intento n = 7000 (ya toma 10 segundos para n = 100)
Explicación
Resultados
Gracias a @ mbomb007 y @FricativeMelon por su ayuda
fuente
)
el siguiente carácter, y puede agregart=range
al comienzo del programa y reemplazar todasrange
las llamadas de función cont
llamadas. Eso debería reducir mucho la cantidad de bytes.i!=l+k
también se puede reemplazar conl+k-i
, lo que ahorra un byte.str(i)for i in r(1+k,j+k)if l+k-i
se puede reemplazar constr(i+k)for i in r(1,j)if l-i
, ahorrando 4 bytes.Python 3,
319,270, 251 bytesToma una
h
entrada de STDIN e imprime una matriz de los primerosh
enteros con pérdidas individuales. También es muy rápido, toma solo unos segundosh=7000
.Explicación: Tenga en cuenta que, si tuviéramos tiempo infinito, podríamos simplemente iterar sobre todo
n,k
y para cada par soltar cada una de lasn+1,n+2,...,n+k-1
(k-1
posibilidades) y obtener todos (infinitamente muchos) valores de esos, luego simplemente ordenar la secuencia en orden ascendente y truncar ah
elementos. Por supuesto, en realidad no podemos hacer eso, pero si podemos llegar a un punto en el que los primerosh
elementos ordenados ya no puedan cambiar agregando los valores de cualquiern,k
par futuro , simplemente podemos truncarlos y terminar, en un tiempo finito. Para cualquiern,k
par, tiene al menosfloor(log10(n)+1)*k
dígitos, posiblemente más. Entonces, agrupemos estos pares por el valorc(n,k)=floor(log10(n)+1)*k
, donde garantizamos que sic(a,b)<c(n,k)
procesamosa,b
antesn,k
. Si tenemos la lista ordenada, y su último elemento tiened
dígitos, yd<c(n,k)
para el siguienten,k
que vamos a procesar, podemos detenernos, ya que no podemos obtener un número con tantos o menos dígitos, ya que por nuestra garantía ya deberíamos haberlo procesado, y por lo tanto, sin importar qué números terminaría computando, los primerosh
elementos no pueden cambiar, así que solo podemos devolverlos.Así que ahora solo necesitamos la función que garantiza el orden establecido
c(n,k)
. Para cada uno que se pueday
obtenerc(n,k)
, debemos procesar todo(n,k)
esoy=c(n,k)
. DigamosL=floor(log10(n)+1)
por algunosn
. Pory=L*k
lo tanto debe sostenerse. Comience conk=2,L=y/2
, luego hagak=3,L=y/3;k=4,L=y/4...k=y,L=1
, omitiendo valores no enteros deL
. Para generar toda lac(n,k)
función, comenzar con(1,2)
cony=2
, e incrementary
en 1 y empezar de nuevo cada vez que recibaL==1
. Ahora tenemos una enumeración de pares(L,k)
, y satisface nuestra condición. Sin embargo, tenemos que recuperar toda posiblen
a partirL
, lo que hacemos mediante la enumeración de todos los números enteros conL
dígitos. Luego, para cada uno de esos(n,k)
pares, para cada uno de losk-1
posibles elementos descartados debemos generar el número de pérdida que obtenemos como resultado y agregarlo a nuestra lista, que comienza en blanco. Luego ordenamos la lista y repetimos en el siguiente(L,k)
par, deteniéndonos cuando tenemosd<c(n,k)
como se indicó anteriormente.Desglose del código (un poco desactualizado):
fuente
len(`q[h]`)
debería serlen(str(q[h]))
para apoyar enteros arbitrarios? O simplemente diga si solo funciona hasta cierto límite, ya que está tomando un parámetro, no imprimiendo para siempre.2**63-1
) tendrá unL
final si se usarepr
. Tenga en cuenta que esta entrada probablemente esté muy avanzada en la secuencia.