DEV Community

Anton
Anton

Posted on

Pack the same elements into a list inside a list.

Again a challenge from 99 Elm problems

Convert a list to a list of lists where repeated elements of the source list are packed into sublists. Elements that are not repeated should be placed in a one element sublist.

pack [1,1,1,2,3,3,3,4,4,4,4,5,6,6] ==
    [ [1,1,1]
    , [2]
    , [3, 3, 3]
    , [4, 4, 4, 4]
    , [5]
    , [6, 6]
    ]

Oldest comments (3)

Collapse
 
antonrich profile image
Anton

For now I have this. Can you guess what's wrong with this code?

pack : List a -> List (List a)
pack list =
    List.foldr pusher [] list

pusher : a -> List b -> List (List b)
pusher y ys =
    if List.isEmpty ys then
        y :: ys
    else
        if y == List.head <| List.head ys then
            y :: List.head ys
        else
            [y] :: ys
Collapse
 
idanarye profile image
Idan Arye

Should [1, 2, 1] be converted to [[1], [2], [1]] or to [[1, 1], [2]]?

Collapse
 
antonrich profile image
Anton

To [[1], [2], [1]]