Hexavigesimal
by LeoJH
HTML
<h2>Convert between decimal and hexavigesimal</h2>
<div>
Input:
<input id="decimal" type="text" />
</div>
<strong>Output:</strong>
<span id="output"></span>
<br>
<button id="toDec">To Decimal</button>
<button id="toHex">To Hexavigesimal</button>
JavaScript
$(function() {
var input = $('input');
$('button#toDec').click(function() {
var val = input.val();
var decimal = hexavigesimal.toDecimal(val);
$('span').text(decimal);
return;
});
$('button#toHex').click(function() {
var val = input.val();
var alpha = hexavigesimal.toAlphaNumber(val);
$('span').text(alpha);
return;
});
});
var hexavigesimal = function() {
var _alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
var self = this;
self.toDecimal = function(alphaNumber) {
if (!alphaNumber.match(/[a-z]/i)) {
alert('Input must be alphabetic')
return;}
var _alphaNumber = alphaNumber.toUpperCase();
var decimalValues = _alphaNumber.split("").reverse().map(function(char, index) {
return self.charToDecimal(char) * Math.pow(26, index);
});
return decimalValues.reduce(function(memo, num) {
return memo + num;
}, 0);
};
self.toAlphaNumber = function(decimal) {
if (!decimal.match(/^\d+$/)) {
alert('Input must be numeric');
return;
}
var remainders = [], remainder = 0;
for (var counter = 1; remainder != decimal; counter++) {
remainder = decimal % (Math.pow(26, counter));
remainders.push(remainder);
}
var mappedChars = remainders.map(function(remainder, index) {
var charCode = Math.floor(remainder / (Math.pow(26, index)));
return self.decimalToChar(charCode);
});
return mappedChars.reverse().join("");
};
self.charToDecimal = function(char) {
return _alphabet.indexOf(char) + 1;
};
self.decimalToChar = function(decimal) {
return _alphabet.substring(decimal - 1, decimal);
};
return self;
}();