Rafaela Soares Posted November 26, 2016 at 02:36 PM Report Share #600880 Posted November 26, 2016 at 02:36 PM Oi 🙂, Neste exercício: Crie um programa que faça uma codificação sobre uma sequência de caracteres iguais, substitua a sequência por !na, onde n é o número de vezes que o caracter a é repetido. Note que só é interessante comprimir sequências maiores que 3. Lembre que uma string (sequência de caracteres) é equivalente a uma lista de caracteres. Exemplo: > comprime “asdffffghjjkllllpoooi” “asd!4fghjjk!4lpoooi” Pensei nisto: comprimir :: String -> String comprimir [] = [] comprimir (h:t) = if (h == head t) then '!' : (1 + aux t) : head else h : comprimir t where aux :: String -> Int aux (h:t) = if h == head t then 1 + aux t else 0 Mas não consigo sair daqui. Obrigada pela atenção. Link to comment Share on other sites More sharing options...
Baderous Posted December 3, 2016 at 03:34 PM Report Share #600998 Posted December 3, 2016 at 03:34 PM Usa a função span: > span (=='a') "asdffffghjjkllllpoooi" ("a","sdffffghjjkllllpoooi") > span (=='f') "ffffghjjkllllpoooi" ("ffff","ghjjkllllpoooi") Link to comment Share on other sites More sharing options...
Baderous Posted December 26, 2016 at 12:17 AM Report Share #601503 Posted December 26, 2016 at 12:17 AM Visto que já passou 1 mês desde o post inicial e sem feedback, deixo aqui a minha solução: comprime :: String -> String comprime "" = "" comprime [c] = [c] comprime (c:st) = let (seq,rest) = span (==c) (c:st) len = length seq in if len > 3 then ("!" ++ show len ++ [c]) ++ comprime rest else seq++(comprime rest) Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now