Arytmetyka lokalizacji (arytmetyka łacińska localis) to addytywne (nie-pozycyjne) układy liczb binarnych, które John Napier badał jako technikę obliczeniową w swoim traktacie Rabdology (1617), zarówno symbolicznie, jak i na szachownicy.
Co?
Cyfry lokalizacji to sposób wpisywania liczb za pomocą liter alfabetu.
Notacja binarna nie została jeszcze ustandaryzowana, więc Napier użył czegoś, co nazwał liczbami lokalizacji, do przedstawienia liczb binarnych. System Napiera używa notacji znak-wartość do reprezentowania liczb; używa kolejnych liter alfabetu angielskiego do reprezentowania kolejnych potęg dwóch: a = 2 ^ 0 = 1, b = 2 ^ 1 = 2, c = 2 ^ 2 = 4, d = 2 ^ 3 = 8, e = 2 ^ 4 = 16 i tak dalej.
Przykład
ab
= 1 + 2 = 3 w podstawie 10
aabb
= 1 + 1 + 2 + 2 = 6 w podstawie 10
Zauważ, że aabb
można to skrócić bc
, zastępując dowolne 2 wystąpienia litery wyższym.
Dodanie
Po prostu połącz dwie liczby i uprość.
acd
+ bde
= acdbde
= abcdde
= acebe
= abcf
= 39
w podstawie 10
Odejmowanie
Wystarczy usunąć wszystkie cyfry pojawiające się jednakowo w obu częściach odejmowania. Konieczne może być rozszerzenie (konwersja b
na aa
)
abde
- ad
= be
= 18 w podstawie 10
Mnożenie
To jest trochę trudniejsze.
Powiedzmy, że chcemy pomnożyć acd
(13) przez def
(56). Najpierw ustaw acd
pionowo:
a
c
d
Następnie dodajesz def
po pierwszym a
:
a def
c
d
Teraz c ma 2 pozycje później w alfabecie niż a, więc dodajemy 2 pozycje w alfabecie, def
aby zrobić fgh
. To jest dodawane do drugiego rzędu.
a def
c fgh
d
Wreszcie d jest o 1 pozycję później w alfabecie niż c, więc dodajemy 1 pozycję w alfabecie, fgh
aby zrobić ghi
. To jest dodawane do trzeciego rzędu.
a def
c fgh
d ghi
Następnie bierzesz sumę prawa: def
+ fgh
+ ghi
= deffgghhi
= deggghhi
= deghhhi
= deghii
= deghj
(728)
Kolejny przykład mnożenia
Wkład:
bc * de
Pierwszy:
b
c
Następnie
b ef
c
Następnie
b ef
c fg
Zauważ, że zapisaliśmy ef
w pierwszym wierszu. To dlatego, że bc
zaczyna się od b
, i b
jest drugą literą w alfabecie, więc musimy przesunąć de
o 1 literę, aby stała się ef
.
Następnie
ef+fg
Wydajność:
eh
Podział
To nie jest część tego wyzwania, ponieważ może stać się bardzo złożone.
Twoje rzeczywiste wyzwanie
Twój program lub funkcja musi przyjmować dane wejściowe jako ciąg znaków, który wygląda następująco:
a + b
I musisz wydać:
ab
Oczywiście, program lub funkcja musi obsługiwać numery dowolnej długości (do łańcucha lub wejściowego granicy języka) z żadnym z operatorów +
, -
lub *
. Kilka innych przykładów:
Wkład:
ab + bd
Wydajność:
acd
Wkład:
d - ab
Wydajność:
ac
Wkład:
ab * cd
Wydajność:
cf
Uwagi:
- Kolejność liter w danych wyjściowych nie ma znaczenia, ale zawsze można założyć, że kolejność liter w liczbach na wejściu będzie rosła (a przed z).
- Możesz pobierać dane wejściowe z końcowym znakiem nowej linii i dane wyjściowe z końcowym znakiem nowej linii.
- Być może nie wziąć wkład w postaci listy
ab
,*
abd
zaab * bd
. - Używany jest alfabet angielski (
abcdefghijklmnopqrstuvwxyz
) - Twój wynik musi być uproszczony (
aa
nie jest dozwolony,b
jest wymagany) - Wprowadzanie danych zostanie uproszczone (
b
+c
, nieaa
+bb
lubaa
+aaaa
) - Może wymagać przestrzeń przed i operatora (
+
,-
lub*
), lub może wymagać, aby istniała żadna. - Będzie tylko jeden operator na dane wejściowe.
- Możesz założyć, że dane wyjściowe i wejściowe nigdy nie przekroczą 2 ^ 27-1 (
abcdefghijklmnopqrstuvwxyz
) - To jest golf golfowy , więc wygrywa najkrótsza odpowiedź w bajtach!
bc*de==efgh
ale nie efgh
jest240
144
bc*de
powinno byćeh
d is 2 positions later in the alphabet than c
czy to jest wright? nie powinno być1
?That is added to the second row.
w tym samym zdaniu, prawdathird
?