Створіть найкоротшу функцію для перетворення рядка римських цифр у ціле число.
Правила для кожного листа можна знайти на сторінці Вікіпедії . Літери вище 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
)?