Dans un épisode récent de QI , les 5 premiers multiples de 142857 ont été décrits comme des anagrammes du nombre original. Bien sûr, toute personne ayant plus qu'une connaissance passagère de ce nombre saura que ces nombres sont en fait cycliques, pas seulement des anagrammes. Mais cela m'a fait réfléchir.
Veuillez écrire un programme ou une fonction qui produit tous les nombres de six chiffres ou moins qui ont un facteur approprié qui est une anagramme de lui-même. La liste doit commencer par les numéros suivants:
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 vous préférez, vous pouvez trouver des nombres qui ont une anagramme qui est un facteur approprié du nombre, mais veillez à exclure les zéros de tête de vos anagrammes.
C'est le golf de code, donc le code le plus court en octets qui ne casse aucune faille standard gagne.
Réponses:
Mathematica (environnement REPL),
7574 octetsMerci à ngenisis d'avoir resserré cela d'un octet!
Sort/@IntegerDigits@Divisors@#
produit une liste triée de chiffres pour chaque diviseur de son argument; le numéro d'entrée est lui-même un diviseur, donc sa liste triée de chiffres est la dernière.Most@#~MemberQ~Last
détecte si cette dernière liste triée de chiffres apparaît également dans la liste avant le dernier élément. EtSelect[Range[10!],...]
ne conserve que les nombres entiers jusqu'à 3 628 800 qui réussissent ce test (cette limite choisie car elle est inférieure d'un octet à 10 6 ). Il s'exécute en environ 5 minutes sur mon ordinateur, donnant une liste de 494 numéros, dont le plus grand est 3 427 191; il y a 362 nombres jusqu'à 10 6 , dont le larget est 989 901.la source
IntegerDigits@Divisors@#
.Gelée , 12 octets
Essayez-le en ligne! (utilise cinq chiffres ou moins en raison du délai de TIO)
La vérification
Comment ça fonctionne
la source
ÆḌṢ€ċṢµȷ#
pendant 10. Il a fallu environ 27 minutes pour fonctionner sur un noyau i7 (pas sur unix, pas sympatime
); le résultat le plus important a été6671928
.Brachylog , 12 octets
Essayez-le en ligne!
Cependant, cela peut expirer avant d'imprimer quoi que ce soit (et si ce n'est pas le cas, il ne pourra imprimer que 3105).
Explication
Cela imprime ces nombres indéfiniment, car l'auteur a dit qu'il était acceptable que le programme imprime des nombres supérieurs à 6 chiffres.
C'est beaucoup trop lent; vous pouvez utiliser ce programme (et le modifier
8300
par n'importe quelN
) pour démarrer l'impression à partir de nombres strictement supérieurs àN
.Comme l'a souligné @ ais523, nous avons besoin d'une coupe pour éviter d'imprimer plusieurs fois si plusieurs de ses facteurs en sont des permutations.
la source
JavaScript (ES6),
103…9694 octetsUne fonction anonyme qui renvoie le tableau des entiers correspondants.
Formaté et commenté
Statistiques de diviseur
Pour des nombres entiers à 6 chiffres, chaque rapport de
2
à9
entre un nombre entier correspondantn
et son anagram est rencontré au moins une fois. Mais certains d'entre eux n'apparaissent que quelques fois:Tester
Le test ci-dessous est limité à la plage
[1 ... 39999]
afin qu'il ne prenne pas trop de temps à terminer.Afficher l'extrait de code
la source
_=>[...Array(1e6).keys()].filter(n=>n&&![...Array(9)].every(_=>n%++i||(F=i=>[...i+''].sort()+'')(n/i)!=F(n),i=1))
.2
à9
sont requis (8
utilisés seulement deux fois pour911736
et931176
).Pyke, 14 octets
Essayez-le ici!
Devrait sortir tous les nombres comme ça mais expire.
Testez l'algorithme ici!
la source
Perl 6 , 59 octets
Solution de force brute terriblement lente.
Il retourne une séquence paresseuse, donc je pourrais vérifier les premiers résultats, mais il n'atteindra pas tous les résultats dans un délai raisonnable. (Dois-je le marquer comme non concurrentiel?)
la source
Pure Bash ,
128126122 122121120 octetsEssayez-le en ligne!
(Ce programme est relativement rapide - il n'a fallu que 14 minutes pour parcourir tous les numéros à 6 chiffres de mon MacBook. Malheureusement, TIO arrive à expiration car il impose une limite de durée d'exécution de 1 minute, ce qui ne suffit que pour passer au travers. les nombres à 5 chiffres ou plus.)
Utilitaires Bash + Unix, 117 octets
C'est plus court que la version pure bash, mais un peu plus lent, probablement à cause de toutes les fourches.
la source
05AB1E , 15 octets
Explication:
Essayez-le en ligne! (cela ne fonctionnera pas, il expirera)
la source
Japt , 23 octets
Essayez-le en ligne! Notez que le code lié ne calcule que jusqu'à 1e4 car 1e6 expire sur TIO.
la source
Python 2, 98 octets
la source
10**6
?x%i==0
peut l'êtrex%i<1
.05AB1E ,
1210 octetsExpiration du délai sur TIO en raison d'une boucle infinie.
Enregistrement de 2 octets car nous pourrions produire plus de 6 chiffres selon le commentaire des OP.
Essayez-le en ligne!
Explication
la source
Lot, 263 octets
Lent. Comme dans, prend plus d'une journée pour terminer sur mon PC. Explication: le
c
sous - programme divise ses deux premiers arguments. Si le reste est nul, il calcule alors le hachage du résultat en calculant la somme des nièmes puissances de 8 pour chaque chiffre. Cette fonction de hachage, volée dans la réponse bash, n'entre en collision qu'avec des anagrammes. (Cela fonctionnerait pour les nombres à sept chiffres mais je n'ai pas tous les quinze jours.) Le troisième argument est soustrait et le sous-programme se termine avec un résultat véridique s'il est nul. Len
sous-programme appelle lec
sous - programme une fois pour calculer le hachage, puis huit fois de plus pour comparer le hachage; s'il trouve une collision, il imprimen
et quitte le sous-programme plus tôt.la source