Из статьи Википедии :
Локальная арифметика (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?