senapk / funcional_arcade

9 stars 11 forks source link

36. compac #18

Open senapk opened 4 years ago

senapk commented 4 years ago

36. compac

senapk commented 4 years ago

Minha melhor solução

-- faz a entrada passando valor e qtd
entry x qtd = if qtd == 1 then [[x]] else [[x, qtd]]

-- se lista vazia, entao nao tem elementos
fn [] _ = []
-- se esse eh o ultimo elemento, insiro quantos ja encontrei mais ele
fn [x] qtd = entry x (qtd + 1)
-- se x eh diferente do proximo
--   insiro quantos ja encontrei mais ele e chamo a recursao zerando o contador
--   senao chamo a recusao dizendo que encontrei mais um
fn (x:y:xs) qtd = if x /= y
                    then entry x (qtd + 1) ++ fn (y:xs) 0
                    else                      fn (y:xs) (qtd + 1)

-- inicio a busca com zero
compac xs = fn xs 0