LoginSignup
0
0

More than 3 years have passed since last update.

project euler 36 + 2進数変換

Posted at

Problem 36 「二種類の基数による回文数」
585 = 1001001001 (2進) は10進でも2進でも回文数である.

100万未満で10進でも2進でも回文数になるような数の総和を求めよ.

(注: 先頭に0を含めて回文にすることは許されない.)

ワンライナーで行けた。

(max=>(
  ( rev=n=>String(n)
             .split("")
             .reverse()
             .join(""), 
    b
  )=>[...Array(max)]
      .map((_,i)=>++i)
      .filter(e=>String(e)==rev(e))
      .filter(e=>(b=Number(e).toString(2))==rev(b))
      .reduce((a,c)=>a+c, 0) // 872187
)())(1000000)

これワンライナーで行けるのはNumber#toString(radix)のおかげだと思う。

ちなみに真面目に2進数化する処理を書いてみるとこんな感じに。

const bin = n =>{
  let a = String(n).split("").map(Number), b = [];
  while( a.some(e=>e>0) ){
    for(let i = 0, s = a.length, c; i < s; i++){
      c = a[i]%2, a[i] -= c, a[i] /= 2;
      if(i+1 < s){ a[i+1]+=c*10; continue; }
      b.push(c);
    }
  }
  return b.reverse().join("");
};
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0