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 de90, 99
?A^B^B=A
a^b=b^a
eta^b^b=a
pour les bases avec un diviseur premier impairRéponses:
Gelée , 14 octets
Essayez-le en ligne!
Grille de toutes les paires à un chiffre
Un lien monadique prenant comme argument une liste de deux entiers et retournant un entier.
Explication
Si une matrice de chiffres est une entrée / sortie acceptable:
Gelée , 12 octets
Essayez-le en ligne!
la source
Pyth , 31 octets
Essayez-le en ligne!
la source
Python 2 , 71 octets
Essayez-le en ligne!
la source
Forth (gforth) , 111 octets
Essayez-le en ligne!
Explication du code
la source
C # (Visual C # Interactive Compiler) , 75 octets
6 octets enregistrés grâce à @someone
Essayez-le en ligne!
la source
Zip
, vous ne pouvez pas l'utiliser car il tronque automatiquement la collection la plus longue à la longueur de la plus courtePHP ,
111109 octetsEssayez-le en ligne!
Tests: Essayez-le en ligne!
Si nous appelons les chiffres que nous voulons XOR,
$a
et$b
, j'ai trouvé que:$a
est inférieur à 5,XOR = min(9-$a, max($a, $b))
$a
est supérieur ou égal à 5,XOR = min($a, max(9-$a, 9-$b))
J'ai donc implémenté cette logique plus un hack pour gérer les nombres de différentes longueurs. Je prends chaque forme de chiffres à la fin des deux nombres d'entrée (avec des indices négatifs comme
input[-1]
,input[-2]
...) et calculer la XOR et mettre le résultat dans l' ordre inverse dans une chaîne de caractères à imprimer à la fin. Étant donné que je prends des chiffres à la fin des nombres, les résultats XOR doivent être regroupés dans l'ordre inverse. Lorsque l'une des entrées est plus longue que l'autre, l'index négatif sur une entrée plus courte se traduit par une chaîne vide qui est égale à 0.la source
Rétine ,
8559 octetsEssayez-le en ligne! Prend l'entrée sur des lignes distinctes, mais le lien consiste à tester la suite qui reformate l'entrée séparée par des virgules. Explication:
Pavé gauche avec des zéros sur les deux lignes à la même longueur.
Triez chaque chiffre par son index de colonne, puis supprimez la nouvelle ligne. Cela a pour effet d'appairer les chiffres de la même manière qu'une transposition.
Appliquer séparément à chaque paire de chiffres, en joignant les résultats ensemble.
Dupliquez la paire.
Inversez le deuxième chiffre de la première paire et le premier chiffre de la seconde, nous avons donc maintenant
x ~y
sur une ligne et~x y
sur l'autre.Triez les chiffres de chaque ligne dans l'ordre, de sorte que le premier chiffre soit maintenant
x & ~y
ou~x & y
comme approprié.Tri inversé des lignes.
Et extrayez le premier chiffre, qui est le résultat souhaité.
la source