Skip to content

Instantly share code, notes, and snippets.

@hakunin
Created October 8, 2010 13:27
Show Gist options
  • Save hakunin/616783 to your computer and use it in GitHub Desktop.
Save hakunin/616783 to your computer and use it in GitHub Desktop.
<html>
<head>
<body >
<script>
var map = [
[1000,'M'],
[500,'D'],
[100,'C'],
[50,'L'],
[10,'X'],
[5,'V'],
[1,'I']
];
// roman numbers in JS
var roman = function(n) {
var r = '';
var i = 0;
var smaller;
while (n > 0 && (i++ < 100)) {
for (var m = 0; m < map.length; m++) {
if (n >= map[m][0]) {
n -= map[m][0];
r += map[m][1];
break;
}
if (map[m+1] && (map[m+1][0]+'')[0] == '1') {
d = 1;
} else if (map[m+2] && (map[m+2][0]+'')[0] == '1') {
d = 2;
}
if (!!map[m+d] && (n >= (map[m][0]-map[m+d][0]))) {
n -= map[m][0]-map[m+d][0];
r += map[m+d][1]+map[m][1];
break;
}
}
}
return r;
}
test_roman = function(n, correct_roman) {
var r = roman(n);
if (r == correct_roman) {
console.log('PASS ', n , r, ' == ', correct_roman);
} else {
console.warn('FAIL ', n, r, ' != ', correct_roman);
}
}
/**/
test_roman(1, 'I');
test_roman(2, 'II');
test_roman(3, 'III');
test_roman(4, 'IV');
test_roman(5, 'V');
test_roman(6, 'VI');
test_roman(7, 'VII');
test_roman(8, 'VIII');
test_roman(9, 'IX');
test_roman(10, 'X');
test_roman(11, 'XI');
test_roman(12, 'XII');
test_roman(13, 'XIII');
test_roman(14, 'XIV');
test_roman(15, 'XV');
test_roman(16, 'XVI');
test_roman(17, 'XVII');
test_roman(369, 'CCCLXIX');
test_roman(448, 'CDXLVIII');
test_roman(890, 'DCCCXC');
/**/
</script>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment