
Am Dienstag 23 Februar 2010 13:03:45 schrieb Ertugrul Soeylemez:
Rafael Gustavo da Cunha Pereira Pinto
wrote: While solving a puzzle, I was posed the problem of finding if there was no duplicates on a list.
First I used:
noneRepeated=null.(filter (>1)).(map length).group.sort
But this seemed very unneficient, so I thought that I could detect the duplicates while sorting, and devised this:
import Control.Monad import Data.Maybe
noneRepeated=isNothing . (foldl merge (Just [])) . (map sort) . pairs
import Data.List
noneRepeated xs = xs == nub xs
Talk about inefficiency :) import Data.Set (Set) import qualified Data.Set as Set noneRepeated = go 0 Set.empty where go ct st (x:xs) | Set.size st < ct = False | otherwise = go (ct+1) (Set.insert x st) xs go ct st [] = ct == Set.size st
Greets Ertugrul