Cree la función más corta para convertir una cadena de números romanos en un número entero.
Las reglas para cada letra se pueden encontrar en la página de Wikipedia . Las letras por encima de 1,000 tendrán paréntesis alrededor de ellas para indicar su valor más alto.
Requisitos:
- Debe convertir los números romanos del 1 al 500,000
- Debe completarse en menos de un minuto.
- No utiliza funciones integradas que podrían proporcionar una ventaja (Ej: Una función que convierte números romanos en enteros)
- Es una funcion
La función no necesita admitir fracciones. Cualquier entrada no válida debe devolver el número 0.
La función más corta gana. En caso de empate, gana el que tenga más votos.
Casos de prueba
Entrada
III
Salida
3
Entrada
IIII
Salida
0
Entrada
XVI
Salida
16
Entrada
(C)(D)(L)MMI
Salida
452001
Incorrecto para mí significa ilegal y, por lo tanto, debería devolver 0.
—
Martin York
@Anon: El número era un tipo incorrecto de cuando cambié el tercer caso de prueba original. No necesita admitir formularios incorrectos, ya que se consideraría una entrada no válida.
—
Kevin Brown
La práctica estándar (y la especificación del duplicado de esta pregunta) es que la entrada no válida sea un comportamiento indefinido. Dado que esta pregunta tiene cuatro años y solo tenía una respuesta, ¿deberíamos cambiar los requisitos?
—
lirtosiast
@KevinBrown No veo una fuente o explicación para las letras entre paréntesis. Creo que debería cambiar la especificación para que coincida con codegolf.stackexchange.com/q/16254/43319 y luego las respuestas desde allí se pueden migrar aquí.
—
Adám
(C)(D)(L)MMI
serían 452.001. ¿Cómo obtuviste tu valor? Además, ¿esto debe admitir formas "incorrectas" (por ejemplo, enIC
lugar deXCIX
)?