2009-08-11 5 views
1

내가 프로젝트 오일러 Problem 4 작업, 2 ~ 3 자리 숫자의 제품의 회문을 찾을 필요, 그래서 생각 해낸 오전에 :회문 하스켈

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

을 BTW :이 코드는 나에게 답을 알려줍니다 것은 906609. –

+0

이다 그러나 나는 그것을 계산하고 싶어! 고마워요 어쨌든 –

+0

죄송합니다. 코드를 실행하고 그 결과를보고 답을 찾는 즐거움을 망칠 수 밖에 없어요. 오 ... 그 따뜻한 퍼지 느낌 ... 그것은 내 의도가 아니었다 :) –

2

단일 번호가 포함 된 목록에 역순으로 기능을 적용하고 싶지 않습니다. 해당 번호의 문자열 표현에 reverse 함수를 적용해야합니다.

"show"기능을 사용해보십시오. 당신이 그것을보고 및 프로젝트 오일러의 전체 목적을 파괴하지 않도록 충분한 강도가있는 경우

또한, 당신이 볼 수 있습니다 :

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