Divide by 3 without operators
http://codegolf.stackexchange.com/questions/6836/divide-a-number-by-3-without-using-operators
by Andreas Renberg
HTML
<pre id="output"></pre>
JavaScript
function divBy3(num) {
var numArray = String(num).split('');
var prefix = (numArray[0] == "-") ? numArray.shift() : "";
var resultStr = div(numArray, "0");
return parseInt(prefix + resultStr);
}
function div(n, rem) {
if (n.length <= 0) return ""; //"r" + rem;
var quoVals = '000111222333444555666777888999'.split('');
var remVals = '012012012012012012012012012012'.split('');
var index = parseInt(rem + n.shift());
return quoVals[index] + div(n, remVals[index]);
}
// ----- UNIT TESTING -----
function out()
{
var args = Array.prototype.slice.call(arguments, 0);
document.getElementById('output').innerHTML += args.join(" ") + "\n";
}
var numTests = 100;
var passedTests = 0;
for (i=0;i<100;i++) {
var r = parseInt(Math.random() * 99999 - 50000);
if (test(r))
{
out("PASS", r+"/3");
passedTests++;
}
else
{
out("FAILED", r+"/3");
}
}
out("Passed", passedTests, "of", numTests, "tests.");
function test(a) {
return ( parseInt(a/3) == divBy3(a) );
}