Istnieje 500 nieoficjalnych nagród za powtórzenie najlepszej najlepszej odpowiedzi .
Cel
Twoim celem jest pomnożenie dwóch liczb przy użyciu jedynie bardzo ograniczonego zestawu operacji arytmetycznych i przypisywania zmiennych.
- Dodanie
x,y -> x+y - Wzajemne
x -> 1/x( bez podziałux,y -> x/y) - Negacja
x -> -x( nie odejmowaniex,y -> x-y, choć można to zrobić jako dwie operacjex + (-y)) - Stała
1(niedozwolone są inne stałe, oprócz tych, które zostały wygenerowane przez operacje z1) - Zmienne przypisanie
[variable] = [expression]
Punktacja: wartości zaczynają się od zmiennych ai b. Twoim celem jest zapisanie ich produktu a*bw zmiennej cprzy użyciu jak najmniejszej liczby operacji. Każda operacja i przypisanie +, -, /, =kosztuje punkt (równoważnie, każde użycie (1), (2), (3) lub (4)). Stałe 1są bezpłatne. Wygrywa rozwiązanie o najmniejszej liczbie punktów. Tiebreak jest najwcześniejszym postem.
Dodatek: Twoje wyrażenie musi być poprawne arytmetycznie dla liczb „losowych” ai b. To może nie na środek zera podzbiór R 2 , czyli zestawu, który nie ma obszaru, jeśli wykreślone w a- bkartezjańskiej płaszczyźnie. (Jest to prawdopodobnie potrzebne ze względu na wzajemność wyrażeń, które mogą być 0podobne 1/a).
Gramatyka:
To jest golf atomowy . Żadne inne operacje nie mogą być użyte. W szczególności oznacza to brak funkcji, warunków, pętli lub nienumerycznych typów danych. Oto gramatyka dozwolonych operacji (możliwości są oddzielone |). Program jest sekwencją <statement>s, gdzie a <statement>podaje się następująco.
<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
W rzeczywistości nie musisz pisać kodu w tej dokładnej gramatyce, o ile jest jasne, co robisz, a liczba operacji jest prawidłowa. Na przykład, można napisać a-bdo a+(-b)i liczyć je jako dwie operacje, lub zdefiniować makra dla zwięzłości.
(Było poprzednie pytanie Mnożenie bez mnożenia , ale pozwoliło na znacznie luźniejszy zestaw operacji).
