[Haskell-cafe] warning - Euler problem spoiler enclosed

Daniel Fischer daniel.is.fischer at googlemail.com
Wed May 4 15:27:29 CEST 2011


On Wednesday 04 May 2011 15:13:07, Barbara Shirtcliff wrote:
> Hi,
> 
> In the following solution to problem 24, why is nub ignored?

It isn't:

*LexOrder> lexOrder "00"
["0","0"]
*LexOrder> lexOrder "001"
["01","10","*** Exception: Prelude.(!!): index too large


> 
> lexI :: Char -> String -> Int
> lexI c s = maybe 1 (id) $ elemIndex c s
> 
> lexOrder :: [Char] -> [[Char]]
> lexOrder s
> 
>  | length s == 1    = [s]
>  | length s == 2    = z : [reverse z]
>  | otherwise        = concat $ map (\n -> h n) [0..((length s) - 1)]
> 
>                     where z = sort $ nub s -- why is the nub ignored
> here? h :: Int -> [String]
>                           h n = map (z!!n :) $ lexOrder $ filter (\c ->
> lexI c z /= n) z

Your problem is (well, the one I see immediately) that you check for the 
length of s, where you should check for the length of z.



More information about the Haskell-Cafe mailing list