En un episodio reciente de QI , los primeros 5 múltiplos de 142857 se describieron como anagramas del número original. Por supuesto, cualquiera con un conocimiento más que pasajero de ese número sabrá que esos números son realmente cíclicos, no solo anagramas. Pero eso me puso a pensar.
Escriba un programa o función que genere todos los números de seis dígitos o menos que tengan un factor apropiado que sea un anagrama de sí mismo. La lista debe comenzar con los siguientes números:
3105 (divisible by 1035)
7128 (divisible by 1782)
7425 (divisible by 2475)
8316 (divisible by 1386)
8712 (divisible by 2178)
9513 (divisible by 1359)
9801 (divisible by 1089)
Si lo prefiere, puede encontrar números que tengan un anagrama que sea un factor apropiado del número, pero tenga cuidado de excluir los ceros iniciales de sus anagramas.
Este es el código de golf, por lo que gana el código más corto en bytes que no rompe las lagunas estándar.
Respuestas:
Mathematica (entorno REPL),
7574 bytes¡Gracias a ngenisis por reforzar esto por un byte!
Sort/@IntegerDigits@Divisors@#
produce una lista ordenada de dígitos para cada divisor de su argumento; el número de entrada es en sí mismo un divisor, por lo que su lista ordenada de dígitos es la última.Most@#~MemberQ~Last
detecta si esa última lista ordenada de dígitos también aparece en la lista anterior al último elemento. YSelect[Range[10!],...]
retiene solo aquellos enteros de hasta 3,628,800 que pasan esta prueba (ese límite elegido porque es un byte más corto que 10 6 ). Se ejecuta en aproximadamente 5 minutos en mi computadora, produciendo una lista de 494 números, el mayor de los cuales es 3,427,191; hay 362 números hasta 10 6 , el mayor de los cuales es 989,901.fuente
IntegerDigits@Divisors@#
.Jalea , 12 bytes
Pruébalo en línea! (usa cinco dígitos o menos debido al límite de tiempo de TIO)
Verificación
Cómo funciona
fuente
ÆḌṢ€ċṢµȷ#
durante 10. Tomó ~ 27 minutos para ejecutarse en un núcleo i7 (no en Unix, no es agradabletime
); el resultado fue más grande6671928
.Brachylog , 12 bytes
Pruébalo en línea!
Sin embargo, esto podría exceder el tiempo de espera antes de imprimir cualquier cosa (y si no lo hace, solo podrá imprimir 3105).
Explicación
Esto imprime esos números indefinidamente, ya que el autor dijo que era aceptable que el programa imprimiera números de más de 6 dígitos.
Esto es demasiado lento; puede usar este programa (y cambiar
8300
por cualquieraN
) para comenzar a imprimir desde números estrictamente mayores queN
.Como señaló @ ais523, necesitamos un corte para evitar imprimir un número varias veces si varios de sus factores son permutaciones del mismo.
fuente
JavaScript (ES6),
103...9694 bytesUna función anónima que devuelve la matriz de enteros coincidentes.
Formateado y comentado
Estadísticas del divisor
Para enteros 6 dígitos, cada relación de
2
a9
entre un número entero de adaptaciónn
y su anagrama se encuentra al menos una vez. Pero algunos de ellos aparecen solo algunas veces:Prueba
La prueba a continuación se limita al rango,
[1 ... 39999]
por lo que no lleva mucho tiempo completarla.Mostrar fragmento de código
fuente
_=>[...Array(1e6).keys()].filter(n=>n&&![...Array(9)].every(_=>n%++i||(F=i=>[...i+''].sort()+'')(n/i)!=F(n),i=1))
.2
a9
son obligatorios (8
se usan solo dos veces para911736
y931176
).Pyke, 14 bytes
Pruébalo aquí!
Debería mostrar todos los números como este pero se agota el tiempo de espera.
¡Prueba el algoritmo aquí!
fuente
Perl 6 , 59 bytes
Solución de fuerza bruta terriblemente lenta.
Devuelve una secuencia perezosa, por lo que podría verificar los primeros resultados, pero no alcanzará todos los resultados en un tiempo razonable. (¿Debo marcarlo como no competitivo?)
fuente
Pure Bash ,
128126122121120 bytesPruébalo en línea!
(Este programa es razonablemente rápido: solo tardó 14 minutos en recorrer todos los números de 6 dígitos de mi MacBook. Desafortunadamente, TIO agota el tiempo de espera porque impone un límite de tiempo de ejecución de 1 minuto, que es solo el tiempo suficiente para completarlo. los números de 5 dígitos más o menos.)
Bash + Unix utilidades, 117 bytes
Esto es más corto que la versión de bash puro, pero bastante más lento, presumiblemente debido en buena parte a toda la bifurcación.
fuente
05AB1E , 15 bytes
Explicación:
Pruébalo en línea! (esto no funcionará, se agotará el tiempo)
fuente
Japt , 23 bytes
Pruébalo en línea! Tenga en cuenta que el código vinculado solo calcula hasta 1e4 porque 1e6 agota el tiempo de espera en TIO.
fuente
Python 2, 98 bytes
fuente
10**6
?x%i==0
solo puede serx%i<1
.05AB1E ,
1210 bytesSe agotó el tiempo de espera en TIO debido al bucle infinito.
Se guardaron 2 bytes ya que podríamos generar números de más de 6 dígitos de acuerdo con el comentario de los OP.
Pruébalo en línea!
Explicación
fuente
Lote, 263 bytes
Lento. Como en, lleva más de un día terminar en mi PC. Explicación: la
c
subrutina divide sus dos primeros argumentos. Si el resto es cero, entonces calcula el hash del resultado calculando la suma de las enésimas potencias de 8 para cada dígito. Esta función hash, robada de la respuesta bash, solo colisiona en anagramas. (Funcionaría para números de siete dígitos, pero no tengo toda la quincena). El tercer argumento se resta, y la subrutina sale con un resultado verdadero si es cero. Lan
subrutina llama a lac
subrutina una vez para calcular el hash, luego ocho veces más para comparar el hash; Si encuentra una colisión, imprimen
y sale temprano de la subrutina.fuente