Project Euler 012
積みっぱなしだったYsフェルガナを消化。後半きつかった。レベル上げしようにも補正入るからめんどくさい。総合的には面白かったからいいや。
問題12
三角数列のうち、約数の数が最初に500を超えるものを求める。
今回はC#が残ってた。実行してみたら、10分経っても帰ってこない。コードを見直してみると、すべての数値のチェックしてた。なんで?だから、改めて書き直した。
Integer>>divisors | list i | list := OrderedCollection new. i := 1. [ i * i <= self ] whileTrue: [ (i * i = self) ifTrue: [ list add: i. ] ifFalse: [ (self \\ i = 0) ifTrue: [ list add: i. list add: (self // i)]]. i := i + 1]. ^list.
| i | i := 1. [true] whileTrue: [ | list triangle | triangle := i * (i + 1) / 2. list := triangle divisors. list size > 500 ifTrue: [ ^triangle ]. i := i + 1. ].
12秒。いったい最初のC#コードではなにを書いていたんだか、見なかったことにする。