Il existe une prime non officielle de 500 représentants pour avoir battu la meilleure réponse actuelle .
Objectif
Votre objectif est de multiplier deux nombres en utilisant seulement un ensemble très limité d'opérations arithmétiques et d'affectation de variables.
- Une addition
x,y -> x+y
- Réciproque
x -> 1/x
( pas divisionx,y -> x/y
) - Négation
x -> -x
( pas de soustractionx,y -> x-y
, bien que vous puissiez le faire en deux opérationsx + (-y)
) - La constante
1
(aucune autre constante n'est autorisée, sauf si elle est produite par les opérations de1
) - Affectation variable
[variable] = [expression]
Scoring: Les valeurs commencent par des variables a
et b
. Votre objectif est de sauvegarder leur produit a*b
dans la variable en c
utilisant le moins d'opérations possible. Chaque opération et affectation +, -, /, =
coûte un point (de manière équivalente, chaque utilisation de (1), (2), (3) ou (4)). Les constantes 1
sont gratuites. Le moins de points solution gagne. Tiebreak est le premier post.
Allocation: Votre expression doit être arithmétiquement correcte pour les réels a
et "aléatoires" b
. Il peut échouer sur un sous - ensemble mesure zéro de R 2 , à savoir un ensemble qui n'a pas de zone si elles sont tracées dans le a
- b
plan cartésien. (Cela sera probablement nécessaire en raison de la réciproque d'expressions pouvant 0
ressembler à 1/a
.)
Grammaire:
C'est un code de code atomique . Aucune autre opération ne peut être utilisée. En particulier, cela signifie aucune fonction, condition, boucle ou type de données non numérique. Voici une grammaire pour les opérations autorisées (les possibilités sont séparées par |
). Un programme est une séquence de <statement>
s, où a <statement>
est donné comme suit.
<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
Vous n'avez pas réellement besoin de poster du code dans cette grammaire exacte, tant que ce que vous faites est clair et que le nombre d'opérations est correct. Par exemple, vous pouvez écrire a-b
pour a+(-b)
et compter comme deux opérations, ou définir des macros par souci de concision.
(Il y avait une question précédente Multiplier sans multiplier , mais cela permettait un ensemble d'opérations beaucoup plus souple.)