El título está compuesto por 'Índice de secuencia de dígitos no'.
Reto:
Dado un número entero nque es >= 0, genera el nnúmero 'th de la siguiente secuencia.
Aquí están los primeros 50 elementos, con su índice (indexado 0) encima:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
1 0 3 2 5 4 7 6 9 8 22 20 30 24 23 26 25 28 27 32 11 33 10 14 13 16 15 18 17 31 12 29 19 21 50 40 41 42 44 45 35 36 37 51 38 39 52 53 55 56 34
¿Cómo funciona esta secuencia?
El número en el índice ndebe ser el primero para que no tenga ningún dígito en común ny no haya aparecido aún para índices anteriores. Entonces, cuando miramos una secuencia normal como esta de 0-60:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
Definimos los n'th valores como este:
0: El primer número (0) contiene el mismo dígito, por lo que buscamos el siguiente (1), que no contiene el mismo dígito. Asín=0salidas1.1: El primer número (0) no contiene el mismo dígito, por lo que sen=1genera0.2: Ya hemos encontrado0y1, y el siguiente dígito (2) contiene el mismo dígito, por lo que buscamos el siguiente (3), que no contiene el mismo dígito. Asín=2salidas3.- ...
10: Ya nos hemos encontrado0-9, así que el siguiente en la línea es10.10-19contener el dígito correspondiente1,20contiene el dígito de juego0,21contiene el dígito de juego1de nuevo,22es válido, por lo quen=10las salidas22.- etc.
Reglas de desafío:
- Si su idioma está indexado en 1 (o lo elige), puede comenzar la secuencia en
3 2 5 4 7 ...(omitiendo el1atn=0y el0atn=1). - El índice mínimo más grande que debe admitir es
25,000. NOTA: La secuencia se detiene en el índice1,023,456,788, porque el siguiente índice en línea contiene los 10 dígitos. - También puede generar / devolver una matriz / lista de toda la secuencia hasta el índice incluido,
nsi lo desea.
Reglas generales:
- Este es el código de golf , por lo que la respuesta más corta en bytes gana.
No permita que los lenguajes de code-golf lo desanimen a publicar respuestas con lenguajes que no sean codegolf. Trate de encontrar una respuesta lo más breve posible para 'cualquier' lenguaje de programación. - Se aplican reglas estándar para su respuesta, por lo que puede usar STDIN / STDOUT, funciones / método con los parámetros adecuados y programas completos de tipo retorno. Tu llamada.
- Las lagunas predeterminadas están prohibidas.
- Si es posible, agregue un enlace con una prueba para su código.
- Además, agregue una explicación si es necesario.
Casos de prueba:
Esta secuencia realmente creó pares con respecto al índice y las salidas. Si las nsalidas de oíndice, las osalidas de índice n. Entonces puede ingresar a la izquierda o la derecha, y la salida será el otro lado:
0 <-> 1 (this test case is optional)
2 <-> 3
10 <-> 22
12 <-> 30
34 <-> 50
89 <-> 100
111 <-> 200
112 <-> 300
199 <-> 322
2231 <-> 4456
9605 <-> 11118
19235 <-> 46000
23451 <-> 60668
25000 <-> 13674
Aquí hay un pastebin de los primeros 25.001 casos de prueba si desea probar otros.

Respuestas:
Pyth , 18 bytes
Pruébalo aquí! o ¡ Verifique más casos de prueba!
Tenga en cuenta que esto devuelve toda la secuencia hasta el índice N , pero el enlace devuelve solo el último número, anteponiendo un
e(final). Si desea ver el valor bruto devuelto por este programa, simplemente elimínelo .Cómo funciona
u + Gf! |} TG @ `H`T0hQY - Programa completo. u ... hQY - Reduce hQ (la entrada incrementada) de izquierda a derecha, con el función ... (G, H), con el valor inicial Y (la lista vacía). G es el valor actual y H es el índice de iteración. f 0: primer entero a partir de 0, que satisface lo siguiente: } TG - Aparece en G ... El | @ `H`T - O su intersección (cadena) con el índice actual (H) es no vacio ! - NO lógico (negación booleana). + G: añade el valor obtenido anteriormente al valor actual (G). Esto se convierte en el valor dado para la próxima iteración. - Imprima implícitamente todos los resultados intermedios, o agregue e para imprimir el último.fuente
Python 2 ,
92918988 bytesPruébalo en línea!
Imprime una lista de los primeros
n+1números.Enfoque diferente, que es mucho más rápido:
Python 2 , 96 bytes
Pruébalo en línea!
fuente
Haskell,
8069 bytesPruébalo en línea!
Muy lento para grandes
n.Editar: @Laikoni guardó 10 bytes. ¡Gracias!
fuente
APL (Dyalog) , 39 bytes
Usos
⎕IO←0.Pruébalo en línea!
¿Cómo?
Recursividad
0=⍵:1- Adivina.~⍺∊0∇¨⍳⍵- left arg (acumulador) no está ya en resultados anteriores∧⊃∧/≠/⍕¨⍺⍵- y la representación de cadena del acumulador ynson diferentes:⍺- luego devuelva el acumulador.⍵∇⍨⍺+1- de lo contrario, incremente el acumulador y recurse.fuente
n=10en TIO ...: S Esa debe ser una operación de alto rendimiento que está haciendo allí. ¿Es la recursión lo que causa esto, o es algo más el cuello de botella?Python 3 , 92 bytes
Pruébalo en línea!
Todo esto impresiones de los plazos de hasta el N º uno. Gracias a Dennis para
-4-5 bytes!fuente
Java (OpenJDK 8) ,
218217213210202200172171170168167 bytesNo puedo creer que no haya regresado
ktodo este tiempo ...Pruébalo en línea!
fuente
for(char f:(""+k).toCharArray())afor(int f:(""+k).getBytes()),r.substring(-~r.trim().lastIndexOf(32));y ar.substring(r.lastIndexOf(32)-1).Ir ,
217205bytesVersión alternativa (programa en lugar de paquete): ¡ Pruébelo en línea!
Mejoras:
formediante el uso de asignación múltiple parai,k"fmt";+fmt.Printes más corto queos.Stdout.WriteString(remanente depackage maincuando se necesitaban Args os)fuente
25000caso de prueba. :) Así que no solo es una solución válida, sino también con un rendimiento relativamente bueno. +1 de mi parte! (PD: en su enlace TIO es el argumento que usa, la entrada se puede eliminar / no se usa.)JavaScript (ES6),
103 8881Editar Revisado incluyendo muchas ideas inteligentes por @Neil
Punto de partida
Idea básica: un bucle de 0 a n, y los valores de comprobación de un bucle interno aún no se utilizan
Versión actual más legible
Prueba
fuente
~s.search(d)cons.match(d)trabajo?0aj++, quitando el++dejantes y luego comenzandojdesde en0lugar de-1.n=>eval("for(r=[j=i='0'];i<=n;)r[j]|[...''+j].some(d=>i.match(d))?j++:(i=++i+'',r[k=j]=1,j=0);k")Octava , 114 bytes
Pruébalo en línea!
Gracias a Kevin Cruijssen y Dlosc por la comparación de personajes de golf.
Sin golf
Explicación básica:
iy otro para agregar valorjPara cada uno
i, continúe aumentandojsi se cumple cualquiera de los siguientes:jha sido usado antes10convierte[1 0]) usandoint2str. Luego, compare los dos números usandoismember(por ejemplo,[1 0]y[2 1]volvería[1 0]) y luegonnzpara ver si alguna columna coincidía.Si no se cumple ninguno de los anteriores, ¡tiene el siguiente número! Anexar a
o, la matriz de salidafuente
-'0'. Pero si hay algún caso marginal en el que ambos no hayamos pensado,-48sería una alternativa más corta. Además, ambossprintf('%d',...)pueden serint2str(...).Perl 5 , 60 bytes
Código de 59 bytes + 1 para
-p.Pruébalo en línea! (Incluye
-lpara fines visuales y$-=0;para restablecer cada iteración)fuente
Pip , 30 bytes
29 bytes de código, +1 para
-pbandera.Pruébalo en línea!
Emite la lista completa. Advertencia: altamente ineficiente; el
2231caso de entrada ha estado funcionando durante más de 35 minutos en mi computadora portátil y aún no ha terminado.Explicación
fuente
Visual Basic .NET (.NET 4.5) ,
260259 bytes-1 byte gracias a Kevin Cruijssen
Recorre en bucle, generando términos anteriores en la secuencia para luego compararlos. Luego itera el número como una cadena en busca de coincidencias.
Abusa del sistema de mecanografía de VB.NET. Por ejemplo,
jes una cadena, pero agregar uno se convierte en un entero para mí. Los enteros se convierten en booleanos donde0estáFalsey el resto lo estánTrue.Pruébalo en línea!
fuente
If Not p.Contains(j)Thenmismo tiempo que hiciste aIf j.Contains(c)Then g=0continuación. Además,If Not p.Contains(j)Then \n g=1 \n For Each c In i.ToString \n If j.Contains(c)Then g=0 \n Next \n If g Then Exit While \n End Ifpuede acortarse eliminandogy utilizandoExit Whiledirectamente en el bucle for:If Not p.Contains(j)Then \n For Each c In i.ToString \n If j.Contains(c)Then Exit While \n Next \n End Ifque, según parece , se convertirá en 241 bytes .Contains(c)Then, simplemente lo perdí. Me gusta lo que estás pensando, pero lo estoy usandogcomo centinela para ver si la cadena contiene el número o no. Su enlace da las respuestas incorrectas, pero veré si puedo reelaborar parte de la lógica interna a lo largo de lo que está pensando.Jalea , 20 bytes
Pyth le gana a Jelly. ¡Vamos, señor Xcoder!
Un programa completo que toma la entrada de STDIN y sale en la opción de formato de lista usando la representación de lista de Jelly *. Utiliza la indexación basada en 0 estándar.
* Listas solo elemento no han rodea
[], por lo que0las salidas1, mientras que1las salidas[1, 0], etc.Pruébalo en línea!
¿Cómo?
fuente