Problem 47

今日のコード書き練習です。ソースコードアップするのここが便利なので^^;
ぱぱすに誘われて数的な問題を解いてるけど
http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%2047
jsの流儀が分からない

coffeescriptのコードです。結構話にならないこと書いてるかもしれない・・・
100万まで先に全部計算しちゃうけど実行時間は5秒

_ = require("underscore")

main = ()->
  maxint = 1000000
  data = new Array(maxint+1)

  primeCheck = ()->
    for num in [2..maxint]
      if data[num] is undefined
        data[num] = { prime: true, firstPrime: num, primes: [num] }
        if (m = maxint / num) isnt 1
          for x in [2..m]
            data[num*x] = { prime: false, firstPrime: num }

  primesCalc = (num)->
    if data[num].prime
      [num]
    else if (ret = data[num].primes) isnt undefined
      ret
    else
      fP = data[num].firstPrime
      return (data[num].primes = [fP].concat primesCalc(num/fP))

  
  primeCheck()
  for num in [2..maxint]
    primesCalc(num)

  tempContinue = 0
  for num in [2..maxint]
    primesCount = data[num].primesCount = _.size(_.uniq(data[num].primes))
    if primesCount is 4
      tempContinue += 1
      if tempContinue is 4
        console.log "Success", num
        break
    else
      tempContinue = 0

main()