CoffeeScriptでProject Euler #4

問題文

Problem 4

左右どちらから読んでも同じ値になる数を回文数という。 2桁の数の積で表される回文数のうち、最大のものは 9009 = 91 × 99 である。

では、3桁の数の積で表される回文数のうち最大のものはいくらになるか。

Strategy

Brute Force

文字列反転について

はじめ思いついたのはこれ。

String::reverse = ->
  r = ""
  for c in this
    r = c + r
  r

あまり上手な方法ではないので検索をかけたら次のコードが複数のサイトで見つかった。定石っぽい。

String::reverse = -> @.split("").reverse().join("")

Solution

palindrome ?= (list) -> list == list.reverse()

Array::max = ->
  Math.max.apply Math, this

String::reverse = -> @.split("").reverse().join("")

list = []

for x in [100..999]
  for y in [100..999]
    if palindrome? (x*y).toString()
      list.push(x*y)

console.log list.max()

わからないこと

二重ループを配列内包で書きたいのだけどどうしたらいいのだろ…

順路:CoffeeScriptでProject Euler #5
逆路:CoffeeScriptでProject Euler #3