如果您已经读过卡尔·萨根(Carl Sagan)的《接触》一书,这个挑战对您来说似乎很熟悉。
给定一组数学方程式的输入,该数学方程式由一个数字,一个未知算子,另一个数字和结果组成,推论出哪些算子表示加,减,乘或除。
每个输入方程将始终包含
- 非负整数
- 一个字母
A
,B
,C
,或者D
- 另一个非负整数
- 性格
=
- 最终非负整数
连接在一起。例如,可能的输入是1A2=3
,从中可以推断出A
表示加法的值。每个整数都将满足0 ≤ x ≤ 1,000
。
但是,它并不总是那么简单。之间可能存在歧义:
5A0=5
:加/减1A1=1
:乘法/除法0A5=0
:乘法/除法2A2=4
:加法/乘法4A2=2
:减法/除法0A0=0
:加/减/乘
等等。面临的挑战是如何利用这种能力来缩小选择范围,并结合消除过程来弄清楚每个字母代表什么运算符。(将始终至少有一个输入方程式,并且始终可以使用一个运算符将输入中使用的每个字母唯一地唯一匹配。)
例如,假设输入为以下方程式:
0A0=0
:这会将A缩小为加,减或乘(不能除以0)。10B0=10
:B必须是加法或减法。5C5=10
:C显然是加法,这使B减,这使A乘法。
因此,输出为这些输入方程应当匹配A
与*
,B
与-
,和C
用+
。
输入可以以单个空格/逗号分隔的字符串或字符串数组的形式给出,每个字符串表示一个方程式。输出可以是单个字符串("A*B-C+"
),数组(["A*", "B-", "C+"]
)或类似字典/字典的2D数组({"A": "*", ...}
或[["A", "*"], ...]
)。
您可以假设一个数字永远不会被另一个不可分割的数字除(因此,您不必担心除法是浮点数还是截断法)。
由于这是代码高尔夫球,因此以字节为单位的最短代码为准。
测试用例:
In Out
-------------------------------
0A0=0 10B0=10 5C5=10 A*B-C+
100D100=10000 D*
4A2=2 4B2=2 0A0=0 A-B/
15A0=15 4B2=2 2C2=0 A+B/C-
1A1=1 0A0=0 A*
0A0=0 2A2=4 5B0=5 2B2=4 A*B+
2A2=4 0C0=0 5B0=5 5A0=5 A+B-C*
0A1000=0 4A2=2 A/