現在のベストアンサーに勝つための500人の非公式の賞金があります。
ゴール
目標は、非常に限られた算術演算と変数の割り当てのみを使用して2つの数値を乗算することです。
- 添加
x,y -> x+y
- 逆数
x -> 1/x
(除算ではないx,y -> x/y
) - 否定
x -> -x
(ない引き算x,y -> x-y
、次の2つの操作としてそれを行うことができますがx + (-y)
) - 定数
1
(他の定数は許可されません。ただし、からの操作によって生成されるものを除く1
) - 変数の割り当て
[variable] = [expression]
スコアリング:値は変数a
およびで始まりますb
。あなたの目標は、できるだけ少ない操作で製品a*b
を変数に保存するc
ことです。各操作と割り当てに+, -, /, =
はポイントがかかります((1)、(2)、(3)、または(4)を使用するたびに)。定数1
は無料です。最も少ないポイントのソリューションが勝ちます。タイブレークは最も早い投稿です。
手当:あなたの表現は、「ランダムな」実数a
とに対して算術的に正確でなければなりませんb
。これは、の尺度ゼロサブセットに失敗する可能性があるR 2にプロットされた場合に何の面積を有していない、すなわち集合a
- b
デカルト平面。(これが原因である可能性があります式の逆数に必要とされる可能性がある0
ように1/a
。)
文法:
これはatomic-code-golfです。他の操作は使用できません。特に、これは、関数、条件、ループ、または非数値データ型がないことを意味します。許可される操作の文法は次のとおりです(可能性はで区切られています|
)。プログラムは<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
実際に何をしているかが明確で、操作カウントが正しい限り、実際にこの正確な文法でコードを投稿する必要はありません。たとえば、2つの操作として記述a-b
しa+(-b)
てカウントしたり、簡潔にするためにマクロを定義したりできます。
(以前の質問Multiply without Multiplyがありましたが、はるかに緩やかな操作セットが許可されていました。)