Há uma recompensa não oficial de 500 representantes por vencer a melhor resposta atual .
Objetivo
Seu objetivo é multiplicar dois números usando apenas um conjunto muito limitado de operações aritméticas e atribuição de variáveis.
- Adição
x,y -> x+y
- Recíproco
x -> 1/x
( não divisãox,y -> x/y
) - Negação
x -> -x
( não subtraçãox,y -> x-y
, embora você possa fazer isso como duas operaçõesx + (-y)
) - A constante
1
(nenhuma outra constante é permitida, exceto como produzida pelas operações de1
) - Atribuição variável
[variable] = [expression]
Pontuação: Os valores começam nas variáveis a
e b
. Seu objetivo é salvar o produto a*b
na variável c
usando o mínimo de operações possível. Cada operação e atribuição +, -, /, =
custa um ponto (equivalentemente, cada uso de (1), (2), (3) ou (4)). As constantes 1
são gratuitas. A solução com menos pontos ganha. O desempate é o primeiro post.
Permissão: Sua expressão deve estar aritmeticamente correta para reais a
e "aleatórios" b
. Ele pode falhar num subconjunto medida de zero de R 2 , isto é, um conjunto que não tem nenhuma área se representados graficamente na a
- b
plano cartesiano. (É provável que isso seja necessário devido a recíprocas de expressões que possam ser 0
semelhantes 1/a
.)
Gramática:
Este é um código-atômico-golfe . Nenhuma outra operação pode ser usada. Em particular, isso significa que não há funções, condicionais, loops ou tipos de dados não numéricos. Aqui está uma gramática para as operações permitidas (as possibilidades são separadas por |
). Um programa é uma sequência de <statement>
s, onde a <statement>
é dada da seguinte maneira.
<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
Na verdade, você não precisa postar código nesta gramática exata, desde que fique claro o que você está fazendo e sua contagem de operações esteja correta. Por exemplo, você pode escrever a-b
para o a+(-b)
e contá-lo como duas operações, ou definir macros para brevidade.
(Havia uma pergunta anterior Multiplicar sem Multiplicar , mas permitia um conjunto de operações muito mais flexível.)