2009-08-11 16 views
1

私はプロジェクトオイラーProblem 4に取り組んで、2〜3桁の数字の積の回文を見つける必要があるので、私が思いついたのです中:回文Haskellの

palindrome = [ x*y | x <- [100..999], y <- [100..999], reverse [x*y] == [x*y]] 

しないのはなぜこの仕事とどのように私はそれを動作させることができますか? 私は何とか答えをリストに入れて、それが逆転し、それが回文かどうかチェックする必要があると思う。

答えて

9

この部分

reverse [x*y] == [x*y] 

です違う。 [x*y]は、単一の要素を持つリストです。結果はx*yです。その逆は同じリストです...

数字は逆の数字です。番号の桁のリストが必要です。簡単なやり方は、数値を文字列表現に変換することです(覚えておいてください)。type String = [Char]。これを行うには、代わりに[ ]の、showを使用することができます。

palindrome = [ x*y | x <- [100..999], y <- [100..999], reverse (show (x*y)) == show (x*y)] 
+0

をところで:このコードでは、答えは906609. –

+0

あるしかし、私はそれを計算するために望んでいた私に語りました!とにかくお返事ありがとうございます –

+0

申し訳ありませんが、私はコードを実行し、結果を見て答えを見つけるの喜びを台無しにした場合。ああ...あの暖かいかすかな気分...それは私の意図ではありませんでした:) –

2

単一の番号を含むリストに逆関数を適用したくない場合。その番号の文字列表現に逆関数を適用する必要があります。

「表示」機能を使用してみてください。

あなたはそれを見て、プロジェクトオイラーの全体の目的を台無しに回避するために十分な強度を持っている場合にも、あなたはこれを見てすることができます

http://www.haskell.org/haskellwiki/Euler_problems