Создайте самую короткую функцию для преобразования строки римских цифр в целое число.
Правила для каждого письма можно найти на странице Википедии . Буквы выше 1000 будут иметь круглые скобки для обозначения их более высокого значения.
Требования:
- Необходимо преобразовать римские цифры от 1 до 500 000
- Должен завершиться менее чем за минуту
- Не использует встроенные функции, которые могут обеспечить преимущество (например, функция, которая преобразует римские цифры в целые числа)
- Это функция
Функция не должна поддерживать дроби. Любой неверный ввод должен возвращать число 0.
Кратчайшая функция выигрывает. В случае ничьей побеждает тот, у кого больше голосов.
Тестовые случаи
вход
III
Выход
3
вход
IIII
Выход
0
вход
XVI
Выход
16
вход
(C)(D)(L)MMI
Выход
452001
Неправильный для меня означает незаконный и, следовательно, должен вернуть 0.
—
Мартин Йорк
@Anon: число было опечаткой, когда я изменил исходный третий контрольный пример. Не нужно поддерживать неправильные формы, так как это будет считаться неверным вводом.
—
Кевин Браун
Стандартная практика (и спецификация дубликата этого вопроса) для недопустимого ввода неверного поведения. Поскольку этому вопросу четыре года и у него был только один ответ, следует ли нам изменить требования?
—
lirtosiast
@KevinBrown Я не вижу источника или объяснения в скобках. Я думаю, что вы должны изменить спецификацию, чтобы она соответствовала codegolf.stackexchange.com/q/16254/43319 и тогда ответы оттуда можно перенести сюда.
—
Адам
(C)(D)(L)MMI
было бы 452 001. Как вы получили свою ценность? Кроме того, нужно ли поддерживать «неправильные» формы (например,IC
вместоXCIX
)?