Azi am rezolvat un bonfire care cere convertirea unui număr din decimal (arab) în latin: http://freecodecamp.com/challenges/bonfire-roman-numeral-converter și am vrut să reușesc pe cont propriu. Am avut nevoie totuși de câteva resurse ca să înțeleg mai bine algoritmul ce stă la baza conversiei și am dat peste exemplul următor: http://www.aivosto.com/visustin/sample/roman.pdf iar aici sunt câteva variante de rezolvare în mai multe limbaje de programare: http://rosettacode.org/wiki/Roman_numerals/Encode însă am ajuns și eu la același rezultat ca cel de pe http://wulkan.me/bonfire-roman-numeral-converter/ însă ideea era să ajung la un rezultat de genul https://github.com/StrongeLeeroy/freecodecamp-solutions/blob/master/bonfires/basic-algorithm-scripting/21-roman-number-converter.js
function convert(num) { var roman = ['I', 'V', 'X', 'L', 'C', 'D', 'M']; var decimal = [1, 5, 10, 50, 100, 500, 1000]; var closest = 1; var counter = 0; var temp = ""; console.log('Converting ' + num); if (decimal.indexOf(num) > 0) { return roman[decimal.indexOf(num)]; } for (var i = decimal.length - 1; i >= 0; i--) { if (num >= decimal[i] - 1) { closest = decimal[i]; break; } } if (num == closest - 1) { return 'I' + roman[decimal.indexOf(closest)]; } while (num % closest !== 0) { num--; counter++; } var amount = num / closest; for (var j = 0; j < amount; j++) { temp += roman[decimal.indexOf(closest)]; } if (counter !== 0){ return temp + convert(counter); } else { return temp; } } console.log(convert(29));
chiar dacă sunt mai multe linii de cod.
function convert(num) { var romans = ["M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"]; var decimals = [1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1]; var numarr = num.toString().split(''); var output = ''; for ( var i = 0; i < romans.length; i += 1 ) { while ( num >= decimals[i] ) { output += romans[i]; num -= decimals[i]; } } return output; } console.log(convert(116));