从维基百科文章:
位置算术(拉丁算术,localis)是加法(非位置)二进制数字系统,约翰·纳皮尔在其《犹太论》(1617)中将其作为一种计算技术进行了符号和棋盘状网格的探索。
什么?
位置数字是一种使用字母书写数字的方式。
二进制符号尚未标准化,因此Napier使用他所谓的位置数字来表示二进制数字。Napier的系统使用符号值表示法来表示数字。它使用英语字母表中的连续字母来表示2的连续幂:a = 2 ^ 0 = 1,b = 2 ^ 1 = 2,c = 2 ^ 2 = 4,d = 2 ^ 3 = 8,e = 2 ^ 4 = 16,依此类推。
一个例子
ab
=以10为基数的1 + 2 = 3
aabb
= 1 + 1 + 2 + 2 = 6(以10为底)
注意 aabb
可以bc
通过将一个字母的任意两个实例替换为一个较高的字母来简化为。
加成
您只需将两个数字连接起来并简化。
acd
+ bde
= acdbde
= abcdde
= acebe
= abcf
=39
以10为底
减法
只需删除在减法的两个部分中均出现的所有数字。可能需要扩展(转换b
为aa
)
abde
- ad
=以be
18为底的18
乘法
这有点难。
假设我们想将acd
(13)乘以def
(56)。首先,您acd
垂直排列:
a
c
d
然后def
在第一个之后添加a
:
a def
c
d
现在,c在字母表中比a落后2个位置,因此我们在字母表中添加2个位置def
以使fgh
。那被添加到第二行。
a def
c fgh
d
最后,d在字母表中比c落后1个位置,因此我们在字母表中加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
笔记:
- 输出中字母的顺序无关紧要,但是您始终可以假定输入中数字字母的顺序将递增(在z之前是a)。
- 您可以使用尾随换行符作为输入,并使用尾随换行符作为输出。
- 你可能不接受输入的列表
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
吗?