Questão 48: contaQuadrados
Voltar
Considere os seguintes tipos para representar pontos e retângulos, respectivamente. Assuma que os retângulos têm os lados paralelos aos eixos e são representados apenas por dois dos pontos mais afastados.
type Ponto = (Float,Float) data Rectangulo = Rect Ponto Ponto
Defina a função contaQuadrados :: [Rectangulo] -> Int
que, dada uma lista com retângulos, conta quantos deles são quadrados.
Exemplo
> contaQuadrados [Rect (0,0) (2,2), Rect (1,3) (7,4), Rect (5,2) (8,5), Rect (1,2) (2,4)]
2
Resolução
type Ponto = (Float,Float)
data Rectangulo = Rect Ponto Ponto
contaQuadrados :: [Rectangulo] -> Int
contaQuadrados [] = 0
contaQuadrados (h:t)
| eQuadrado h = 1 + contaQuadrados t
| otherwise = contaQuadrados t
eQuadrado :: Rectangulo -> Bool
eQuadrado (Rect (x1,y1) (x2,y2)) = abs (y2 - y1) == abs (x2 - x1)