Hay una recompensa no oficial de 500 repeticiones por vencer a la mejor respuesta actual .
Gol
Su objetivo es multiplicar dos números usando solo un conjunto muy limitado de operaciones aritméticas y asignación de variables.
- Adición
x,y -> x+y
- Recíproco
x -> 1/x
( no divisiónx,y -> x/y
) - Negación
x -> -x
( no restax,y -> x-y
, aunque puede hacerlo como dos operacionesx + (-y)
) - La constante
1
(no se permiten otras constantes, excepto las producidas por operaciones de1
) - Asignación variable
[variable] = [expression]
Puntuación: Los valores comienzan en variables a
y b
. Su objetivo es guardar su producto a*b
en la variable c
utilizando la menor cantidad de operaciones posible. Cada operación y asignación +, -, /, =
cuesta un punto (de manera equivalente, cada uso de (1), (2), (3) o (4)). Las constantes 1
son gratis. La solución con menos puntos gana. Tiebreak es la primera publicación.
Permiso: su expresión tiene que ser aritméticamente correcta para reales a
y "aleatorios" b
. Se puede fallar en un subconjunto medida en cero de R 2 , es decir, un conjunto que no tiene área si trazada en el a
- b
plano cartesiano. (Es probable que esto sea necesario debido a los recíprocos de expresiones que podrían ser 0
similares 1/a
).
Gramática:
Este es un código de golf atómico . No se pueden utilizar otras operaciones. En particular, esto significa que no hay funciones, condicionales, bucles o tipos de datos no numéricos. Aquí hay una gramática para las operaciones permitidas (las posibilidades están separadas por |
). Un programa es una secuencia de <statement>
s, donde a <statement>
se da de la siguiente manera.
<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
En realidad, no tiene que publicar código en esta gramática exacta, siempre que esté claro lo que está haciendo y su recuento de operaciones sea correcto. Por ejemplo, puede escribir a-b
para a+(-b)
, y considero como dos operaciones, o definir macros para mayor brevedad.
(Hubo una pregunta anterior Multiplicar sin Multiplicar , pero permitió un conjunto de operaciones mucho más flexible).