Есть 500 представителей неофициальной награды за лучший текущий ответ .
Цель
Ваша цель - умножить два числа, используя только очень ограниченный набор арифметических операций и присваивание переменных.
- прибавление
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)
и считать это как две операции, или определить макросы для краткости.
(Был предыдущий вопрос « Умножение без умножения» , но он позволял значительно более свободный набор операций.)