-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtest.js
More file actions
67 lines (60 loc) · 2.49 KB
/
test.js
File metadata and controls
67 lines (60 loc) · 2.49 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
//const digits = {X:10,IX:9,V:5,IV:4,I:1};
//
//function roman2arabic(str){
// if (!/^[IVX]+$/i.test(str)) throw new Error('Incorrect roman number format: ' + str)
// return str.toUpperCase().split('').reduce(function(r,v,i,arr){
// const [ a, b, c ] = [ digits[arr[i]], digits[arr[i+1]], digits[arr[i+2]]];
// if (b && c && a <= b && b < c)
// throw new Error('Incorrect roman number format: ' + str);
// return b > a ? r - a : r + a;
// }, 0)
//}
//
//function arabic2roman(num){
// if (!/^\-?\d+$/.test(num+'')) throw new Error('Can`t convert that arabic numeric to roman: ' + num)
// if (num < 1) return '';
// let result = '';
// for (let key in digits)
// while ( num >= digits[key] ) {
// result += key;
// num -= digits[key];
// }
// return result;
//}
//
//function calculator(string){
// let badChars = [];
// string = string.replace(/[^IVX\d+\-*\/]/gi, chr => {
// if (chr !== ' ') badChars.push(chr);
// return '';
// });
// if (badChars.length > 0)
// throw Error('Символы не допустимы: ' + badChars.join(' '));
// let isRoman = /^[IVX]+$/i,
// vars = string.split(/[+\-*\/]/g),
// action = string.match(/[+\-*\/]/)[0];
// if (vars.length !== 2)
// throw Error("Должно быть лишь два операнда");
// let r = vars.reduce((s,v)=> s + isRoman.test(v),0);
// if (r === 1)
// throw Error("Оба числа должны быть либо римскими, либо арабскими, исправьте выражение: " + string);
// else if (r === 2)
// vars = vars.map(v=>roman2arabic(v));
// else if (vars.reduce((s,v) => s + /^\d+$/.test(v)) < 2)
// throw Error("Приведенные операнды не допустимы, проверьте выражение: " + string);
// if (vars.some(v => v < 1 || v > 10))
// throw Error("Допустимо значение операндов лишь от 1 до 10 включительно")
// let result = Math.floor(eval(vars.join(action)))
// return r === 0 ? result.toString() : arabic2roman(result)
//}
function calculator(string){
const s = string
if(!isNaN(eval(s))) {
return parseInt(eval(s)).toString()
}
function decode(inputString){
const c = { I: 1, V: 5, X: 10, L: 50, C: 100, D: 500, M: 1000, Z: 2000 }
return inputString.toUpperCase().replace(/[^IVXLCDMZ()+\-*\.\/\d]/g, '').replace(/[IVXLCDMZ]{1,}/g, e => e.split('').reduce((r,v,i,arr) => c[arr[i+1]] && +c[arr[i+1]] > c[v] ? r - c[v] : r+c[v], 0))
}
alert(decode(s))
}