Inspirado por esta resposta (ênfase minha):
Vamos jogar um jogo. Suponha que você tenha algum número x . Você começa com x e pode adicionar, subtrair, multiplicar ou dividir por qualquer número inteiro, exceto zero. Você também pode multiplicar por x . Você pode fazer essas coisas quantas vezes quiser. Se o total se tornar zero, você ganha.
Por exemplo, suponha que x seja 2/3. Multiplique por 3 e subtraia 2. O resultado é zero. Você ganha!
Suponha que x é 7 ^ (1/3). Multiplique por x , depois por x novamente e subtraia 7. Você ganha!
Suponha que x é √2 + √3. Aqui não é fácil ver como vencer. Mas acontece que se você multiplicar por x , subtrair 10, multiplicar por x duas vezes e adicionar 1, então você vence. (Isso não deve ser óbvio; você pode experimentá-lo com sua calculadora.)
Mas se você começar com x = π, não poderá vencer. Não há como ir de π a 0 se você adicionar, subtrair, multiplicar ou dividir por números inteiros ou multiplicar por π, independentemente de quantas etapas você executar. (Isso também não deveria ser óbvio. É uma coisa muito complicada!)
Números como √2 + √3 dos quais você pode ganhar são chamados algébricos . Números como π com os quais você não pode vencer são chamados transcendentais.
Por que isso é interessante? Cada número algébrico está relacionado aritmeticamente com os números inteiros, e os movimentos vencedores no jogo mostram como sim. O caminho para zero pode ser longo e complicado, mas cada passo é simples e existe um caminho. Mas os números transcendentais são fundamentalmente diferentes: eles não estão aritmeticamente relacionados aos números inteiros por meio de etapas simples.
Essencialmente, você usará as etapas usadas na pergunta citada acima para "vencer" o jogo para obter informações.
Dada uma constante algébrica real, x
converta o número em zero usando as seguintes operações permitidas:
- Adicione ou subtraia um número inteiro.
- Multiplique ou divida por um número inteiro diferente de zero.
- Multiplique pela constante original
x
.
Entrada é uma sequência que pode conter números inteiros, adição, subtração, multiplicação, divisão, exponenciação (sua escolha de **
ou ^
expoentes é usada para representar raízes) e parênteses. Os espaços na entrada são opcionais, mas não na saída. Você deve enviar as etapas necessárias para obter um resultado zero, multiplicando-se por 7
uma única saída como *7
. Um espaço à direita e / ou nova linha é permitido.
Exemplos
0 -> +0 (or any other valid, or empty)
5/7 + 42 -> -42 *7 -5 (or shorter: *7 -299)
2^(1/3) -> *x *x -2
5*(3**(1/4)) -> *x *x *x -1875
2^(1/2)+3^(1/2) -> *x -10 *x *x +1
O menor código vence.
x^4-10*x^2+1
. Veja WolframAlpha
0
os resultados precisam estar? Dada erros de arredondamento e precisão float, eu poderia facilmente ver situações problemáticas ...