Входные данные:
Целое число
Выход:
- Сначала преобразуйте целое число в его эквивалент римской цифрой.
- Затем преобразуйте каждую заглавную букву этого римского числа в десятичное значение ASCII / UNICODE.
- И выведите сумму тех.
Пример:
1991 -> MCMXCI -> 77+67+77+88+67+73 -> 449
^ input ^ output
Римские цифры: Вот, возможно, полезный конвертер римских цифр.
Правила соревнований:
- Применяются стандартные правила римской цифры, поэтому нет альтернативных форм, таких как
IIII
илиVIIII
вместоIV
иIX
. * - Линии Макрона над римскими цифрами после 1000
¯
(Юникод № 175). Таким образом, одна строка считается как+175
и две как+350
. - Вам разрешено использовать любой тип ввода и вывода, если он представляет целые числа.
- Тестовые случаи будут в диапазоне
1 - 2,147,483,647
.
* Правила римских цифр (цитата из Википедии):
Числа формируются путем объединения символов и добавления значений,
II
равно как два (два) иXIII
тринадцать (десять и три). Поскольку каждая цифра имеет фиксированное значение, а не представляет собой кратные десять, сто и т. Д., В соответствии с положением, нет нужды в «хранении мест» нулей, как в числах, таких как 207 или 1066; эти числа записываются какCCVII
(две сотни, пять и два) иMLXVI
(тысяча, пятьдесят, десять, пять и один).Символы располагаются слева направо в порядке значения, начиная с наибольшего. Однако в некоторых конкретных случаях, чтобы избежать повторения четырех символов подряд (например,
IIII
илиXXXX
), вычитающая запись часто используется следующим образом:
I
ставится передV
илиX
указывает на один меньше, поэтому четыре - этоIV
(один меньше пяти), а девять -IX
(один меньше десяти)X
передL
илиC
указывает на десять меньше, поэтому сорокXL
(десять меньше пятидесяти) и девяностоXC
(десять меньше ста)C
помещается передD
илиM
указывает на сотню меньше, поэтому четыреста - этоCD
(сто меньше пятисот), а девятьсот - этоCM
(сто меньше тысячи).
Например,MCMIV
это одна тысяча девятьсот четыре, 1904 (M
это тысяча,CM
это девятьсотIV
четыреНекоторые примеры современного использования римских цифр включают в себя:
1954 какMCMLIV
; 1990 какMCMXC
; 2014 какMMXIV
ИСТОЧНИК
Основные правила:
- Это код-гольф , поэтому выигрывает самый короткий ответ в байтах.
Не позволяйте языкам кода-гольфа отговаривать вас от публикации ответов на языках, не относящихся к кодексу. Попробуйте придумать как можно более короткий ответ для «любого» языка программирования. - К вашему ответу применяются стандартные правила , поэтому вы можете использовать STDIN / STDOUT, функции / метод с правильными параметрами, полные программы. Ваш звонок.
- По умолчанию лазейки запрещены.
- Если возможно, добавьте ссылку с тестом для вашего кода.
- Также, пожалуйста, добавьте объяснение, если это необходимо.
Тестовые случаи:
100 -> 67
1 -> 73
4 -> 159
22 -> 322
5000 -> 261
2016 -> 401
1000000000 -> 427
1991 -> 449
9999 -> 800
1111111111 -> 2344
2147483647 -> 5362
источник
9999
->M(X)CMXCIX
->77+263+67+77+88+67+73+88
->800
и2147483647
->((MMCXLV)MMCDLXXX)MMMDCXLVII
->427+427+417+438+426+436 + 252+252+242+243+251+263+263+263 + 77+77+77+68+67+88+76+86+73+73
->5362
. Я исправил второе, но это9999
было правильно.2222222222
не находится в заданном диапазоне. Также я согласен с5362
.Ответы:
Mathematica,
181173166151 байтGolfed
Ungolfed
RomanNumeral
Реализация Mathematica дает (IX) CMXCIX для 9999, и поэтому программа возвращает 971 для этого числа.Как написано, римская цифра типа ((...)) (...) ... возвращает вложенный список кодов ASCII для римских цифр длины 4, ((...)) ... возвращает список длины 3, (...) ... возвращает список длины 2 и ... возвращает список длины 1. Последняя строка преобразует эти правила в соответствующее число макронов для каждого раздела list, добавляет эти макроны, а затем суммирует весь вложенный список, чтобы вернуть выходные данные.
источник
Python 3,
281278273269 байтМоя первая попытка на Codegolf, здесь мы идем. Пытался сделать это, не глядя на связанный вопрос, так что, наверное, ужасно :)
На 8 байтов меньше благодаря Габору Фекете
Ungolfed:
источник
return 0 if n==0 else
наreturn 0if n<1else
f
в гольф имеет вызовы, когда имя функцииg
.n//9*10>=10*l
на,n//9>=l
чтобы сохранить еще немного.Рубин, 188 байт
Адаптация, основанная на моем старом ответе Ruby для преобразования римских чисел . Попробуйте онлайн!
источник
Mathematica, 198 байт
К сожалению, встроенные функции здесь не сильно помогают, хотя я уверен, что это можно сделать гораздо лучше.
Примечание: оценивает
9999 -> 971
согласно здесь .источник
Пакетный, 373 байта
Работает путем перевода каждой цифры числа в соответствии с таблицей перекодировки для значений 1, 4, 5 и 9. использованию
M(V)
,M(X)
,(M(V))
и(M(X))
. Если вы предпочитаете(IV)
,(IX)
,((IV))
а((IX))
затем использоватьcall:l 77 509 261 511
иcall:l 252 859 436 861
соответственно.источник
JavaScript (ES6), 183 байта
Примечание: не только предпочитает ,
(IV)
чтобыM(V)
, но и предпочитает ,(VI)
чтобы(V)M
; на самом деле он будет использовать только М в самом начале числа.источник
Python, 263 байта
источник
R, 115 байт
Итак ... Я публикую свое решение, потому что нахожу вопрос довольно интересным. Я сделал все возможное с R «s потенциала для борьбы с римскими цифрами без пакетов: Вы можете только ввести числа между
1
и3899
, так какas.roman
» s документации объясняет.Вот почему я обманул немного, давая диапазон между
1
к в петле:это длина отвыхода «s (). На самом деле, согласно этому сайту , самое длинное римское число (14 символов), что соответствует11
14
for
as.roman(3899)
MMMDCCCXCIX
MMDCCCLXXXVIII
2888
.Кроме того, вы не можете вычислить
length
выход этой функции.Если кто-то видит решение для решения вышеуказанных проблем, пожалуйста, не стесняйтесь комментировать.
источник
Python 3, 315 байт
Безголовая версия:
Объяснение: этой версии используется другой подход, он подсчитывает вхождения римских цифр в число.
[abs(((n-4)%5)-1)]
числоI
s в римской цифре.[((n+10**g)//(10**g*5))%2for g in r(10)]
это числоV,L,D,(V),(L),(D),((V)),((L)),((D))
s в числе.[(n%(10**g*5))//(10**g*4)+max((n%(10**g*5)%(10**g*4)+10**(g-1))//(10**g),0)for g in r(1,10)]
это числоX,C,M,(X),(C),(M),((X)),((C)),((M))
s в числе.Затем он умножает вхождения на значение символа и возвращает его сумму.
источник