仲間はずれの判定、ふたたび
30分プログラム、その684。昔にやった仲間はずれの判定を、もう一度やってみました。
問題はhttp://ja.doukaku.org/53/を参考に、前回の回答は仲間外れの判別 - みずぴー日記を見てください。
使い方
*Main> classify [1,1,1,1,1] Same 1 *Main> classify [1,2,1,1,1] OnlyOne 1 2 *Main> classify [1,2,1,1,1,3] Other
ソースコード
import Data.List data Result a = Same a | OnlyOne a a | Other deriving Show classify :: (Eq a, Ord a) => [a] -> Result a classify xs = case group $ sort xs of [] -> error "empty" [xs] -> Same (head xs) [xs,[y]] -> OnlyOne (head xs) y [[x],ys] -> OnlyOne (head ys) x _ -> Other