Зі статті Вікіпедії :
Арифметична локація (лат. Arithmeticæ localis) - це додаткова (не позиційна) двійкова система числення, яку Джон Нап'є досліджував як техніку обчислень у своєму трактаті «Рабдологія» (1617), як символічно, так і на шаховій дошці.
Що?
Локальні цифри - це спосіб написання чисел за допомогою букв алфавіту.
Бінарні позначення ще не були стандартизовані, тому Нап'є використовував те, що він називав цифрами місцеположення, для позначення двійкових чисел. Система Napier використовує позначення знакових знаків для представлення чисел; він використовує послідовні літери з англійського алфавіту для подання послідовних сил двох: 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
, замінивши будь-які два екземпляри листа на більш високий.
Доповнення
Ви просто з'єднаєте два числа і спростіть.
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
?