📖 Scenario: Imagine you are building a simple tool that converts Roman numerals into regular numbers. This is useful in many places like clocks, book chapters, or movie sequels.
🎯 Goal: You will create a program that takes a Roman numeral string and converts it into its integer value step-by-step.
📋 What You'll Learn
Create a dictionary to map Roman numerals to their integer values
Create a variable to hold the total integer value
Use a loop to process each character and apply Roman numeral rules
Print the final integer value
💡 Why This Matters
🌍 Real World
Roman numerals are used in clocks, book chapters, movie titles, and legal documents. Converting them to integers helps computers understand and process these values.
💼 Career
Understanding how to map symbols to values and apply rules is a key skill in programming. This project builds skills in dictionaries, loops, and conditional logic used in many software tasks.
Progress0 / 4 steps
1
Create Roman Numeral Map
Create a dictionary called romanMap that maps these Roman numerals to integers: 'I': 1, 'V': 5, 'X': 10, 'L': 50, 'C': 100, 'D': 500, 'M': 1000.
DSA Typescript
Hint
Use an object with keys as Roman letters and values as numbers.
2
Create Total Variable and Input
Create a variable called total and set it to 0. Also create a variable called roman and set it to the string 'MCMXCIV'.
DSA Typescript
Hint
Initialize total to zero and set roman to the example Roman numeral.
3
Convert Roman Numeral to Integer
Use a for loop with variable i from 0 to roman.length - 2. Inside the loop, get the current value from romanMap[roman[i]] and the next value from romanMap[roman[i + 1]] if it exists. If the current value is less than the next value, subtract the current value from total. Otherwise, add the current value to total. After the loop, add the value of the last character to total.
DSA Typescript
Hint
Remember to check the next character to decide if you add or subtract.
4
Print the Result
Write console.log(total) to display the integer value of the Roman numeral.
DSA Typescript
Hint
The Roman numeral 'MCMXCIV' equals 1994.
Practice
(1/5)
1. What is the main rule to convert Roman numerals to integers?
easy
A. Add values of symbols, subtract if a smaller symbol is before a larger one
B. Multiply all symbol values together
C. Add values only if symbols are the same
D. Subtract all symbol values from 1000
Solution
Step 1: Understand Roman numeral rules
Roman numerals are converted by adding values of symbols, but if a smaller value comes before a larger one, it is subtracted.
Step 2: Apply the rule to conversion
For example, IV is 5 - 1 = 4, not 1 + 5 = 6.
Final Answer:
Add values of symbols, subtract if a smaller symbol is before a larger one -> Option A
Quick Check:
Roman to integer = add/subtract values [OK]
Hint: Subtract when smaller symbol precedes larger one [OK]
Common Mistakes:
Always adding values without subtraction
Multiplying symbol values
Ignoring order of symbols
2. Which TypeScript syntax correctly defines a function to convert Roman numerals to integers?
easy
A. def romanToInt(s): return 0
B. function romanToInt(s: string): number { return 0; }
C. func romanToInt(s string) int { return 0 }
D. romanToInt = (s) => { return '0'; }
Solution
Step 1: Identify TypeScript function syntax
TypeScript functions use the syntax: function name(params): returnType { body }
Step 2: Match correct syntax
function romanToInt(s: string): number { return 0; } matches TypeScript syntax with parameter type and return type specified.
Final Answer:
function romanToInt(s: string): number { return 0; } -> Option B
Quick Check:
TypeScript function syntax = function romanToInt(s: string): number { return 0; } [OK]
Hint: Use 'function name(params: type): returnType' in TypeScript [OK]
Common Mistakes:
Using Python or Go syntax in TypeScript
Returning string instead of number
Missing type annotations
3. What is the output of this TypeScript code?
function romanToInt(s: string): number {
const map: {[key: string]: number} = {I:1, V:5, X:10, L:50, C:100, D:500, M:1000};
let total = 0;
for(let i = 0; i < s.length; i++) {
const current = map[s[i]];
const next = map[s[i+1]] || 0;
if(current < next) total -= current;
else total += current;
}
return total;
}
console.log(romanToInt('IX'));
medium
A. 11
B. 4
C. 9
D. Error
Solution
Step 1: Trace the loop for 'IX'
For 'I' (1) and next 'X' (10), since 1 < 10, subtract 1. For 'X' (10), no next, add 10.
Step 2: Calculate total
Total = -1 + 10 = 9.
Final Answer:
9 -> Option C
Quick Check:
'IX' = 9 [OK]
Hint: Subtract if current < next, else add [OK]
Common Mistakes:
Adding all values without subtraction
Off-by-one error in loop
Not handling last character correctly
4. Find the bug in this TypeScript code for Roman to Integer conversion:
function romanToInt(s: string): number {
const map = {I:1, V:5, X:10, L:50, C:100, D:500, M:1000};
let total = 0;
for(let i = 0; i <= s.length; i++) {
const current = map[s[i]];
const next = map[s[i+1]] || 0;
if(current < next) total -= current;
else total += current;
}
return total;
}
medium
A. Return type should be string, not number
B. map object keys should be lowercase
C. Use 'var' instead of 'let' for i
D. Loop condition should be i < s.length, not i <= s.length
Solution
Step 1: Check loop boundary
The loop runs from i = 0 to i <= s.length, which causes s[i] to be undefined at last iteration.
Step 2: Correct loop condition
Change to i < s.length to avoid accessing undefined index.
Final Answer:
Loop condition should be i < s.length, not i <= s.length -> Option D
Quick Check:
Loop boundary off-by-one error fixed [OK]
Hint: Use i < length to avoid out-of-bounds access [OK]
Common Mistakes:
Using <= instead of < in loops
Wrong case for map keys
Incorrect return type
5. Given the Roman numeral string 'MCMXCIV', what integer does the following TypeScript function return?
function romanToInt(s: string): number {
const map: {[key: string]: number} = {I:1, V:5, X:10, L:50, C:100, D:500, M:1000};
let total = 0;
for(let i = 0; i < s.length; i++) {
const current = map[s[i]];
const next = map[s[i+1]] || 0;
if(current < next) total -= current;
else total += current;
}
return total;
}
console.log(romanToInt('MCMXCIV'));