---------------------------
-- Lista 4 -- LPG III    --
-- Felipe Gallois        --
--						 --
---------------------------

-- exercicio 1
termina_em :: Int -> [Int]
termina_em a = filter (\x -> (x `mod` 10 - a ==0)) [0..100]

-- exercicio 2
quantos _ [] = 0
quantos x (a:l)
	| a == x = 1 + quantos x (l)
	| otherwise = quantos x (l)
	
-- exercicio 3
ordena [] = []
ordena [x] = [x]
ordena (x:xs) = (ordena menor) ++ (x : igual) ++ (ordena maior)
	where menor = filter (< x) xs;
   	      igual = filter (== x) xs;
	      maior = filter (> x) xs;

-- exercicio 4
multiplos x (a,b)
	| a == b = []
	| a > b = []
	| x == 0 = []
	| x == 1 = [a..b]
	| otherwise = [y, m .. z]
	where y
			| a `mod` x == 0 = a
			| otherwise = ((a `div` x) + 1) * x;
	      m 	
		  	| a `mod` x == 0 = ((a `div` x) + 1) * x
			| otherwise = ((a `div` x) + 2) * x;
		  z = b;

-- exercicio 5
remove _ [] = []
remove a (x:xs)
	| a == x = remove a xs
	| otherwise = x:remove a xs

-- exercicio 6
adiciona n _ [] = n:[]
adiciona n pos (x:xs)
	| pos < 1 = [] 
	| pos == 1 = n:x:xs
	| otherwise = x:adiciona n (pos-1) xs

-- exercicio 7
elimina [] = []
elimina (x:xs) = x:elimina (filter (/= x) xs);

-- exercicio 8
rotaciona _ [] = []
rotaciona 0 l = l
rotaciona a (x:xs) = rotaciona (a-1) list
	where list = insere_ultimo x (xs)
		where insere_ultimo a [] = a:[];
			  insere_ultimo a (x:xs) = x:insere_ultimo a xs;

