É o ano MDLXVII em um mundo em que o Império Romano nunca caiu e o colapso na idade das trevas nunca ocorreu. Devido ao longo período de Pax Romana, a estabilidade econômica do império permitiu que a tecnologia progredisse rapidamente.
Os romanos começaram a se interessar por circuitos e inventaram uma calculadora engenhosa que não requer o uso de um botão "igual". Eles chamam de "notação romana polonesa"
Para fazer um cálculo, eles inserem seus operandos primeiro, depois a operação.
Por exemplo, 100 + 11 * 20 seria C XI XX * +
.
Além disso
Os romanos descobriram que frequentemente precisam fazer vários cálculos ao mesmo tempo e preferem que o método retorne todos os valores "na pilha" em algum tipo de estrutura semelhante a matriz / lista / tupla. (por exemplo X I + X I - CC II +
, retornaria [11, 9, 202])
O desafio é desenvolver um programa de calculadora capaz de fazer esses cálculos.
Esclarecimento : Notação subtrativa é necessária. Eu não tinha percebido que não era uma característica reconhecida no império romano antigo. A tarefa era, portanto, ambígua, e peço desculpas.
Diretrizes mínimas
- Sua saída será em algarismos arábicos.
- Você só precisa converter de algarismos romanos para 5000.
- Você precisará oferecer suporte às operações +, -, /, * (adição, subtração, divisão e multiplicação).
- Se a divisão é baseada em ponto flutuante ou em número inteiro é específica da implementação. Ou funciona para esse desafio.
- Sua saída precisará suportar números de até 4 bilhões.
- Resposta mais curta no geral, E em cada idioma vence. Este é um desafio do Code Golf, mas eu adoro a variedade.
Em caso de empate, fatores como suporte para algarismos romanos acima de 5000 ou operações adicionais serão considerados os primeiros a serem vencidos.
Respostas:
Python 2 + romano , 118 bytes
Demo
Ele não pode ser testado on-line devido ao módulo usado, mas você pode ver como executá-lo aqui (um programa completo aceitando entrada de STDIN - uma expressão entre aspas) e imprimindo a saída em STDOUT - na forma de uma lista , a pilha). Usa uma versão um pouco mais antiga, porque não vou me preocupar em criar um novo GIF por apenas alguns bytes:
Para instalar o pacote, você pode executar o seguinte no Terminal / Linha de Comando:
fonte
pyTester/Py.py
Totally_ಠHaskell , 217 bytes
-13 bytes graças a Bruce Forte. -73 bytes graças a Ørjan Johansen.
Experimente online!
Implementação manual, yay!
fonte
l=1:4:5:9:map(10*)l
.SOGL V0.12 , 57 bytes
Experimente aqui!
fonte
JavaScript (Nó) + romanos + stk-lang , 74 bytes
Retorna uma lista de bigintegers.
Execução
Execute o seguinte:
Em seguida, cole a função. Exemplo:
fonte
$
e>
. Honestamente, eu gosto emboraDyalog APL , 93 bytes
Experimente online!
116 bytes sem o romano embutido
fonte
var fn←arr
- é equivalente avar ← var fn arr
. Aqui ele é usado em vários lugares,a,←⍵
sendo um que acrescenta⍵
à variávela
Python 3 ,
280206 bytesExperimente online!
Desta vez, com suporte a notação subtrativa. O método
c
é o principal ponto de entrada; o outro é apoio.Editar log:
fonte
if
eelse
.n+=v-n%v*2
str
usos. Experimente online!JavaScipt (ES6),
152151 bytesGuardado 1 byte graças a user202729
Casos de teste
Mostrar snippet de código
Explicação (menos golfe)
fonte
1e3
também funciona e salva alguns bytes.Geléia , 82 bytes
Experimente online!
Originalmente publicado no chat .
Explicação:
Como Jelly não tem uma pilha, coloquei a pilha no registro.
Quando o programa começa, o valor registo
®
é0
, que é tratada como[0]
para os efeitos deste programa.fonte
Python 3 ,
216187 bytesExperimente online!
Porque surgiu nos comentários da pergunta e desta resposta e provavelmente levou a votos negativos: esse envio não suporta notação subtrativa. Fundamentação da petição: A notação subtrativa raramente era usada no Império Romano e popularizada mais tarde (ver Notação subtrativa , parágrafo 3, última frase). A tarefa presume um Império Romano que desenvolveu circuitos integrados programáveis, não aquele que sofreu as mesmas mudanças culturais da Europa do século XIII. A descrição não menciona notação subtrativa e nenhum dos exemplos a utiliza.
fonte
CIV
(104).