-- Primeira Prova de LP2, 2/97 {- Um pequeno visor de cristal liquido (LCD) contem uma matriz 5x3 que pode mostrar um numero, como 9 ou 5 por exemplo: *** *** * * * *** *** * * * *** O formato de cada numero e' definido por uma lista de inteiros que indicam quantos '*' se repetem, seguido de quantos brancos se repetem, ate' o final da matriz 5x3, comecando da primeira linha ate' a ultima: -} nove,cinco,um,dois,tres,quatro,seis,sete,oito,zer :: [Int] nove = [4,1,4,2,1,2,1] cinco = [4,2,3,2,4] um = [0,2,1,2,1,2,1,2,1,2,1] dois = [3,2,5,2,3] tres = [3,2,4,2,4] quatro = [1,1,2,1,4,2,1,2,1] seis = [4,2,4,1,4] sete = [3,2,1,2,1,2,1,2,1] oito = [4,1,5,1,4] zer = [4,1,2,1,2,1,4] {- indicando que o numero nove e' composto por 4 '*' (tres na primeira linha e um na segunda), seguido de 1 espaco, mais 4 '*', 2 espacos, 1 '*', 2 espacos e um '*'). Faca funcoes para: 1 - (2.0) Dado o formato do numero (lista de inteiros) gerar a String correspondente de '*' e espacos. toString nove ==> "**** **** * *" -} --toString :: [Int] -> String {- 2 - (2.0) Faca uma funcao que transforme a String de '*' e espacos em uma lista de Strings, cada uma representando uma linha do LCD: toLinhas "**** **** * *" ==> ["***","* *","***"," *"," *"] -} type Linha = String --toLinhas :: String -> [Linha] {- 3 - (2.0) Faca uma funcao que pegue uma lista de Strings e transforme em uma unica String com '\n' entre cada uma delas: showLinhas ["***","* *","***"," *"," *"] ==> "***\n* *\n***\n *\n *" -} -- showLinhas :: [Linha] -> String {- 4 - (2.0) Faca uma funcao que pegue duas listas de linhas e transforme em uma unica lista de linhas, onde as respectivas linhas originais se tornam uma so' (com um espaco entre elas): juntaLinhas ["***","* *","***"," *"," *"] ["***","* *","***"," *"," *"] ==> ["*** ***","* * * *","*** ***"," * *"," * *"] -} --juntaLinhas :: [Linha] -> [Linha] -> [Linha] {- 5 - (2.0) Faca uma funcao que dado um Inteiro imprima ele usando '*'s, espacos e '\n's. A funcao tem que funcionar para Inteiros de 2 e 3 digitos. -} --tolcd :: Int -> String {- Dica: use as funcoes div e mod de inteiros, a funcao (!!), e a lista numeros, dada abaixo: -} numeros :: [[Int]] numeros = [zer,um,dois,tres,quatro,cinco,seis,sete,oito,nove] {- 6 - (2.0) Faca uma funcao que dada uma String de '*'s e espacos, retorne a representacao da String como [Int] no formato usado no LCD (i.e. a funcao inversa de toString). toCompact "**** **** * *" = [4,1,4,2,1,2,1] -} -- toCompact :: String -> [Int]