Introdução
Chega um momento na infância em que você pensa que dominou a adição e a multiplicação, então alguém aparece e informa que:
a * b + c = (a * b) + c! = a * (b + c),
e que não era um processo tão simples ou linear como você aprendeu anteriormente. Você aprende que existe algo chamado de ordem das operações . Essa é uma maneira muito importante de manter algum nível de consistência e de expressão, sem que os parênteses atrapalhem tudo.
História genérica
Um dia, você acorda com o som do pânico nas ruas. Um grupo extremista sob o nome " The 2560 " (abreviação de "Organização Contra a Ordem das Operações", com uma torção idiota do hexágono) usou seus métodos malignos para controlar todas as armas nucleares do mundo. Eles mantêm refém o planeta inteiro e têm uma demanda simples: inverter a ordem de operações aceita ou enfrentar a erradicação (os parênteses devem manter sua prioridade). O novo sistema é chamado PSADME (parênteses, subtração / adição, divisão / multiplicação, expoentes) e as expressões avaliam da direita para a esquerda:
a - b - c = a - (b - c) = a + c - b
Os dias passam e a transição está em andamento. Enquanto matemáticos e físicos estão todos ocupados reescrevendo suas equações, os cientistas da computação enfrentam a tarefa de mudar a maneira pela qual as expressões matemáticas são interpretadas pelos computadores. Você pertence a um grupo secreto de programação rebelde que visa causar tanto tormento aos novos senhores globais - e, por acaso, é selecionado aleatoriamente pelo The 2560 e encarregado de produzir o programa de cálculo de benchmark.
Sua missão
Escreva um programa (ou função) que use uma expressão matemática (numérica) como entrada e calcule a expressão usando PSADME como a ordem das operações e produz o resultado. As expressões devem avaliar da direita para a esquerda, então
Por simplicidade, todos os números fornecidos serão números inteiros e os cálculos produzirão resultados inteiros.
Regras e pontuação
- O programa deve aceitar entradas com até 128 caracteres - se o seu idioma / plataforma tiver um tamanho máximo de entrada máximo mais baixo, isso é uma desculpa aceitável.
- As brechas padrão são proibidas.
- O código vencedor será escolhido em 18 de novembro (quatro semanas a partir desta data de postagem).
- Sinta-se à vontade para publicar um código que não seria considerado digno de golfe. Isso é divertido. Se você tem uma maneira interessante de fazer isso, mas não pode jogar sozinho (ou pela natureza do seu método), você pode publicá-la de qualquer maneira.
Como de costume, o código vencedor é aquele com menor número de bytes, com alguns bônus de valor de entretenimento:
- -5 para evitar qualquer uso dos caracteres na expressão fornecida: + , - , ( , ) , ^ , * , /
- -5 para fazer os cálculos levar mais de 5 minutos (mas não mais que 10 minutos) para calcular em um computador padrão, sem que o método seja óbvio (usando o relógio ou loops desnecessários); O objetivo é convencer os novos senhores de que você não está tentando atrapalhar seus cálculos de destruição.
- - (5 + N) para que uma mensagem ofensiva direta (de tamanho N, sem incluir espaços em branco à esquerda / à direita) sobre os membros do The 2560 seja escrita à vista de todo o seu código, com algumas explicações ridículas sobre por que ele precisa ser há. Se for removido, o código não deve funcionar corretamente. Sim, pontos gratuitos pelo valor do entretenimento.
Exemplos e explicações
[program] 2 - 2 - 2
2
2 - (2 - 2) = 2
[program] (2 + 2 * 3 + 3) / 3 + 3
4
(4 * 6) / (3 + 3) = 4
[program] 3 + 2 + 1 ^ 3
216
(3 + 2 + 1) ^ 3 = 216
[program] -5^2
25
(-5) ^ 2 = 25
[program] 32 / 8 * 3 - 1
2
32 / (8 * (3-1)) = 32/16 = 2
P(SA)(DM)E
.
1 - 3 + 4 = 1 - 7
? Direita para a esquerda sugeriria isso, mas isso coloca a adição à frente da subtração, ao contrário do PSADME, não?