Molti linguaggi di programmazione forniscono agli operatori la manipolazione delle cifre binarie (base-2) degli interi. Ecco un modo per generalizzare questi operatori ad altre basi:
Let x ed y tramite numeri a una cifra nella base B . Definire l'operatore unario ~e operatori binari &, |e ^tali che:
- ~ x = (B - 1) - x
- x & y = min (x, y)
- x | y = max (x, y)
- x ^ y = (x & ~ y) | (y & ~ x)
Si noti che se B = 2, otteniamo i noti operatori NOT bit, AND, OR e XOR bit per bit.
Per B = 10, otteniamo la tabella "XOR decimale":
^ │ 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
Per i numeri a più cifre, applicare l'operatore a una cifra cifra per cifra. Ad esempio, 12345 ^ 24680 = 24655, perché:
- 1 ^ 2 = 2
- 2 ^ 4 = 4
- 3 ^ 6 = 6
- 4 ^ 8 = 5
- 5 ^ 0 = 5
Se gli operandi hanno lunghezze diverse, riempire quello più corto con zeri iniziali.
La sfida
Scrivi, nel minor numero di byte possibile, un programma o una funzione che accetta come input due numeri interi (che possono essere considerati compresi tra 0 e 999 999 999 inclusi) e genera il "XOR decimale" dei due numeri come definito sopra.
Casi test
- 12345, 24680 → 24655
- 12345, 6789 → 16654
- 2019, 5779 → 5770
- 0, 999999999 → 999999999
- 0, 0 → 0
09un risultato accettabile per un input di 90, 99?
A^B^B=A
a^b=b^ae a^b^b=aper basi con uno strano divisore primo