Commit c758a898 authored by Illia Baida's avatar Illia Baida

Updated Converter

parent 7d9cf822
...@@ -20,19 +20,19 @@ export default class Converter { ...@@ -20,19 +20,19 @@ export default class Converter {
} }
static _isSignDescribesDecimalGroup(sign) { static _isSignDescribesDecimalGroup(sign) {
return String(this.Dictionary[sign]).substring(0, 1) === "5"; return String(this.Dictionary[sign]).substring(0, 1) !== "5";
} }
static _extractRomanSign(sign, value) { static _extractRomanSign(sign, value) {
const upperDictionaryValue = this.Dictionary[ const upperDictionaryValue = this.Dictionary[
this._dictionaryNames[this._dictionaryNames.indexOf(sign) - 1] this._dictionaryNames[this._dictionaryNames.indexOf(sign) - 1]
]; ];
if ( if (
value / this.Dictionary[sign] >= 1 && value / this.Dictionary[sign] >= 1 &&
(value / upperDictionaryValue < 1 || upperDictionaryValue === undefined) (value / upperDictionaryValue < 1 || upperDictionaryValue === undefined)
) { ) {
console.log('extract', sign, value); console.log("extract", sign, value);
return value - this.Dictionary[sign]; return value - this.Dictionary[sign];
} else { } else {
return false; return false;
...@@ -60,6 +60,17 @@ export default class Converter { ...@@ -60,6 +60,17 @@ export default class Converter {
return dictionary; return dictionary;
} }
static _formatExpression() {}
static _multiplyString(str, times) {
let res = "";
for (let i = 0; i < times; i++) {
res += str;
}
return res;
}
static toRoman(decimalValue) { static toRoman(decimalValue) {
let romanExpression = ""; let romanExpression = "";
this._decimalToPropagate = decimalValue; this._decimalToPropagate = decimalValue;
...@@ -69,7 +80,52 @@ export default class Converter { ...@@ -69,7 +80,52 @@ export default class Converter {
{} {}
); );
console.log(calculatedDictionary); console.log("calculatedDictionary", calculatedDictionary);
const skippedNames = [];
for (let index = 0; index < this._dictionaryNames.length; index++) {
const sign = this._dictionaryNames[index];
if(skippedNames.indexOf(sign) !== -1){
console.log('skipping', sign);
continue;
}
if (sign in calculatedDictionary) {
if (this._isSignDescribesDecimalGroup(sign)) {
if (calculatedDictionary[sign] > this._maxDecimalGroupSigns) {
const upperName = this._dictionaryNames[index - 1];
const result = upperName
? `${sign}${upperName}`
: this._multiplyString(sign, calculatedDictionary[sign]);
romanExpression += result;
} else {
romanExpression += this._multiplyString(
sign,
calculatedDictionary[sign]
);
}
} else {
const lowerName = this._dictionaryNames[index + 1];
const upperName = this._dictionaryNames[index - 1];
if (calculatedDictionary[sign] <= 1) {
if (calculatedDictionary[lowerName] > this._maxDecimalGroupSigns) {
const result = `${lowerName}${upperName}`;
romanExpression += result;
} else {
romanExpression += `${sign}${this._multiplyString(
lowerName,
calculatedDictionary[lowerName]
)}`;
// skip
skippedNames.push(lowerName);
}
} else {
throw new Error("Cannot be greater than 1");
}
}
}
}
return romanExpression; return romanExpression;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment