Advertisement
Guest User

Untitled

a guest
Mar 31st, 2015
226
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.75 KB | None | 0 0
  1. 'use strict';
  2.  
  3. function add (x, y, base) {
  4. var z = [];
  5. var number = Math.max(x.length, y.length);
  6. var carry = 0;
  7. var i = 0;
  8. while (i < number || carry) {
  9. var xi = i < x.length ? x[i] : 0;
  10. var yi = i < y.length ? y[i] : 0;
  11. var zi = carry + xi + yi;
  12. z.push(zi % base);
  13. carry = Math.floor(zi / base);
  14. i++;
  15. }
  16. return z;
  17. }
  18.  
  19. function times (number, x, base) {
  20. if (number < 0) {
  21. return null;
  22. }
  23. if (number === 0) {
  24. return [];
  25. }
  26.  
  27. var result = [];
  28. var power = x;
  29. while (true) {
  30. if (number & 1) {
  31. result = add(result, power, base);
  32. }
  33. number = number >> 1;
  34. if (number === 0) {
  35. break;
  36. }
  37. power = add(power, power, base);
  38. }
  39.  
  40. return result;
  41. }
  42.  
  43. function parse (text, base) {
  44. return text.split('').reverse().map(digit).filter(numbers);
  45.  
  46. function digit (digit) {
  47. return parseInt(digit, base);
  48. }
  49. function numbers (digit) {
  50. return typeof digit === 'number' && isNaN(digit) === false;
  51. }
  52. }
  53.  
  54. function rebase (text, from, to) {
  55. var power = [1];
  56. var digits = parse(text, from);
  57. if (digits === null) {
  58. return null;
  59. }
  60. return digits.reduce(addition, []).reverse().map(based).join('');
  61.  
  62. function addition (buffer, digit) {
  63. if (digit) {
  64. buffer = add(buffer, times(digit, power, to), to);
  65. }
  66. power = times(from, power, to);
  67. return buffer;
  68. }
  69. function based (digit) {
  70. return digit.toString(to);
  71. }
  72. }
  73.  
  74. function dex (input, from, to) {
  75. var t = typeof input;
  76. if (t !== 'string' && t !== 'number' || input === '') {
  77. return null;
  78. }
  79. return rebase(String(input).toLowerCase(), from, to);
  80. }
  81.  
  82. function hex (input) {
  83. return dex(input, 10, 16);
  84. }
  85.  
  86. function dec (input) {
  87. return dex(input, 16, 10);
  88. }
  89.  
  90. module.exports = dex;
  91.  
  92. dex.hex = hex;
  93. dex.dec = dec;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement