Skip to content

Instantly share code, notes, and snippets.

@norahiko
Last active August 29, 2015 13:56
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save norahiko/8909679 to your computer and use it in GitHub Desktop.
Save norahiko/8909679 to your computer and use it in GitHub Desktop.
"use strict";
function solve(input) {
var num = parseInt(input);
if(num <= 2) return "-";
var limit = num / 2 | 0;
var results = [];
var high, low;
for(var base = 2; base <= limit; base++) {
var n = num;
var isPalin = true;
var scale = Math.pow(base, Math.log(n) / Math.log(base) | 0);
var base_i = 1 / base;
while(base <= scale) {
high = n / scale | 0;
low = n % base;
if(high !== low) {
isPalin = false;
break;
}
n = (n - scale * high) * base_i | 0;
scale = scale * base_i * base_i;
}
if(isPalin) {
results.push(base);
}
}
results.push(num - 1);
return results.join(",");
}
function test(input, expected) {
var result = solve(input);
if(result !== expected) {
console.log("-------------\ninput = %s\n\nexpected = %s\nresult = %s", input, expected, result);
}
}
test( "17301", "5,38,100,218,236,5766,17300" );
test( "2", "-" );
test( "1", "-" );
test( "3", "2" );
test( "4", "3" );
test( "5", "2,4" );
test( "6", "5" );
test( "10", "3,4,9" );
test( "101", "10,100" );
test( "1001", "10,25,76,90,142,1000" );
test( "10001", "10,24,30,42,80,100,136,10000" );
test( "1212", "22,100,201,302,403,605,1211" );
test( "123412", "62,100,205,215,30852,61705,123411" );
test( "5179", "5178" );
test( "4919", "4918" );
test( "5791", "5790" );
test( "5498", "2748,5497" );
test( "453", "150,452" );
test( "134", "66,133" );
test( "8489", "27,652,8488" );
test( "1234", "22,616,1233" );
test( "5497", "41,238,5496" );
test( "4763", "19,35,432,4762" );
test( "3974", "17,27,1986,3973" );
test( "3521", "44,55,502,3520" );
test( "5513", "20,38,53,148,5512" );
test( "8042", "23,29,60,4020,8041" );
test( "7442", "37,60,121,3720,7441" );
test( "4857", "25,1618,4856" );
test( "22843", "49,69,91,141,430,22842" );
test( "194823", "84,121,21646,64940,194822" );
test( "435697", "160,169,235,626,1822,435696" );
test( "142", "3,7,70,141" );
test( "886", "5,14,442,885" );
test( "3102", "7,65,93,140,281,516,1033,1550,3101" );
test( "17326", "11,28,99,105,8662,17325" );
test( "32982", "13,72,238,477,716,1433,5496,10993,16490,32981" );
test( "36", "5,8,11,17,35" );
test( "37", "6,36" );
test( "251", "8,250" );
test( "252", "5,10,17,20,27,35,41,62,83,125,251" );
test( "253", "12,14,22,252" );
test( "6643", "2,3,9,81,90,510,948,6642" );
test( "5040", "71,79,83,89,104,111,119,125,139,143,167,179,209,239,251,279,314,335,359,419,503,559,629,719,839,1007,1259,1679,2519,5039" );
test( "9240", "23,38,62,104,109,119,131,139,153,164,167,209,219,230,263,279,307,329,384,419,439,461,615,659,769,839,923,1154,1319,1539,1847,2309,3079,4619,9239" );
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment