C'è una generosità non ufficiale di 500 rappresentanti per battere la migliore risposta attuale .
Obbiettivo
Il tuo obiettivo è moltiplicare due numeri usando solo un insieme molto limitato di operazioni aritmetiche e assegnazione di variabili.
- aggiunta
x,y -> x+y
- Reciproco
x -> 1/x
( non divisionex,y -> x/y
) - Negazione
x -> -x
( non sottrazionex,y -> x-y
, sebbene sia possibile farlo come due operazionix + (-y)
) - La costante
1
(non sono consentite altre costanti, ad eccezione di quelle prodotte dalle operazioni da1
) - Assegnazione variabile
[variable] = [expression]
Punteggio: i valori iniziano in variabili a
e b
. Il tuo obiettivo è salvare il loro prodotto a*b
nella variabile c
usando il minor numero di operazioni possibile. Ogni operazione e assegnazione +, -, /, =
costa un punto (equivalentemente, ogni utilizzo di (1), (2), (3) o (4)). Le costanti 1
sono gratuite. Vince la soluzione con il minor numero di punti. Tiebreak è il primo post.
Indennità: la tua espressione deve essere aritmeticamente corretta per i reali "casuali" a
e b
. Può fallire su un sottoinsieme di zero di misura di R 2 , cioè un insieme che non ha area se tracciato nel piano a
- b
cartesiano. (È probabile che ciò sia necessario a causa dei reciproci di espressioni che potrebbero essere 0
simili 1/a
.)
Grammatica:
Questo è un golf a codice atomico . Non è possibile utilizzare altre operazioni. In particolare, ciò significa nessuna funzione, condizionali, loop o tipi di dati non numerici. Ecco una grammatica per le operazioni consentite (le possibilità sono separate da |
). Un programma è una sequenza di <statement>
s, dove a <statement>
è dato come segue.
<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
In realtà non è necessario inserire il codice in questa grammatica esatta, purché sia chiaro cosa stai facendo e il conteggio delle operazioni sia corretto. Ad esempio, è possibile scrivere a-b
per a+(-b)
e contare come due operazioni, o definire le macro per brevità.
(C'era una domanda precedente Moltiplica senza moltiplica , ma consentiva una serie di operazioni molto più rilassate.)