Існує 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)
і порахувати його як дві операції або визначити макроси для стислості.
(Було попереднє запитання Множити без множення , але це дозволило набагато втратити набір операцій.)