Algunos divisores de enteros positivos realmente se odian entre sí y no les gusta compartir uno o más dígitos comunes.
Esos números enteros se llaman Números Divisores Hostiles ( HDN )
Ejemplos
El número 9566
tiene 4
divisores: 1, 2, 4783 and 9566
(como puede ver, ninguno de ellos comparte el mismo dígito ).
Por lo tanto, 9566 es un H ostile D iVisor N umber
El número NO9567
es HDN porque sus divisores ( ) comparten algunos dígitos comunes. 1, 3, 9, 1063, 3189, 9567
Aquí están los primeros HDN
1,2,3,4,5,6,7,8,9,23,27,29,37,43,47,49,53,59,67,73,79,83,86,87,89,97,223,227,229,233,239,257,263,267,269,277,283,293,307,337...
Tarea
La lista anterior continúa y su tarea es encontrar el enésimo HDN
Entrada
Un entero positivo n
de 1
a4000
Salida
El nth
HDN
Casos de prueba
Aquí hay algunos casos de prueba indexados .
Indique qué sistema de indexación utiliza en su respuesta para evitar confusiones.
input -> output
1 1
10 23
101 853
1012 26053
3098 66686
4000 85009
Este es el código de golf , por lo que gana la puntuación más baja en bytes.
EDITAR
¡Buenas noticias! Envié mi secuencia a OEIS y ...
Los números de divisor hostil ahora son OEIS A307636
94699599289
, el cuadrado de307733
, tiene divisores[1, 307733, 94699599289]
que muestran que es un HDN. Me parece hostil.49
? Factores[1, 7, 49]
califica como hostil ... O bien,4
:[1, 2, 4]
...1
con la lista de divisores[1]
. (¿Quizás las HDN grandes son más interesantes?)49
que tenía divisores[7, 7]
, que no solo comparten dígitos, sino que son los mismos dígitos.49
tiene factores[1, 7, 49]
Respuestas:
05AB1E ,
1210 bytes-2 bytes gracias a @Emigna .
1 indexado
Pruébelo en línea o verifique la mayoría de los casos de prueba (se omiten los dos últimos casos de prueba, ya que se agota el tiempo de espera).
Explicación:
fuente
µNNÑ€ÙSDÙQ
para 10.µ
, así que me ahorraste el problema. ;)Python 2 , 104 bytes
Pruébalo en línea!
0 indexado.
fuente
JavaScript (ES6), 78 bytes
1 indexado.
Pruébalo en línea!
Versión más rápida, 79 bytes.
Pruébalo en línea!
¿Cómo?
Dado un enterok>0 , construimos la cadena s como la concatenación de todos los divisores de k .
Debido a quek siempre es un divisor de sí mismo, s se inicializa en k (forzado a una cadena) y el primer divisor que intentamos es d=k−1 .
Para cada divisord de k , probamos si se puede encontrar cualquier dígito de d en s al convertir d en un conjunto de caracteres en una expresión regular.
Ejemplos
"956647832".match(/[1]/)
es falso"9567".match(/[3189]/)
es verdaderoComentado
Esta es la versión sin
eval()
, para facilitar la lecturafuente
Jalea , 10 bytes
Pruébalo en línea!
-1 byte gracias a ErikTheOutgolfer
Toma información de STDIN, lo cual es inusual para Jelly pero normal donde
nfind
se usa.2 indexados
fuente
nfind
cambió la indexación jajaja⁼Q$
es el mismo queQƑ
.Perl 6 , 53 bytes
Pruébalo en línea!
1 indexado.
/(.).*$0/
coincide con cualquier número con un dígito repetido.grep $_ %% *, 1 .. $_
devuelve una lista de todos los divisores del número$_
que se está comprobando actualmente para la pertenencia a la lista[~]
concatena todos esos dígitos y luego haceR!~~
coincidir la cadena de la derecha con el patrón de la izquierda. (~~
es el operador de coincidencia habitual,!~~
es la negación de ese operador yR
es un metaoperador que intercambia los argumentos de!~~
).fuente
Python 2 (PyPy) ,
117114bytesUtiliza 1 indexación
Pruébalo en línea!
fuente
Wolfram Language 103 bytes
Utiliza 1-indexación. Me sorprende que requiriera tanto código.
fuente
(n=t=1;While[t<=#,If[!Or@@IntersectingQ@@@Subsets[IntegerDigits@Divisors@n,{2}],t++];n++];n-1)&
no estoy planeando publicar una respuesta, así que dejaré esto aquíPowerShell , 112 bytes
Pruébalo en línea!
Toma una entrada indexada
$args[0]
, la almacena en$a
bucle hasta que llega0
. Cada iteración, ponemos a cero una matriz de diez elementos$z
(utilizada para mantener nuestros recuentos de dígitos). Luego construimos nuestra lista de divisores con1..++$n|?{!($n%$_)}
. Para cada divisor, lo convertimos en una cadena"$_"
, lot
convertimos en oCharArray
ysort
esos dígitos con la-u
bandera de nique (porque no nos importa si un divisor en sí tiene dígitos duplicados). Luego incrementamos el recuento de dígitos apropiado en$z
. Luego, disminuimos$a
solo si$z
contiene0
sys1
(es decir, hemos encontrado un HDN). Si hemos terminado nuestrofor
ciclo, eso significa que hemos encontrado el número apropiado de HDN, por lo que lo dejamos$n
en la tubería y la salida es implícita.fuente
$a-=!($z-ge2)
lugar$a-=!($z|?{$_-ge2})
Python 3 , 115 bytes
1 indexado
Pruébalo en línea!
Esto usa mucha recursividad; incluso con un mayor límite de recursión, no puede hacerlo
f(30)
. Creo que podría ser más fácil de jugar, e intenté encontrar algo para reemplazarlo(1-x%d)
, pero no pude encontrar nada (-~-x%d
tiene la precedencia incorrecta). Cualquier byte que pueda eliminarse es muy apreciado.Cómo funciona
fuente
Brachylog (v2), 14 bytes
Pruébalo en línea!
Presentación de funciones; entrada desde la izquierda, salida hacia la derecha. (El enlace TIO contiene un argumento de línea de comandos para ejecutar una función como si fuera un programa completo).
Explicación
"¿Es este un número divisor hostil?" código de problema de decisión :
Esto resultó básicamente lo mismo que @ UnrelatedString, aunque lo escribí de forma independiente.
Contenedor "enésima solución a un problema de decisión ":
Este es uno de esos casos donde el contenedor requerido para producir la enésima salida es significativamente más largo que el código requerido para probar cada salida a su vez :-)
Se me ocurrió este envoltorio independientemente de @ UnrelatedString's. Tiene la misma longitud y funciona con el mismo principio, pero de alguna manera termina siendo escrito de manera bastante diferente. Tiene más posibilidades potenciales de mejora, ya que podríamos agregar restricciones a los valores que estábamos buscando de forma gratuita mediante el reemplazo de
A
alguna variable de restricción, pero ninguna de las posibles variables de restricción guarda bytes. (Si hubiera una variable de restricción de "entero no negativo", podría reemplazarlaA
por ella y luego guardar un byte haciendoℕ
innecesario el valor).fuente
Java 10,
149139138126125120119 bytes-10 bytes usando en
.matches
lugar de.contains
por dígito, inspirado en la respuesta JavaScript de @Arnauld .-5 bytes gracias a @ValueInk
-1 byte gracias a @ceilingcat
1 indexado
Pruébalo en línea.
Explicación:
fuente
i
ys
en su búsqueda de expresiones regulares, no necesita la conversión de cadena adicional, y el resultado es el mismo.Brachylog , 16 bytes
Pruébalo en línea!
Muy lento, y el doble de lo que sería si esto fuera un problema de decisión . 1 indexado.
fuente
Wolfram Language (Mathematica) , 74 bytes
Pruébalo en línea!
fuente
Japt v2.0a0, 17 bytes
Intentalo
Puerto de esta respuesta Brachylog .
Crédito: 4 bytes de ahorro total gracias a Shaggy, quien también sugirió que había una mejor solución que conducía a muchos más bytes :)
Respuesta original Enfoque de 28 bytes:
Intentalo
Puerto de esta respuesta de JavaScript .
fuente
«
atajo antes :) Me imagino que si Shaggy solo mejora mi puntaje en un puñado de bytes, ¿debo estar (algo) decente en esto?Icono , 123 bytes
Pruébalo en línea!
1 indexado. Muy lento para grandes entradas.
fuente
Perl 6 , 74 bytes
0 indexado. Solo los primeros tres casos se enumeran en TIO ya que es demasiado lento para probar el resto.
Pruébalo en línea!
fuente
Ruby ,
110979284 bytes-13 bytes aprovechando la comprobación de expresiones regulares de JavaScript de @ Arnauld .
-5 bytes para intercambiar el
times
bucle por un decrementador y unwhile
.-8 bytes al deshacerse
combination
de algo más como las otras respuestas.Pruébalo en línea!
fuente
Perl 5
-p
, 66 bytesPruébalo en línea!
1 indexado
fuente
J ,
8759 bytes-28 bytes gracias a FrownFrog
Pruébalo en línea!
original
J , 87 bytes
Pruébalo en línea!
Yikes
Esto es atrozmente largo para J, pero no veo grandes maneras de derribarlo.
explicación
Ayuda a introducir un par de verbos auxiliares para ver qué sucede:
d
devuelve una lista de todos los divisores de su argumentoh
te dice que tal lista es hostil. Encadena y deduplica cada número~.@":"0
, lo que devuelve una matriz cuadrada donde los números más cortos se rellenan con espacios.-.&' '@,/
aplana la matriz y elimina espacios, y finalmente(-:~.)
te dice si ese número se repite o no.Con esos dos ayudantes, nuestro verbo general sin golf se convierte:
Aquí mantenemos una lista cuya cabeza es nuestro "candidato actual" (que comienza en 1), y cuya cola son todos los números hostiles encontrados hasta ahora.
Incrementamos el encabezado de la lista
>:@[
en cada iteración y solo agregamos el "candidato actual" si es hostilh@d@[ # [
. Seguimos haciendo esto hasta que la longitud de nuestra lista alcance 1 + n:^:(#@] < 1 + [)^:_
.Finalmente, cuando terminamos, devolvemos el último número de esta lista,
[: {:
que es el enésimo número hostil.fuente