티스토리 뷰

Haskell

jolly jumper

newpolaris 2011. 1. 18. 10:37
좀더 나은 해답은 여기로 http://functional.or.kr/node/131

연속으로 주어진 숫자들이 n개 있으면 이 숫자들의 간격이 1부터 n-1까지 종류별로 모두 있는 경우를 졸리 점퍼(Jolly jumper)라고 부른다. 예를 들어 1 4 2 3이라는 4개의 숫자가 있을 때 1과 4의 간격은 3, 4와 2의 간격은 2, 2와 3의 간격은 1로 1에서 3까지 모두 있다.
숫자 리스트를 입력 받아 졸리 점퍼인지 판단하는 프로그램을 작성하라.

나는 단순히 앞에서 배운 함수들을 이용하여 해당 함수를 작성하였다.
-- "jollyJumper.hs"
import List (sort)
import Pairs (pairs)

jollyJumper :: [Int] -> Bool
jollyJumper a = sort (pairDiffer (pairs a)) == [1..(length a - 1)]

pairDiffer :: Num a => [(a,a)] -> [a]
pairDiffer a = [abs (x-y) | (x,y) <- a]
-- Pair.hs
module Pairs where

pairs :: [a] -> [(a,a)]
pairs a = zip a (tail a)
맨 위의 링크에서 볼 수 있는 다른 해답과 같이 리스트 패턴을 사용하였다면 좀더 알아보기 쉽고 짧아 질 수 있었을 것이다.
Prelude> :load jollyJumper
[1 of 2] Compiling Pairs            ( Pairs.hs, interpreted )
[2 of 2] Compiling Main             ( jollyJumper.hs, interpreted )
Ok, modules loaded: Pairs, Main.
*Main> jollyJumper [1,4,2,3]
True
*Main> jollyJumper [2,4,7,11,16]
False
-- "jollyJumper.hs"
-- "jollyJumper.hs"

'Haskell' 카테고리의 다른 글

N+K Pattern  (0) 2011.01.29
Programming in Haskell notes  (0) 2011.01.24
내가 만든 .hs 파일 사용하기  (0) 2011.01.18
Programming in Haskell (6) ch3. Exercise  (0) 2011.01.17
Programming in Haskell (5) ch2. Exercise  (0) 2011.01.14
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크