Recentemente, eu escrevi um novo idioma . Para evitar a necessidade de lidar com a ordem das operações , simplesmente parênteses pare cada expressão corretamente para evitar isso completamente.
Como os parênteses estão nos códigos de caracteres 40 a 41, seu código precisará ser o mais curto possível.
Exemplos
1+2*3
(1+(2*3))
2*(3+4)
(2*(3+4))
2*3/4+3
(((2*3)/4)+3)
342*32/8
((342*32)/8)
Regras
As únicas operações que você precisará manipular são: *
(multiplicação), /
(divisão), +
(adição) e -
(subtração).
- A ordem das operações é:
- Parêntese
- Multiplicação, Divisão
- Adição, Subtração
- Você deve preferir ir esquerda-direita
- Os números de entrada sempre serão números inteiros positivos (ver bônus)
Bónus
-20% se você lida com negação:
3+-5
(3+(-5))
-5% se você permitir que espaços sejam colocados dentro da entrada:
3 + 4
(3+4)
-10% se você puder manipular casas decimais na entrada:
1+.12
(1+.12)
1+0.21/3
(1+(0.21/3))
Recompensa 500: se você conseguir escrever uma resposta em Sem nome / Blocos
code-golf
arithmetic
balanced-string
Downgoat
fonte
fonte
1+2+3+4
(que certas soluções podem estar entre parênteses como((1+2)+(3+4))
) #Respostas:
Python, 153 * 0,9 = 137,7 bytes
Este programa lida com entrada decimal.
A segunda linha começa com um espaço, a segunda começa com uma guia, a terceira com duas guias e a terceira com um espaço. Isso salvou um byte. Aqui está um hexdump (
xxd
pp):Aqui está um programa que eu usei para testar: (Salve o programa acima como
paren.py
)Verifique se o seu terminal usa o
\033[38;5;<COL>m
código de escape para cores.fonte
prefer to go left-right
. Experimente o caso de teste 3 no OP, seu resultado não está correto. Isso pode ser um problema real , por exemplo, com aritmética inteira((2*(3/4))+3)
(((2*3)/4)+3)
JavaScript (ES6) 179 (263 -20% -5% -10%)
Como as outras duas respostas estão erradas, postarei as minhas. É uma variação do analisador de expressão que usei aqui e aqui e em outro lugar. Procure aqui explicações mais detalhadas sobre algoritmos.
É bastante volumoso, mas deve funcionar.
Snippet de teste
fonte
Python, 241 * 0,8 * 0,95 * 0,9 = 164,84 caracteres
Estou usando a biblioteca ast (Abstract Syntax Trees) e um dict de substituição de string de homebrew. A substituição da corda custa muito, mas o bônus ajuda a manter a pontuação um pouco baixa. Talvez (a peça de substituição da corda) possa ser jogada ainda mais.
Observe que esta solução adiciona um conjunto extra de parênteses em torno de cada número, mas acho que isso está dentro do espírito da pergunta
Suíte de teste:
Saída do conjunto de testes:
fonte
import ast
no seu código