Из статьи Википедии :
Локальная арифметика (Latin arithmeticæ localis) - это аддитивные (непозиционные) двоичные системы счисления, которые Джон Нейпир исследовал как метод вычисления в своем трактате «Рабдология» (1617), как символически, так и на шахматной решетке.
Какая?
Расположение цифр - это способ написания чисел с использованием букв алфавита.
Двоичная запись еще не была стандартизирована, поэтому Нейпир использовал то, что он называл цифрами местоположения, для представления двоичных чисел. Система Нейпира использует нотацию знак-значение для представления чисел; он использует последовательные буквы английского алфавита для представления последовательных степеней двух: a = 2 ^ 0 = 1, b = 2 ^ 1 = 2, c = 2 ^ 2 = 4, d = 2 ^ 3 = 8, e = 2 ^ 4 = 16 и так далее.
Пример
ab
= 1 + 2 = 3 в базе 10
aabb
= 1 + 1 + 2 + 2 = 6 в базе 10
Обратите внимание, что aabb
это можно сократить bc
, заменив любые 2 экземпляра буквы на более высокий.
прибавление
Вы просто соединяете два числа и упрощаете.
acd
+ bde
= acdbde
= abcdde
= acebe
= abcf
= 39
в базе 10
Вычитание
Просто удалите все цифры, появляющиеся одинаково в обеих частях вычитания. Расширение (преобразование b
в aa
) может быть необходимым
abde
- ad
= be
= 18 в базе 10
умножение
Это немного сложнее.
Допустим, мы хотим умножить acd
(13) на def
(56). Сначала вы расположите acd
вертикально:
a
c
d
Затем вы добавляете def
после первого a
:
a def
c
d
Теперь c на 2 позиции в алфавите позже, чем a, поэтому мы добавляем 2 позиции в алфавите def
для создания fgh
. Это добавляется во второй ряд.
a def
c fgh
d
Наконец, d на 1 позицию в алфавите позже, чем c, поэтому мы добавляем 1 позицию в алфавите fgh
для создания ghi
. Это добавлено в третий ряд.
a def
c fgh
d ghi
Тогда вы берете сумму справа: def
+ fgh
+ ghi
= deffgghhi
= deggghhi
= deghhhi
= deghii
= deghj
(728)
Еще один пример умножения
Входные данные:
bc * de
Первый:
b
c
затем
b ef
c
затем
b ef
c fg
Обратите внимание, что мы записали ef
в первой строке. Это потому, что bc
начинается с b
, и b
является второй буквой в алфавите, поэтому нам нужно сместиться de
на 1 букву, чтобы она стала ef
.
затем
ef+fg
Выход:
eh
разделение
Это не является частью этой проблемы, потому что это может быть очень сложным.
Ваш актуальный вызов
Ваша программа или функция должна принимать входные данные в виде строки, которая выглядит следующим образом:
a + b
И вы должны вывести:
ab
Конечно, ваша программа или функция должна поддерживать число произвольной длины (до строки или входного предела вашего языка) с любым из операторов +
, -
или *
. Еще несколько примеров:
Входные данные:
ab + bd
Выход:
acd
Входные данные:
d - ab
Выход:
ac
Входные данные:
ab * cd
Выход:
cf
Заметки:
- Порядок букв в выходных данных не имеет значения, но вы всегда можете предположить, что порядок букв в цифрах на входе будет возрастать (от a до z).
- Вы можете получить ввод с завершающей новой строкой и вывод с завершающей новой строкой.
- Вы не можете принимать входные данные в виде списка
ab
,*
иbd
дляab * bd
. - Используется английский алфавит (
abcdefghijklmnopqrstuvwxyz
) - Ваш вывод должен быть упрощен (
aa
не разрешен,b
требуется) - Ввод будет упрощен (
b
+c
, а неaa
+bb
илиaa
+aaaa
) - Вам может потребоваться пробел до и оператор (
+
,-
или*
), или вы можете потребовать, чтобы их не было. - Для каждого входа будет только один оператор.
- Вы можете предположить, что вывод и ввод никогда не пройдут 2 ^ 27-1 (
abcdefghijklmnopqrstuvwxyz
) - Это код-гольф , поэтому выигрывает самый короткий ответ в байтах!
bc*de==efgh
но efgh
это 240
не144
bc*de
должно бытьeh
d is 2 positions later in the alphabet than c
это Райт? не должно ли это быть1
?That is added to the second row.
в том же предложении, не так лиthird
?