私は Project Euler Problem 4に取り組んでおり、2 3 桁の数の積の回文を見つける必要があるため、次のように思いつきました。
palindrome = [ x*y | x <- [100..999], y <- [100..999], reverse [x*y] == [x*y]]
これが機能しないのはなぜですか? どうすれば機能させることができますか? どういうわけか答えをリストに入れて、それが回文であるかどうかを逆にしてチェックする必要があると思います。
私は Project Euler Problem 4に取り組んでおり、2 3 桁の数の積の回文を見つける必要があるため、次のように思いつきました。
palindrome = [ x*y | x <- [100..999], y <- [100..999], reverse [x*y] == [x*y]]
これが機能しないのはなぜですか? どうすれば機能させることができますか? どういうわけか答えをリストに入れて、それが回文であるかどうかを逆にしてチェックする必要があると思います。
この部分
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)]
単一の数値を含むリストに逆関数を適用したくない場合。その数値の文字列表現に逆関数を適用する必要があります。
「show」機能を使ってみてください。
また、それを見て Project Euler の目的全体を台無しにするのを避けるのに十分な力がある場合は、これを見ることができます。