Bir var 500 rep gayri resmi ödül döven mevcut en iyi cevabı .
Hedef
Amacınız, yalnızca çok sınırlı bir aritmetik işlem kümesi ve değişken ataması kullanarak iki sayıyı çarpmak.
- İlave
x,y -> x+y - Karşılıklı
x -> 1/x( bölünme değilx,y -> x/y) - Olumsuzluk
x -> -x( çıkarma değilx,y -> x-y, iki işlem yapmanıza rağmenx + (-y)) - Sabit
1(işlemlerin ürettiği durumlar dışında başka sabitlere izin verilmez1) - Değişken atama
[variable] = [expression]
Puanlama: Değerler değişkenlerde başlar ave b. Amacınız , mümkün olduğu kadar az işlem kullanarak ürünlerini a*bdeğişkene kaydetmek c. Her işlem ve ödev +, -, /, =bir puan alır (eşdeğer olarak, (1), (2), (3) veya (4) 'ün her kullanımı). Sabitler 1ücretsizdir. En az sayıdaki çözüm kazanır. Tiebreak en eski yazıdır.
Ödenek: Sizin ifadesi "rastgele" reals aritmetik olarak doğru olmak zorundadır ave b. Bu ölçer sıfır alt-başarısız olabilir R 2 , grafiksel olarak, eğer bir alana sahiptir, yani, bir dizi a- bKartezyen düzlemde. (Bunun nedeni olabilir ifadelerin tersinin için gerekli olması muhtemeldir 0gibi 1/a.)
Dilbilgisi:
Bu bir atom kodlu golf . Başka hiçbir işlem kullanılamaz. Özel olarak, bu, fonksiyon, koşul, döngü veya sayısal olmayan veri tipleri anlamına gelmez. İşte izin verilen işlemler için bir gramer (olasılıklar ile ayrılmıştır |). Bir program, aşağıdaki gibi verilen <statement>bir s dizisidir <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
Ne yaptığınız ve işlem sayınızın doğru olduğu açık olduğu sürece, aslında tam olarak bu dilbilgisine kod göndermek zorunda değilsiniz. Örneğin, yazabilir a-biçin a+(-b)ve iki operasyonlar gibi saymak veya kısalık için makro tanımlar.
(Önceki bir çarpma olmadan Çarpma sorusu vardı , ancak daha gevşek bir işlem kümesine izin verdi.)
