El título está compuesto por 'Índice de secuencia de dígitos no'.
Reto:
Dado un número entero n
que es >= 0
, genera el n
nú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 n
debe ser el primero para que no tenga ningún dígito en común n
y 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=0
salidas1
.1
: El primer número (0
) no contiene el mismo dígito, por lo que sen=1
genera0
.2
: Ya hemos encontrado0
y1
, 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=2
salidas3
.- ...
10
: Ya nos hemos encontrado0-9
, así que el siguiente en la línea es10
.10-19
contener el dígito correspondiente1
,20
contiene el dígito de juego0
,21
contiene el dígito de juego1
de nuevo,22
es válido, por lo quen=10
las 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 el1
atn=0
y el0
atn=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,
n
si 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 n
salidas de o
índice, las o
salidas 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
fuente
Python 2 ,
92918988 bytesPruébalo en línea!
Imprime una lista de los primeros
n+1
nú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 yn
son diferentes:⍺
- luego devuelva el acumulador.⍵∇⍨⍺+1
- de lo contrario, incremente el acumulador y recurse.fuente
n=10
en 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
k
todo 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:
for
mediante el uso de asignación múltiple parai,k
"fmt";
+fmt.Print
es más corto queos.Stdout.WriteString
(remanente depackage main
cuando se necesitaban Args os)fuente
25000
caso 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?0
aj++
, quitando el++
dej
antes y luego comenzandoj
desde en0
lugar 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:
i
y otro para agregar valorj
Para cada uno
i
, continúe aumentandoj
si se cumple cualquiera de los siguientes:j
ha sido usado antes10
convierte[1 0]
) usandoint2str
. Luego, compare los dos números usandoismember
(por ejemplo,[1 0]
y[2 1]
volvería[1 0]
) y luegonnz
para 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,-48
serí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
-l
para fines visuales y$-=0;
para restablecer cada iteración)fuente
Pip , 30 bytes
29 bytes de código, +1 para
-p
bandera.Pruébalo en línea!
Emite la lista completa. Advertencia: altamente ineficiente; el
2231
caso 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,
j
es una cadena, pero agregar uno se convierte en un entero para mí. Los enteros se convierten en booleanos donde0
estáFalse
y el resto lo estánTrue
.Pruébalo en línea!
fuente
If Not p.Contains(j)Then
mismo tiempo que hiciste aIf j.Contains(c)Then g=0
continuació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 If
puede acortarse eliminandog
y utilizandoExit While
directamente 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 If
que, según parece , se convertirá en 241 bytes .Contains(c)Then
, simplemente lo perdí. Me gusta lo que estás pensando, pero lo estoy usandog
como 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 que0
las salidas1
, mientras que1
las salidas[1, 0]
, etc.Pruébalo en línea!
¿Cómo?
fuente