Viele Programmiersprachen bieten Operatoren zum Manipulieren der binären (Basis-2) Ziffern von ganzen Zahlen. Hier ist eine Möglichkeit, diese Operatoren auf andere Basen zu verallgemeinern:
Lassen Sie x und y einem einstelligen Zahlen in der Basis sein B . Definieren Sie den unären Operator ~
und binäre Operatoren &
, |
und ^
so dass:
- ~ x = (B - 1) - x
- x & y = min (x, y)
- x | y = max (x, y)
- x ^ y = (x & ~ y) | (y & ~ x)
Beachten Sie, dass wir bei B = 2 die bekannten bitweisen Operatoren NOT, AND, OR und XOR erhalten.
Für B = 10 erhalten wir die "dezimale XOR" -Tabelle:
^ │ 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
Wenden Sie bei mehrstelligen Zahlen den einstelligen Operator ziffernweise an. Zum Beispiel 12345 ^ 24680 = 24655, weil:
- 1 ^ 2 = 2
- 2 ^ 4 = 4
- 3 ^ 6 = 6
- 4 ^ 8 = 5
- 5 ^ 0 = 5
Wenn die Operanden unterschiedlich lang sind, füllen Sie die kürzere mit führenden Nullen auf.
Die Herausforderung
Schreiben Sie in so wenigen Bytes wie möglich ein Programm oder eine Funktion, die zwei Ganzzahlen als Eingabe verwendet (wobei angenommen werden kann, dass sie zwischen 0 und 999 und 999 und 999 liegen) und das oben definierte „dezimale XOR“ der beiden Zahlen ausgibt.
Testfälle
- 12345, 24680 → 24655
- 12345, 6789 → 16654
- 2019, 5779 → 5770
- 0, 999999999 → 999999999
- 0, 0 → 0
09
ein akzeptables Ergebnis für eine Eingabe von 90, 99
?
A^B^B=A
a^b=b^a
und a^b^b=a
für Basen mit einer ungeraden Primteiler