目标
您的目标是仅使用一组非常有限的算术运算和变量赋值将两个数相乘。
- 加成
x,y -> x+y
- 倒数
x -> 1/x
(非除法x,y -> x/y
) - 求反
x -> -x
(不是减法x,y -> x-y
,尽管您可以通过两个操作来完成x + (-y)
) - 常数
1
(不允许其他常数,除非由的操作产生1
) - 变量分配
[variable] = [expression]
评分:值以变量a
和开始b
。您的目标是使用尽可能少的操作将其产品保存a*b
到变量中c
。每个操作和分配都+, -, /, =
花费一个点(等效地,每次使用(1),(2),(3)或(4))。常量1
是免费的。最少的解决方案获胜。Tiebreak是最早的帖子。
允许:您的表达式必须在算术上对“随机”实数a
和正确b
。它可能在R 2的零测量子集上失败,即,如果在a
- b
笛卡尔平面中绘制,则该集合没有面积。(由于0
类似的表达式的倒数,可能需要这样做1/a
。)
语法:
这是一个原子代码高尔夫。不得使用其他操作。特别是,这意味着没有函数,条件,循环或非数字数据类型。这是允许的操作的语法(可能性用分隔|
)。程序是<statement>
s 的序列,其中a <statement>
如下所示。
<statement>: <variable> = <expr>
<variable>: a | b | c | [string of letters of your choice]
<expr>: <arith_expr> | <variable> | <constant>
<arith_expr>: <addition_expr> | <reciprocal_expr> | <negation_expr>
<addition_expr>: <expr> + <expr>
<reciprocal_expr>: 1/(<expr>)
<negation_expr>: -<expr>
<constant>: 1
只要您清楚自己在做什么并且您的操作数正确,您实际上就不必在此确切的语法中编写代码。例如,您可以将其编写a-b
为a+(-b)
两个操作并将其计为两个操作,或者为简洁起见定义宏。
(之前有一个问题“ 不带乘”的“乘”,但是它允许一组更宽松的操作。)