Défi
Écrivez une fonction ou un programme qui prend un nombre décimal positif, appelez-le A et affichez deux nombres positifs, B et C , tels que:
- A == B bitxor C
- B et C ne doivent contenir aucun des chiffres 0, 3 ou 7 dans leur représentation décimale.
Exemples
>>> decompose(3)
1, 2
>>> decompose(7)
1, 6
>>> decompose(718)
121, 695
>>> decompose(99997)
2, 99999
>>> decompose(4294967296)
4294968218, 922
>>> decompose(5296080632396965608312971217160142474083606142654386510789497504098664630388377556711796340247136376)
6291484486961499292662848846261496489294168969458648464915998254691295448225881546425551225669515922,
1191982455588299219648819556299554251659915414942295896926425126251962564256469862862114191986258666
Étant donné que la décomposition n'est pas unique, votre fonction / programme n'a pas besoin de produire exactement les mêmes résultats que ces exemples fournis.
Règles très détaillées
Les soumissions doivent prendre la forme d'une fonction ou d'un programme complet .
import
déclarations ne comptent pour le score final.Vous pouvez supposer que l'entrée A contient toujours au moins un chiffre de 0, 3 ou 7.
Vous pouvez supposer qu'une décomposition existe toujours.
Vous pouvez utiliser BigInt s'ils font partie des bibliothèques standard de la langue, ou peuvent être installés via le gestionnaire de packages de jure de la langue .
La fonction doit être rapide. Il ne devrait pas prendre plus de 20 secondes pour s'exécuter sur un ordinateur raisonnablement moderne lorsqu'il reçoit un numéro à 100 chiffres et pas plus de 2 secondes lorsqu'il est alimenté par un numéro à 10 chiffres.
La fonction / le programme doit prendre en charge la saisie d'au moins 100 chiffres .
- Si la fonction / le programme ne peut prendre en charge que des nombres entiers jusqu'à N <100 chiffres, il y aura une pénalité de + 10 × (100 / N - 1) octets au score final. Il s'agit d'encourager les golfeurs à prendre en charge une plus large gamme de nombres même si l'importation peut être détaillée.
Il n'y a aucune restriction sur la présentation des entrées / sorties tant qu'elles sont clairement en représentation décimale.
- La fonction peut entrer et sortir des chaînes / BigInts si les types entiers intégrés ne sont pas suffisants.
- L'entrée peut provenir du paramètre de fonction, de l'argument de ligne de commande ou de STDIN.
- La fonction peut renvoyer le résultat ou simplement imprimer le résultat directement dans STDOUT.
- Cependant, un débordement signé dans les entrées / sorties n'est pas autorisé.
- Les réponses approximatives ne sont pas tolérées, les entrées / sorties doivent être exactes.
Notation
Ceci est un code-golf . La solution la plus courte en octets gagne.
Il y a une pénalité si le programme ne peut prendre en charge que des nombres de moins de 100 chiffres:
- Entiers 64 bits (19 chiffres) = +42 octets
- Entiers 63 bits (18 chiffres) = +45 octets
- Entiers 53 bits (15 chiffres) = +56 octets
- Entiers 31/32 bits (9 chiffres) = +101 octets