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 von90, 99
?A^B^B=A
a^b=b^a
unda^b^b=a
für Basen mit einer ungeraden PrimteilerAntworten:
Jelly , 14 Bytes
Probieren Sie es online!
Gitter aller einstelligen Paare
Ein monadischer Link, der eine Liste mit zwei Ganzzahlen als Argument verwendet und eine Ganzzahl zurückgibt.
Erläuterung
Wenn eine Ziffernmatrix für die Eingabe / Ausgabe akzeptabel ist:
Gelee , 12 Bytes
Probieren Sie es online!
quelle
Pyth , 31 Bytes
Probieren Sie es online!
quelle
Python 2 , 71 Bytes
Probieren Sie es online!
quelle
Viertens (gviertens) , 111 Bytes
Probieren Sie es online!
Code-Erklärung
quelle
C # (Visual C # Interactive Compiler) , 75 Byte
6 Bytes dank @someone gespeichert
Probieren Sie es online!
quelle
Zip
können Sie es nicht verwenden, da es die längere Sammlung automatisch auf die Länge der kürzeren abschneidetPHP ,
111109 BytesProbieren Sie es online!
Tests: Online ausprobieren!
Wenn wir die Ziffern nennen wir XOR wollen,
$a
und$b
, fand ich , dass:$a
ist weniger als 5,XOR = min(9-$a, max($a, $b))
$a
ist gleich oder mehr als 5,XOR = min($a, max(9-$a, 9-$b))
Also habe ich diese Logik und einen Hack implementiert, um Zahlen mit unterschiedlichen Längen zu verarbeiten. Ich nehme jede Ziffer Form um das Ende beiden Eingangsnummern (mit negativer Indizes mag
input[-1]
,input[-2]
, ...) und die XOR berechnen und das Ergebnis in umgekehrter Reihenfolge in einem String setzen am Ende gedruckt werden. Da ich Ziffern vom Ende der Zahlen nehme, sollten die XOR-Ergebnisse in umgekehrter Reihenfolge zusammengestellt werden. Wenn einer der Eingänge länger als der andere ist, führt der negative Index für kürzere Eingänge zu einer leeren Zeichenfolge, die gleich 0 ist.quelle
Retina ,
8559 BytesProbieren Sie es online! Nimmt Eingaben als separate Zeilen, aber der Link ist eine Testsuite, die kommagetrennte Eingaben neu formatiert. Erläuterung:
Linkes Pad mit Nullen, beide Zeilen gleich lang.
Sortieren Sie jede Ziffer nach ihrem Spaltenindex und löschen Sie dann die neue Zeile. Dies hat den Effekt, dass die Ziffern auf die gleiche Weise wie bei einer Transponierung gepaart werden.
Bewerben Sie sich separat für jedes Ziffernpaar und fügen Sie die Ergebnisse zusammen.
Dupliziere das Paar.
Kehre die zweite Ziffer des ersten Paares und die erste Ziffer des zweiten um, so dass wir nun
x ~y
in der einen und~x y
in der anderen Zeile haben .Sortieren Sie die Ziffern jeder Zeile nacheinander, sodass die erste Ziffer jetzt
x & ~y
oder~x & y
entsprechend ist.Sortieren Sie die Zeilen in umgekehrter Reihenfolge.
Und extrahieren Sie die erste Ziffer, die das gewünschte Ergebnis ist.
quelle