Es el año MDLXVII en un mundo en el que el Imperio Romano nunca cayó, y el colapso en la edad oscura nunca ocurrió. Debido al extenso período de Pax Romana, la estabilidad económica del imperio permitió que la tecnología progresara a un ritmo rápido.
Los romanos han comenzado a incursionar en los circuitos y han inventado una calculadora ingeniosa que no requiere el uso de un botón "igual". Lo llaman "notación romana polaca"
Para hacer un cálculo, primero ingresan sus operandos, luego la operación.
Por ejemplo, 100 + 11 * 20 sería C XI XX * +
.
Adicionalmente
Los romanos han descubierto que a menudo necesitan hacer múltiples cálculos al mismo tiempo, y preferirían que el método devuelva cada valor "en la pila" en algún tipo de estructura tipo matriz / lista / tupla. (por ejemplo X I + X I - CC II +
, devolvería [11, 9, 202])
El desafío es desarrollar un programa de calculadora capaz de realizar estos cálculos.
Aclaración : se requiere notación sustractiva. No me había dado cuenta de que no era una característica reconocida en el antiguo imperio romano. La tarea, por lo tanto, era ambigua, y me disculpo.
Pautas mínimas
- Su salida estará en números arábigos.
- Solo necesita convertir de números romanos hasta 5000.
- Deberá admitir operaciones +, -, /, * (suma, resta, división y multiplicación).
- Si la división está basada en coma flotante o en número entero es específica de la implementación. Cualquiera de los dos funciona para este desafío.
- Su producción deberá admitir números de hasta 4 mil millones.
- La respuesta más corta en general, Y gana en cada idioma. Este es un Code Golf Challenge pero me encanta la variedad.
En caso de empate, se considerarán factores como el soporte para números romanos superiores a 5000 u operaciones adicionales, la primera entrega ganará.
Respuestas:
Python 2 + romano , 118 bytes
Manifestación
No se puede probar en línea debido al módulo que utiliza, pero puede ver cómo ejecutar esto aquí (un programa completo que acepta la entrada de STDIN, una expresión con comillas, e imprime la salida en STDOUT) en forma de lista , la pila). Utiliza una versión un poco más antigua, porque no me molestaré en crear un nuevo GIF para solo unos pocos bytes:
Para instalar el paquete, puede ejecutar lo siguiente en la Terminal / Línea de comando:
fuente
pyTester/Py.py
ಠ_ಠHaskell , 217 bytes
-13 bytes gracias a Bruce Forte. -73 bytes gracias a Ørjan Johansen.
Pruébalo en línea!
Implementación manual, yay!
fuente
l=1:4:5:9:map(10*)l
.SOGL V0.12 , 57 bytes
Pruébalo aquí!
fuente
JavaScript (Nodo) + romanos + stk-lang , 74 bytes
Devuelve una lista de bigintegers.
Ejecución
Ejecute lo siguiente:
Luego pegue la función. Ejemplo:
fuente
$
y>
. Sinceramente, me gusta, sin embargoDyalog APL , 93 bytes
Pruébalo en línea!
116 bytes sin el romano incorporado
fuente
var fn←arr
: es equivalente avar ← var fn arr
. Aquí se usa en varios lugares,a,←⍵
siendo uno que se agrega⍵
a la variablea
Python 3 ,
280206 bytesPruébalo en línea!
Esta vez con soporte de notación sustractiva. El método
c
es el principal punto de entrada; El otro es el apoyo.Editar registro:
fuente
if
yelse
.n+=v-n%v*2
str
usos. Pruébalo en línea!Javascipt (ES6),
152151 bytesGuardado 1 byte gracias a user202729
Casos de prueba
Mostrar fragmento de código
Explicación (menos golf)
fuente
1e3
también funciona y guarda algunos bytes.Gelatina , 82 bytes
Pruébalo en línea!
Publicado originalmente en el chat .
Explicación:
Como Jelly no tiene una pila, puse la pila en el registro.
Cuando se inicia el programa, el valor de registro
®
es0
, que se trata como[0]
a los fines de este programa.fuente
Python 3 ,
216187 bytesPruébalo en línea!
Debido a que surgió en los comentarios tanto de la pregunta como de esta respuesta y probablemente condujo a votos negativos: esta presentación no admite la notación sustractiva. Justificación: la notación sustractiva rara vez se usó en el Imperio Romano y solo se popularizó más tarde (ver Notación sustractiva , párrafo 3, última oración). La tarea supone un Imperio Romano que desarrolló circuitos integrados programables, no uno que experimentó los mismos cambios culturales que la Europa del siglo XIII. La descripción no menciona la notación sustractiva y ninguno de los ejemplos la usa.
fuente
CIV
(104).