JS

Created Diff never expires
3 removals
Words removed7
Total words235
Words removed (%)2.98
93 lines
3 additions
Words added7
Total words235
Words added (%)2.98
93 lines
function getNums(string) {
function getNums(string) {
return (string.split(/[\ \-\+\*\/]+/));
return (string.split(/[\ \-\+\*\/]+/));
}
}
function getOperator(string) {
function getOperator(string) {
let operatorIndex = string.search(/[-\+\*\/]/);
let operatorIndex = string.search(/[-\+\*\/]/);
return (string[operatorIndex]);
return (string[operatorIndex]);
}
}
function calc(nums, operator) {
function calc(nums, operator) {
nums.forEach(function(item) {
nums.forEach(function(item) {
if (item < 1 || item > 10) {
if (item < 1 || item > 10) {
throw new Error();
throw new Error();
}
}
});
});
switch (operator) {
switch (operator) {
case '-':
case '-':
return (nums[0] - nums[1]);
return (nums[0] - nums[1]);
case '+':
case '+':
return (Number(nums[0]) + Number(nums[1]));
return (Number(nums[0]) + Number(nums[1]));
case '*':
return (nums[0] * nums[1]);
case '/':
case '/':
return (nums[0] / nums[1]);
return (nums[0] / nums[1]);
case '*':
return (nums[0] * nums[1]);
default:
default:
throw new Error();
throw new Error();
}
}
}
}
function toArabic(roman) {
function toArabic(roman) {
roman = roman.toUpperCase();
roman = roman.toUpperCase();
let lookup = {
let lookup = {
I: 1,
I: 1,
V: 5,
V: 5,
X: 10,
X: 10,
L: 50,
L: 50,
C: 100,
C: 100,
D: 500,
D: 500,
M: 1000
M: 1000
},
},
arabic = 0,
arabic = 0,
i = roman.length;
i = roman.length;
while (i--) {
while (i--) {
if (lookup[roman[i]] < lookup[roman[i + 1]])
if (lookup[roman[1]] < lookup[roman[i + 1]])
arabic -= lookup[roman[i]];
arabic -= lookup[roman[i]];
else arabic += lookup[roman[i]];
else arabic += lookup[roman[i]];
}
}
return arabic;
return arabic;
}
}
function toRoman(num) {
function toRoman(num) {
let lookup = {
let lookup = {
M: 1000,
M: 1000,
CM: 900,
CM: 900,
D: 500,
D: 500,
CD: 400,
CD: 400,
C: 100,
C: 100,
XC: 90,
XC: 90,
L: 50,
L: 50,
XL: 40,
XL: 40,
X: 10,
X: 10,
IX: 9,
IX: 9,
V: 5,
V: 5,
IV: 4,
IV: 4,
I: 1
I: 1
},
},
roman = '',
roman = '',
i;
i;
for (i in lookup) {
for (i in lookup) {
while (num >= lookup[i]) {
while (num >= lookup[i]) {
roman += i;
roman += i;
num -= lookup[i];
num -= lookup[i];
}
}
}
}
return roman;
return roman;
}
}
function calculator(string) {
function calculator(string) {
let nums = getNums(string);
let nums = getNums(string);
if (nums.length != 2) throw new Error();
if (nums.length != 2) throw new Error();
let operator = getOperator(string);
let operator = getOperator(string);
let result;
let result;
if (Number(nums[0]) && Number(nums[1])) {
if (Number(nums[0]) && Number(nums[1])) {
result = Math.floor(calc(nums, operator));
result = Math.floor(calc(nums, operator));
} else
} else
if (!Number(nums[0]) && !Number(nums[1])) {
if (!Number(nums[0]) && !Number(nums[1])) {
let arabicNums = [toArabic(nums[0]), toArabic(nums[1])];
let arabicNums = [toArabic(nums[0]), toArabic(nums[1])];
result = toRoman(Number(calc(arabicNums, operator)));
result = toRoman(Number(calc(arabicNums, operator)));
} else {
} else {
throw new Error();
throw new Error();
}
}
return (String(result));
return (String(result));
}
}