mirror of
https://github.com/flynx/types.js.git
synced 2025-10-28 18:10:08 +00:00
104 lines
2.4 KiB
JavaScript
104 lines
2.4 KiB
JavaScript
|
|
/**********************************************************************
|
||
|
|
*
|
||
|
|
*
|
||
|
|
**********************************************/ /* c8 ignore next 2 */
|
||
|
|
((typeof define)[0]=='u'?function(f){module.exports=f(require)}:define)
|
||
|
|
(function(require){ var module={} // make module AMD/node compatible...
|
||
|
|
/*********************************************************************/
|
||
|
|
|
||
|
|
var object = require('ig-object')
|
||
|
|
|
||
|
|
|
||
|
|
//---------------------------------------------------------------------
|
||
|
|
|
||
|
|
var NumberMixin =
|
||
|
|
module.NumberMixin =
|
||
|
|
object.Mixin('NumberMixin', 'soft', {
|
||
|
|
toAlpha: function(n, alpha='abcdefghijklmnopqrstuvwxyz'){
|
||
|
|
var res = ''
|
||
|
|
var base = alpha.length
|
||
|
|
do{
|
||
|
|
res = alpha[n % base] + res
|
||
|
|
n = Math.floor(n/base) - 1
|
||
|
|
}while(n >= 0)
|
||
|
|
return res },
|
||
|
|
fromAlpha: function(str, alpha='abcdefghijklmnopqrstuvwxyz'){
|
||
|
|
var res = 0
|
||
|
|
var base = alpha.length
|
||
|
|
var i = 0
|
||
|
|
for(var c of [...str].reverse()){
|
||
|
|
var val = alpha.indexOf(c) + 1
|
||
|
|
res += val * (base ** i++) }
|
||
|
|
return res-1 },
|
||
|
|
|
||
|
|
toRoman: function(n){
|
||
|
|
var index = {
|
||
|
|
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 res = ''
|
||
|
|
for(var R in index){
|
||
|
|
while(n >= index[R]){
|
||
|
|
res += R
|
||
|
|
n -= index[R] } }
|
||
|
|
return res },
|
||
|
|
fromRoman: function(str){
|
||
|
|
var index = {
|
||
|
|
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 n = 0
|
||
|
|
str = str.toUpperCase()
|
||
|
|
while(str != ''){
|
||
|
|
if(str.slice(0, 2) in index){
|
||
|
|
n += index[str.slice(0, 2)]
|
||
|
|
str = str.slice(2)
|
||
|
|
} else if(str[0] in index){
|
||
|
|
n += index[str[0]]
|
||
|
|
str = str.slice(1)
|
||
|
|
} else {
|
||
|
|
throw new Error('fromRoman(..): Unknown sequence: '+ str) } }
|
||
|
|
return n },
|
||
|
|
})
|
||
|
|
|
||
|
|
NumberMixin(Number)
|
||
|
|
|
||
|
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||
|
|
var NumberProtoMixin =
|
||
|
|
module.NumberProtoMixin =
|
||
|
|
object.Mixin('NumberProtoMixin', 'soft', {
|
||
|
|
toAlpha: function(alpha='abcdefghijklmnopqrstuvwxyz'){
|
||
|
|
return this.constructor.toAlpha(this, alpha) },
|
||
|
|
toRoman: function(n){
|
||
|
|
return this.constructor.toRoman(this) },
|
||
|
|
})
|
||
|
|
|
||
|
|
NumberProtoMixin(Number.prototype)
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
/**********************************************************************
|
||
|
|
* vim:set ts=4 sw=4 nowrap : */ return module })
|