有时使用多个输入来运行数学问题会很有用。这项挑战的目的是要编写一个简化此任务的程序。
产生数字的表达式
您必须支持3种类型的表达:
- 单一数字生成器:非常简单,只需一个文字数字
- 多数生成器:有点复杂。它们被方括号(
[])包围。数字,在表达式中用逗号()分隔。实例[-1,2,3.26]。 - 范围生成器:这是一个大括号(
{})包围。它将有3个数字,以逗号分隔。此表达式的格式为{start,stop,step}。start并且stop具有包容性。
评估规则
- 您必须支持操作顺序。(https://en.wikipedia.org/wiki/Order_of_operations#Definition)
- 您不需要支持括号。
- 表达式中可以出现任意数量的空格。
- 您必须支持浮点数(无论您的语言默认为哪种精度都可以)。
- 除以
0结果NaN(不是数字)。
您的程序必须支持乘法(*),除法(/),加法(+)和减法(-)。
输出量
输出的每一行都是生成器的组合之一。格式为表达式(将实数替换为表达式),后跟等号(=)和求值结果。生成器的所有组合都必须在输出中表示。
例子
(>>>表示输入)
>>>3 * [3,2]
3 * 3 = 9
3 * 2 = 6
>>>{1,2,3}
1 = 1 <-- this is because 1 + 3 > the end
>>>{0,2,1} + {0,1,1}
0 + 0 = 0
1 + 0 = 1
2 + 0 = 2
0 + 1 = 1
1 + 1 = 2
2 + 1 = 3
>>>6/[2,3]
6/2 = 3
6/3 = 2
>>>{1.5,2.5,0.5}
1.5 = 1.5
2 = 2
2.5 = 2.5
>>>3-{6,5,-1}
3-6 = -3
3-5 = -2
>>>5/{-1,1,1}
5/-1 = -5
5/0 = NaN
5/1 = 5
>>>4.4 / [1,2.2] + {0,2,1}
4.4 / 1 + 0 = 4.4
4.4 / 1 + 1 = 5.4
4.4 / 1 + 2 = 6.4
4.4 / 2.2 + 0 = 2
4.4 / 2.2 + 1 = 3
4.4 / 2.2 + 2 = 4
>>> [1,2] / 0 + 5
1 / 0 + 5 = NaN
2 / 0 + 5 = NaN
该程序必须简短,以便我可以记住它并在任何地方使用。
感谢@PeterTaylor和@geokavel在沙盒中为我提供的帮助
您必须支持浮点数(无论您的语言默认为哪种精度都可以)。如果我的语言仅支持整数算术怎么办?我可以声称我有零位十进制精度FP吗?
—
Digital Trauma
输入的混合范围和整数可以吗?
—
Maltysen
@DigitalTrauma我没想到那些语言。。。我会说不。
—
J Atkin
此外,是否会
—
马蒂森(Maltysen)2016年
x/0立即评估NaN,还是必须将NaN视为值?
@Maltysen Yep,我应该举个例子吗?
—
J Atkin