dde272c4b8
i18n - Build Validation / Validate i18n Builds (24) (push) Has been cancelled
CI - Node.js / Lint (24) (push) Has been cancelled
CI - Node.js / Build (24) (push) Has been cancelled
CI - Node.js / Test (24) (push) Has been cancelled
CI - Node.js / Test - Upcoming Changes (24) (push) Has been cancelled
CI - Node.js / Test - i18n (italian, 24) (push) Has been cancelled
CI - Node.js / Test - i18n (portuguese, 24) (push) Has been cancelled
CD - Docker - GHCR Images / Build and Push Images (push) Has been cancelled
1.8 KiB
1.8 KiB
id, title, challengeType, dashedName
| id | title | challengeType | dashedName |
|---|---|---|---|
| 68adce01c0e1144d0a90295c | Challenge 28: Roman Numeral Parser | 28 | challenge-28 |
--description--
Given a string representing a Roman numeral, return its integer value.
Roman numerals consist of the following symbols and values:
| Symbol | Value |
|---|---|
| I | 1 |
| V | 5 |
| X | 10 |
| L | 50 |
| C | 100 |
| D | 500 |
| M | 1000 |
- Numerals are read left to right. If a smaller numeral appears before a larger one, the value is subtracted. Otherwise, values are added.
--hints--
parseRomanNumeral("III") should return 3.
assert.equal(parseRomanNumeral("III"), 3);
parseRomanNumeral("IV") should return 4.
assert.equal(parseRomanNumeral("IV"), 4);
parseRomanNumeral("XXVI") should return 26.
assert.equal(parseRomanNumeral("XXVI"), 26);
parseRomanNumeral("XCIX") should return 99.
assert.equal(parseRomanNumeral("XCIX"), 99);
parseRomanNumeral("CDLX") should return 460.
assert.equal(parseRomanNumeral("CDLX"), 460);
parseRomanNumeral("DIV") should return 504.
assert.equal(parseRomanNumeral("DIV"), 504);
parseRomanNumeral("MMXXV") should return 2025.
assert.equal(parseRomanNumeral("MMXXV"), 2025);
--seed--
--seed-contents--
function parseRomanNumeral(numeral) {
return numeral;
}
--solutions--
function parseRomanNumeral(numeral) {
const romanMap = {
I: 1,
V: 5,
X: 10,
L: 50,
C: 100,
D: 500,
M: 1000
};
let total = 0;
for (let i = 0; i < numeral.length; i++) {
const current = romanMap[numeral[i]];
const next = romanMap[numeral[i + 1]];
if (next && current < next) {
total -= current;
} else {
total += current;
}
}
return total;
}