Skip to content

Instantly share code, notes, and snippets.

@tstone
Created August 15, 2012 22:22
Show Gist options
  • Save tstone/3364269 to your computer and use it in GitHub Desktop.
Save tstone/3364269 to your computer and use it in GitHub Desktop.
Divide by 3 (javascript)
<!DOCTYPE>
<html>
<body>
<script type="text/javascript">
var base10 = {
increment: function(v) {
var incrementBit = function(bits) {
var b = bits[0];
if (b == '0') {
bits.splice(0, 1, '1');
} else if (b == '1') {
bits.splice(0, 1, '2');
} else if (b == '2') {
bits.splice(0, 1, '3');
} else if (b == '3') {
bits.splice(0, 1, '4');
} else if (b == '4') {
bits.splice(0, 1, '5');
} else if (b == '5') {
bits.splice(0, 1, '6');
} else if (b == '6') {
bits.splice(0, 1, '7');
} else if (b == '7') {
bits.splice(0, 1, '8');
} else if (b == '8') {
bits.splice(0, 1, '9');
} else if (b == '9') {
var shortBits = bits.slice(1);
if (shortBits.length != 0) {
bits = [bits[0]].concat(incrementBit(shortBits));
} else {
bits = [0, 1];
}
}
return bits;
}
var bits = v.toString().split('').reverse();
bits = incrementBit(bits);
return parseInt(bits.reverse().join(''), 10);
}
};
var base3 = {
convertTo: function(d) {
var v = '0';
for (var x = 0; x < d; x = base10.increment(x)) {
v = base3.increment(v);
}
return v;
},
convertFrom: function(v) {
var x = 0;
while (v != '0') {
v = base3.decrement(v);
x = base10.increment(x);
}
return x;
},
decrement: function(v) {
var decrementBit = function(bits) {
if (bits[0] == '0') {
var shortBits = bits.slice(1);
if (shortBits.length != 0) {
bits = [2].concat(decrementBit(shortBits));
} else {
bits = [2];
}
} else if (bits[0] == '1') {
bits.splice(0, 1, '0');
} else if (bits[0] == '2') {
bits.splice(0, 1, '1');
}
return bits;
};
// Trim leading 0's
v = v.replace(/^[0]*/g, '');
var bits = v.split('').reverse();
bits = decrementBit(bits);
return bits.reverse().join('');
},
increment: function(v) {
var incrementBit = function(bits) {
if (bits[0] == '0') {
bits.splice(0, 1, '1');
} else if (bits[0] == '1') {
bits.splice(0, 1, '2');
} else if (bits[0] == '2') {
var shortBits = bits.slice(1);
if (shortBits.length != 0) {
bits = [0].concat(incrementBit(shortBits));
} else {
bits = [0, 1];
}
}
return bits;
};
var bits = v.split('').reverse();
bits = incrementBit(bits);
return bits.reverse().join('');
},
bitShift: function(v) {
var bits = v.split('');
var left = bits[bits.length - 1];
bits.pop();
return [left].concat(bits).join('');
}
};
function divideByThree(x) {
var b3 = base3.convertTo(x);
b3 = base3.bitShift(b3);
return base3.convertFrom(b3);
}
</script>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment