数学パズルをJavaScriptで解いてみたよ1

2021年8月5日

問題

10進数、2進数、8進数のいずれで表現しても回文数となる数のうち、10進数の10以上で最小の値を求めてください。

回文数とは逆から読んでも同じ数になる数です。(例 1001)

調べたこと

  • 10進数からn進数へ変換する関数 -> toString()
  • 回文数の英訳 -> Palindrome

実装

const reverse = (str) => [...str].reverse().join("")
const isPalindrome = (strNumber) => strNumber === reverse(strNumber)

const main = () => {
  let result
  let num = 10

  while (result === undefined) {
    if (
      isPalindrome(num.toString()) &&
      isPalindrome(num.toString(2)) &&
      isPalindrome(num.toString(8))
    ) {
      result = num
    }

    num++
  }

  return result
}

console.log(main())

感想

n進数へ変換する方法は地味に知らなかったので勉強になった。

whileの条件のためにresult変数を宣言しているけど、break;すればresult変数は不要になるので無駄だった。

文字列を逆にするのは標準の関数であってもいいなと思った。