From 49d0630cdea41dde29f89526a0c4f34653fa70fa Mon Sep 17 00:00:00 2001 From: Meehoi Date: Sat, 2 Oct 2021 00:41:49 +0700 Subject: [PATCH 1/3] Added DecimalToRoman --- Conversions/DecimalToRoman.js | 46 +++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 Conversions/DecimalToRoman.js diff --git a/Conversions/DecimalToRoman.js b/Conversions/DecimalToRoman.js new file mode 100644 index 0000000000..e5197a20b3 --- /dev/null +++ b/Conversions/DecimalToRoman.js @@ -0,0 +1,46 @@ +const values = { + M: 1000, + CM: 900, + D: 500, + CD: 400, + C: 100, + XC: 90, + L: 50, + XL: 40, + X: 10, + IX: 9, + V: 5, + IV: 4, + I: 1 +} + +const orders = [ + 'M', + 'CM', + 'D', + 'CD', + 'C', + 'XC', + 'L', + 'XL', + 'X', + 'IX', + 'V', + 'IV', + 'I' +] + +function decimalToRoman (num) { + let roman = '' + for (var symbol of orders) { + while (num >= values[symbol]) { + roman += symbol + num -= values[symbol] + } + } + return roman +} + +console.log(decimalToRoman(34)) +console.log(decimalToRoman(28)) +console.log(decimalToRoman(2021)) From 167bc103ce4393755410c560b73d559842bd0c1c Mon Sep 17 00:00:00 2001 From: Meehoi Date: Sat, 2 Oct 2021 00:52:37 +0700 Subject: [PATCH 2/3] add explanation --- Conversions/DecimalToRoman.js | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Conversions/DecimalToRoman.js b/Conversions/DecimalToRoman.js index e5197a20b3..67efefdb84 100644 --- a/Conversions/DecimalToRoman.js +++ b/Conversions/DecimalToRoman.js @@ -1,3 +1,11 @@ +/* + Decimal To Roman + + This algorithm take decimal number and convert to roman numeral according to standard form (https://en.wikipedia.org/wiki/Roman_numerals#Description) + + Algorithm & Explanation : https://www.rapidtables.com/convert/number/how-number-to-roman-numerals.html +*/ + const values = { M: 1000, CM: 900, From 26b5b7c489ef258a41dc825b19a7f2a5d68673c8 Mon Sep 17 00:00:00 2001 From: Meehoi Date: Sat, 2 Oct 2021 17:35:31 +0700 Subject: [PATCH 3/3] added test --- Conversions/DecimalToRoman.js | 4 +--- Conversions/test/DecimalToRoman.test.js | 13 +++++++++++++ 2 files changed, 14 insertions(+), 3 deletions(-) create mode 100644 Conversions/test/DecimalToRoman.test.js diff --git a/Conversions/DecimalToRoman.js b/Conversions/DecimalToRoman.js index 67efefdb84..99c23567e2 100644 --- a/Conversions/DecimalToRoman.js +++ b/Conversions/DecimalToRoman.js @@ -49,6 +49,4 @@ function decimalToRoman (num) { return roman } -console.log(decimalToRoman(34)) -console.log(decimalToRoman(28)) -console.log(decimalToRoman(2021)) +export { decimalToRoman } diff --git a/Conversions/test/DecimalToRoman.test.js b/Conversions/test/DecimalToRoman.test.js new file mode 100644 index 0000000000..59d25a1af2 --- /dev/null +++ b/Conversions/test/DecimalToRoman.test.js @@ -0,0 +1,13 @@ +import { decimalToRoman } from '../DecimalToRoman' + +describe('decimalToRoman', () => { + it('expects to return correct roman numeral of given number', () => { + expect(decimalToRoman(34)).toBe('XXXIV') + }) + it('expects to return correct roman numeral of given number', () => { + expect(decimalToRoman(28)).toBe('XXVIII') + }) + it('expects to return correct roman numeral of given number', () => { + expect(decimalToRoman(2021)).toBe('MMXXI') + }) +})