From 56ccbfcb3236b732c3f51b7630c44613c0546643 Mon Sep 17 00:00:00 2001 From: Meehoi Date: Sat, 2 Oct 2021 18:23:18 +0700 Subject: [PATCH] chore: merge "Added DecimalToRoman" (#707) * Added DecimalToRoman * add explanation * added test --- Conversions/DecimalToRoman.js | 52 +++++++++++++++++++++++++ Conversions/test/DecimalToRoman.test.js | 13 +++++++ 2 files changed, 65 insertions(+) create mode 100644 Conversions/DecimalToRoman.js create mode 100644 Conversions/test/DecimalToRoman.test.js diff --git a/Conversions/DecimalToRoman.js b/Conversions/DecimalToRoman.js new file mode 100644 index 000000000..99c23567e --- /dev/null +++ b/Conversions/DecimalToRoman.js @@ -0,0 +1,52 @@ +/* + 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, + 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 +} + +export { decimalToRoman } diff --git a/Conversions/test/DecimalToRoman.test.js b/Conversions/test/DecimalToRoman.test.js new file mode 100644 index 000000000..59d25a1af --- /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') + }) +})