从维基百科文章:
位置算术(拉丁算术,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=以be18为底的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是字母表中的第二个字母,因此我们需要移动de1个字母,所以它变为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吗?