From 2336eeef9ebe154ea103597de0926ff9e53d4617 Mon Sep 17 00:00:00 2001 From: Kavindu Santhusa <63494497+Ksengine@users.noreply.github.com> Date: Mon, 21 Dec 2020 15:56:01 +0000 Subject: [PATCH 1/4] add integer to roman function simply added fastest method i found. --- conversions/roman_to_integer.py | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/conversions/roman_to_integer.py b/conversions/roman_to_integer.py index ce52b6fb7cbb..7738bbbbc253 100644 --- a/conversions/roman_to_integer.py +++ b/conversions/roman_to_integer.py @@ -21,6 +21,38 @@ def roman_to_int(roman: str) -> int: return total +def int_to_roman(number: int) -> str: + """ + Given a integer, convert it to an roman numeral. + https://en.wikipedia.org/wiki/Roman_numerals + >>> tests = {"III": 3, "CLIV": 154, "MIX": 1009, "MMD": 2500, "MMMCMXCIX": 3999} + >>> all(roman_to_int(value) == key for key, value in tests.items()) + True + """ + ROMAN = [ + (1000, "M"), + ( 900, "CM"), + ( 500, "D"), + ( 400, "CD"), + ( 100, "C"), + ( 90, "XC"), + ( 50, "L"), + ( 40, "XL"), + ( 10, "X"), + ( 9, "IX"), + ( 5, "V"), + ( 4, "IV"), + ( 1, "I"), + ] + result = [] + for (arabic, roman) in ROMAN: + (factor, number) = divmod(number, arabic) + result.append(roman * factor) + if number == 0: + break + return "".join(result) + + if __name__ == "__main__": import doctest From f3308e07b38ec62ae32f7ee3c787df6317f508ec Mon Sep 17 00:00:00 2001 From: Kavindu Santhusa <63494497+Ksengine@users.noreply.github.com> Date: Mon, 21 Dec 2020 15:59:04 +0000 Subject: [PATCH 2/4] Rename roman_to_integer.py to roman_numerals.py --- conversions/{roman_to_integer.py => roman_numerals.py} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename conversions/{roman_to_integer.py => roman_numerals.py} (100%) diff --git a/conversions/roman_to_integer.py b/conversions/roman_numerals.py similarity index 100% rename from conversions/roman_to_integer.py rename to conversions/roman_numerals.py From 3457beedfc94a379b38f00bf2e36ea218df8185a Mon Sep 17 00:00:00 2001 From: Kavindu Santhusa <63494497+Ksengine@users.noreply.github.com> Date: Mon, 21 Dec 2020 16:13:54 +0000 Subject: [PATCH 3/4] Update roman_numerals.py --- conversions/roman_numerals.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conversions/roman_numerals.py b/conversions/roman_numerals.py index 7738bbbbc253..1229edd02dc8 100644 --- a/conversions/roman_numerals.py +++ b/conversions/roman_numerals.py @@ -26,7 +26,7 @@ def int_to_roman(number: int) -> str: Given a integer, convert it to an roman numeral. https://en.wikipedia.org/wiki/Roman_numerals >>> tests = {"III": 3, "CLIV": 154, "MIX": 1009, "MMD": 2500, "MMMCMXCIX": 3999} - >>> all(roman_to_int(value) == key for key, value in tests.items()) + >>> all(int_to_roman(value) == key for key, value in tests.items()) True """ ROMAN = [ From 869b9dd1047b052eb3d636d9ef8b8780505aee98 Mon Sep 17 00:00:00 2001 From: Christian Clauss Date: Mon, 21 Dec 2020 22:15:57 +0100 Subject: [PATCH 4/4] Update roman_numerals.py --- conversions/roman_numerals.py | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/conversions/roman_numerals.py b/conversions/roman_numerals.py index 1229edd02dc8..9933e6a78a4d 100644 --- a/conversions/roman_numerals.py +++ b/conversions/roman_numerals.py @@ -31,18 +31,18 @@ def int_to_roman(number: int) -> str: """ ROMAN = [ (1000, "M"), - ( 900, "CM"), - ( 500, "D"), - ( 400, "CD"), - ( 100, "C"), - ( 90, "XC"), - ( 50, "L"), - ( 40, "XL"), - ( 10, "X"), - ( 9, "IX"), - ( 5, "V"), - ( 4, "IV"), - ( 1, "I"), + (900, "CM"), + (500, "D"), + (400, "CD"), + (100, "C"), + (90, "XC"), + (50, "L"), + (40, "XL"), + (10, "X"), + (9, "IX"), + (5, "V"), + (4, "IV"), + (1, "I"), ] result = [] for (arabic, roman) in ROMAN: