Mientras buscaba algo rápido para hacer durante una breve interrupción de Internet, escribí un código para convertir a números romanos y desde ellos. Una vez que las cosas volvieron a funcionar, busqué el código equivalente, pero solo encontré cosas que tenían varias páginas, limitaban el rango de lo que podía convertir, o ambas cosas. Pensé que también podría compartir lo que se me ocurrió:
function romanize (num) { if (!+num) return false; var digits = String(+num).split(''); var key = ['','C','CC','CCC','CD','D','DC','DCC','DCCC','CM', '','X','XX','XXX','XL','L','LX','LXX','LXXX','XC', '','I','II','III','IV','V','VI','VII','VIII','IX']; var roman = '', i = 3; while (i--) roman = (key[+digits.pop() + (i * 10)] || '') + roman; return Array(+digits.join('') + 1).join('M') + roman; } function deromanize (str) { var str = str.toUpperCase(); var validator = /^M*(?:D?C{0,3}|C[MD])(?:L?X{0,3}|X[CL])(?:V?I{0,3}|I[XV])$/; var token = /[MDLV]|C[MD]?|X[CL]?|I[XV]?/g; var key = {M:1000,CM:900,D:500,CD:400,C:100,XC:90,L:50,XL:40,X:10,IX:9,V:5,IV:4,I:1}; var num = 0, m; if (!(str && validator.test(str))) return false; while (m = token.exec(str)) num += key[m[0]]; return num; }
¿Cómo usted reescribir este código? ¿Puedes crear una versión más corta?