Aus dem Wikipedia-Artikel :
Die Ortsarithmetik (lateinisch arithmeticæ localis) ist das additive (nicht-positionsbezogene) binäre Zahlensystem, das John Napier in seiner Abhandlung Rabdology (1617) symbolisch und auf einem schachbrettartigen Gitter als Berechnungstechnik erforschte.
Was?
Mit Ortsziffern können Zahlen mit Buchstaben des Alphabets geschrieben werden.
Die Binärnotation war noch nicht standardisiert, weshalb Napier für die Darstellung von Binärzahlen sogenannte Positionsnummern verwendete. Das Napier-System verwendet die Zeichenwertnotation zur Darstellung von Zahlen. Es werden aufeinanderfolgende Buchstaben des englischen Alphabets verwendet, um aufeinanderfolgende Zweierpotenzen darzustellen: a = 2 ^ 0 = 1, b = 2 ^ 1 = 2, c = 2 ^ 2 = 4, d = 2 ^ 3 = 8, e = 2 ^ 4 = 16 und so weiter.
Ein Beispiel
ab = 1 + 2 = 3 in der Basis 10
aabb = 1 + 1 + 2 + 2 = 6 in der Basis 10
Beachten Sie, dass aabbdies bcdurch Ersetzen von 2 Instanzen eines Buchstabens durch eine höhere verkürzt werden kann .
Zusatz
Sie verketten einfach die beiden Zahlen und vereinfachen.
acd+ bde= acdbde= abcdde= acebe= abcf= 39in der Basis 10
Subtraktion
Entfernen Sie einfach alle Ziffern, die in beiden Teilen der Subtraktion gleich erscheinen. Das Erweitern (Konvertieren bin aa) kann erforderlich sein
abde- ad= be= 18 in der Basis 10
Multiplikation
Das ist etwas schwieriger.
Nehmen wir an, wir wollen acd(13) mit def(56) multiplizieren . Zuerst ordnen Sie acdvertikal an:
a
c
d
Dann fügen Sie defnach dem ersten hinzu a:
a def
c
d
Jetzt ist c 2 Stellen später im Alphabet als a, also addieren wir 2 Stellen im Alphabet, um defzu machen fgh. Das wird zur zweiten Zeile hinzugefügt.
a def
c fgh
d
Schließlich ist d 1 Stelle später im Alphabet als c, also addieren wir 1 Stelle im Alphabet, um fghzu machen ghi. Das wird der dritten Zeile hinzugefügt.
a def
c fgh
d ghi
Dann nimmst du die Summe von rechts: def+ fgh+ ghi= deffgghhi= deggghhi= deghhhi= deghii= deghj(728)
Ein weiteres Beispiel für die Multiplikation
Eingang:
bc * de
Zuerst:
b
c
Dann
b ef
c
Dann
b ef
c fg
Beachten Sie, dass wir efin der ersten Zeile notiert haben. Das liegt daran, dass es mit bcbeginnt bund bder zweite Buchstabe im Alphabet ist. Wir müssen also um einen deBuchstaben verschieben, damit es wird ef.
Dann
ef+fg
Ausgabe:
eh
Teilung
Dies ist nicht Teil dieser Herausforderung, da es sehr komplex werden kann.
Deine eigentliche Herausforderung
Ihr Programm oder Ihre Funktion muss Eingaben als Zeichenfolge annehmen, die wie folgt aussieht:
a + b
Und Sie müssen Folgendes ausgeben:
ab
Natürlich muss Ihr Programm oder Funktionsnummern beliebiger Länge unterstützen (bis auf den String oder Eingabegrenze Ihrer Sprache) mit einem der Betreiber +, -oder *. Einige weitere Beispiele:
Eingang:
ab + bd
Ausgabe:
acd
Eingang:
d - ab
Ausgabe:
ac
Eingang:
ab * cd
Ausgabe:
cf
Anmerkungen:
- Die Reihenfolge der Buchstaben in der Ausgabe spielt keine Rolle, aber Sie können immer davon ausgehen, dass die Reihenfolge der Buchstaben in den Zahlen in der Eingabe aufsteigend ist (a vor z).
- Sie können Eingaben mit einem nachgestellten Zeilenumbruch und Ausgaben mit einem nachgestellten Zeilenumbruch vornehmen.
- Sie können nicht Eingabe als eine Liste von nehmen
ab,*undbdfürab * bd. - Das englische Alphabet wird verwendet (
abcdefghijklmnopqrstuvwxyz) - Ihre Ausgabe muss vereinfacht werden (
aaist nicht erlaubt,bist erforderlich) - Die Eingabe wird vereinfacht (
b+c, nichtaa+bboderaa+aaaa) - Sie können einen Platz benötigen , bevor und den Betreiber (
+,-oder*), oder man kann es keine sein müssen. - Es wird nur einen Operator pro Eingabe geben.
- Sie können davon ausgehen, dass die Ausgabe und die Eingabe niemals über 2 ^ 27-1 (
abcdefghijklmnopqrstuvwxyz) hinausgehen werden. - Das ist Code-Golf , also gewinnt die kürzeste Antwort in Bytes!
bc*de==efghaber efghist 240nicht144
bc*desollte seineh
d is 2 positions later in the alphabet than cist das wright sollte es nicht sein1?That is added to the second row.im selben Satz, sollte es nicht seinthird?