Muitas linguagens de programação fornecem operadores para manipular os dígitos binários (base 2) dos números inteiros. Aqui está uma maneira de generalizar esses operadores para outras bases:
Deixe que x e y ser números de um dígito em base de B . Definir o operador unário ~
e operadores binários &
, |
e ^
de tal forma que:
- Matemática5 pontos
- x & y = min (x, y)
- x y = max (x, y)
- x ^ y = (x e ~ y) | (y & x)
Observe que, se B = 2, obtemos os familiares operadores NOT, AND, OR e XOR, bit a bit.
Para B = 10, obtemos a tabela "decimal XOR":
^ │ 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
Para números de vários dígitos, aplique o operador de um dígito, dígito por dígito. Por exemplo, 12345 ^ 24680 = 24655, porque:
- 1 ^ 2 = 2
- 2 ^ 4 = 4
- 3 ^ 6 = 6
- 4 ^ 8 = 5
- 5 ^ 0 = 5
Se os operandos tiverem comprimentos diferentes, preencha o menor com zeros à esquerda.
O desafio
Escreva, no menor número de bytes possível, um programa ou função que tome como entrada dois números inteiros (que podem ser assumidos entre 0 e 999 999 999, inclusive) e emita o "XOR decimal" dos dois números, conforme definido acima.
Casos de teste
- 12345, 24680 → 24655
- 12345, 6789 → 16654
- 2019, 5779 → 5770
- 0, 999999999 → 999999999
- 0, 0 → 0
09
um resultado aceitável para uma entrada de 90, 99
?
A^B^B=A
a^b=b^a
e a^b^b=a
para bases com um divisor primo ímpar