De nombreux langages de programmation fournissent des opérateurs pour manipuler les chiffres binaires (base-2) des entiers. Voici une façon de généraliser ces opérateurs à d'autres bases:
Soit x et y deux nombres à un seul chiffre dans la base B . Définir l'opérateur unaire ~
et binaire &
, |
et de ^
telle sorte que:
- ~ x = (B - 1) - x
- x & y = min (x, y)
- x | y = max (x, y)
- x ^ y = (x et ~ y) | (y & ~ x)
Notez que si B = 2, nous obtenons les opérateurs NOT, AND, OR et XOR au niveau du bit familiers.
Pour B = 10, on obtient le tableau «XOR décimal»:
^ │ 0 1 2 3 4 5 6 7 8 9
──┼────────────────────
0 │ 0 1 2 3 4 5 6 7 8 9
1 │ 1 1 2 3 4 5 6 7 8 8
2 │ 2 2 2 3 4 5 6 7 7 7
3 │ 3 3 3 3 4 5 6 6 6 6
4 │ 4 4 4 4 4 5 5 5 5 5
5 │ 5 5 5 5 5 4 4 4 4 4
6 │ 6 6 6 6 5 4 3 3 3 3
7 │ 7 7 7 6 5 4 3 2 2 2
8 │ 8 8 7 6 5 4 3 2 1 1
9 │ 9 8 7 6 5 4 3 2 1 0
Pour les numéros à plusieurs chiffres, appliquez l'opérateur à un chiffre chiffre par chiffre. Par exemple, 12345 ^ 24680 = 24655, car:
- 1 ^ 2 = 2
- 2 ^ 4 = 4
- 3 ^ 6 = 6
- 4 ^ 8 = 5
- 5 ^ 0 = 5
Si les opérandes sont de longueurs différentes, remplissez le plus court avec des zéros en tête.
Le défi
Écrivez, dans le moins d'octets possible, un programme ou une fonction qui prend en entrée deux entiers (qui peuvent être supposés être compris entre 0 et 999 999 999, inclus) et sort le «XOR décimal» des deux nombres comme défini ci-dessus.
Cas de test
- 12345, 24680 → 24655
- 12345, 6789 → 16654
- 2019, 5779 → 5770
- 0, 999999999 → 999999999
- 0, 0 → 0
09
résultat acceptable pour une entrée de 90, 99
?
A^B^B=A
a^b=b^a
et a^b^b=a
pour les bases avec un diviseur premier impair