Você deve escrever um programa que avalie uma sequência que seria inserida em uma calculadora avançada.
O programa deve aceitar entrada usando stdin e gerar a resposta correta. Para idiomas que não têm funções para aceitar stdin, você pode assumir as funções readLine
e print
lidar com essas tarefas.
Requisitos:
- Não usa nenhum tipo de função "eval"
- Pode lidar com ponto flutuante e números negativos
- Suporta pelo menos os operadores +, -, *, / e ^
- Suporta colchetes e parênteses para substituir a ordem normal
- Pode manipular entrada contendo um ou mais espaços entre os operadores e números
- Avalia a entrada usando a ordem padrão de operações
Casos de teste
Entrada
10 - 3 + 2
Saída
9
Entrada
8 + 6 / 3 - 7 + -5 / 2.5
Saída
1
Entrada
4 + [ ( -3 + 5 ) * 3.5 ] ^ 2 - 12
Saída
41
.0
no final, se forem inteiros? Além disso: qual a precisão da calculadora (em relação à precisão do ponto flutuante e outras)?.0
no final. Não tenho muita certeza da precisão, mas mais é melhor.Respostas:
C ++,
640583Recuado
Meu primeiro código de golfe, estou ansioso por comentários e críticas!
fonte
using namespace std
e uma função principal não está realmente bem, está?PHP -
394354312 caracteresRecuado:
fonte
Postscript, 446
Isso usa o algoritmo de desvio de jarda.
Sem jogar golfe e comentou:
TODO : Associatividade correta da exponenciação
fonte
Python 2 ,
339335 bytesExperimente online!
fonte
Postscript,
1000695665494Roubou idéias de ThomasW.
Recurso adicionado: aceita seqüências de caracteres com ou sem espaços ao redor dos operadores.[recurso removido]O uso
ARGUMENTS
é mais curto%stdin
e mais fácil de testar, para inicializar!Simplificou a substituição para substituir apenas parênteses por parênteses.
Código:
Ungolfed e comentou:
fonte