Ciprian Țepeș - Creștin Ortodox, Web Designer & Web Developer

Un site personal cu subiecte legate de programare, design, creștinism și chestiuni morale

  • Prima pagină
  • Cine sunt
  • Contact

Categorii

  • Cugetări
  • Generalități
  • Jurnal Programare
  • Muncă

Articole recente

  • Ceea ce ne desfată, ne dăunează
  • Despre malahie / onanie / masturbare
  • Adevărul vă va face liberi
  • Nu toate ereziile au devenit biserici. Una este Biserica – Sfântă, Sobornicească, Apostolească
  • Un articol foarte frumos despre familie și educație

Powered by Genesis

  • Prima pagină
  • Cine sunt
  • Contact

Convertire număr decimal în latin

17 octombrie 2015 by Ciprian Țepeș

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));

Filed Under: Jurnal Programare Tagged With: FreeCodeCamp, Javascript

Acest site folosește cookie-uri. Accept Info
Privacy & Cookies Policy