Skip to content

Instantly share code, notes, and snippets.

@wlt
Created May 31, 2015 08:43
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 wlt/7094cf970b28cae7d1df to your computer and use it in GitHub Desktop.
Save wlt/7094cf970b28cae7d1df to your computer and use it in GitHub Desktop.
「1時間以内に解けなければプログラマ失格となってしまう5つの問題」の「問題5」を解いた
// 「1時間以内に解けなければプログラマ失格となってしまう5つの問題」の「問題5」を解いた
//
// 1時間以内に解けなければプログラマ失格となってしまう5つの問題が話題に
// http://www.softantenna.com/wp/software/5-programming-problems/
//
// 総当たりしてevalするだけ。
// 総当たりの生成には、結合子「+, -, 無し」の組み合わせを、3進数の各桁として扱うような方法をとっている
function p5() {
let values = [1,2,3,4,5,6,7,8,9];
let combinators = ['', '-', '+'];
let BASE = combinators.length;
let ANSWER = 100;
function getTrit(num, digit) {
return Math.floor((num % Math.pow(BASE, digit + 1)) / Math.pow(BASE, digit));
}
function convert(num) {
let s = '';
num *= BASE;
for (let i = 0; i < values.length; i++) {
let trit = getTrit(num, i);
s += combinators[trit];
s += values[i];
}
return s;
}
let loop = Math.pow(BASE,values.length - 1);
for (let i = 0; i < loop; i++) {
let expr = convert(i);
if (eval(expr) == ANSWER) {
console.log(expr + ' = ' + ANSWER);
}
}
}
p5();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment