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 a
i b
. Twoim celem jest zapisanie ich produktu a*b
w zmiennej c
przy 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 1
są 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” a
i 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
- b
kartezjańskiej płaszczyźnie. (Jest to prawdopodobnie potrzebne ze względu na wzajemność wyrażeń, które mogą być 0
podobne 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-b
do 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).