never executed always true always false
1 module Tarefa1_2017li1g183 where
2
3 import LI11718
4
5 --------------- from Nuno
6 testesT1 :: [Caminho]
7 testesT1 = [c_ex1,c_ex1',c_ex2,c_ex4,c_ex5,c_ex6
8 ,c_exOP,c_exDM,c_exOL,c_exHM,c_exR,c_exE]
9
10 -- ,m_ex1,m_ex2,m_ex3
11 -- ,m_exPI,m_exLV,m_exEX,m_exLH]
12
13 c_ex1 :: Caminho
14 c_ex1 = [Avanca,CurvaEsq,Avanca,CurvaDir,Avanca,CurvaDir,Desce,Avanca,CurvaEsq,CurvaDir
15 ,CurvaEsq,CurvaDir,CurvaDir,CurvaEsq,CurvaDir,CurvaEsq,CurvaEsq,Avanca,Avanca
16 ,Desce,CurvaDir,CurvaDir,Avanca,Avanca,Desce,CurvaEsq,CurvaDir,Sobe,CurvaDir
17 ,CurvaEsq,CurvaDir,CurvaEsq,Avanca,CurvaDir,Sobe,Sobe,Avanca,Avanca,CurvaDir,Avanca]
18
19 c_ex1' :: Caminho
20 c_ex1' = [Avanca,CurvaEsq,Avanca,CurvaDir,Avanca,CurvaDir,Sobe,Avanca,CurvaEsq,CurvaDir
21 ,CurvaEsq,CurvaDir,CurvaDir,CurvaEsq,CurvaDir,CurvaEsq,CurvaEsq,Avanca,Avanca
22 ,Sobe,CurvaDir,CurvaDir,Avanca,Avanca,Sobe,CurvaEsq,CurvaDir,Desce,CurvaDir
23 ,CurvaEsq,CurvaDir,CurvaEsq,Avanca,CurvaDir,Desce,Desce,Avanca,Avanca,CurvaDir,Avanca]
24
25 c_ex2 :: Caminho
26 c_ex2 = [Avanca,CurvaEsq,CurvaEsq,Avanca,CurvaEsq,CurvaEsq]
27
28 -- mapa sobreposto, altura /= da inicial
29 c_ex3 :: Caminho
30 c_ex3 = [Desce,CurvaEsq,CurvaEsq,Desce,CurvaEsq,CurvaEsq
31 ,Avanca,CurvaEsq,CurvaEsq,Avanca,CurvaEsq,CurvaEsq]
32
33 -- caminho em 8, cruza
34 c_ex4 :: Caminho
35 c_ex4 = [Avanca,CurvaDir,Avanca,Avanca,Avanca,CurvaEsq,Avanca,CurvaEsq,Avanca
36 ,CurvaEsq,Avanca,Avanca,Avanca,CurvaDir,Avanca,CurvaDir]
37
38 -- caminho minimo vĂ¡lido
39 c_ex5 :: Caminho
40 c_ex5 = [CurvaDir,CurvaDir,CurvaDir,CurvaDir]
41
42 -- caminho minimo sem vizinhos
43 c_ex6 :: Caminho
44 c_ex6 = [Avanca,CurvaDir,Avanca,CurvaDir,Avanca,CurvaDir,Avanca,CurvaDir]
45
46 -- mapa nao geravel por caminhos, lava extra a volta
47 m_ex1 = Mapa ((2,1),Este) [[Peca Lava 2, Peca Lava 2, Peca Lava 2, Peca Lava 2]
48 ,[Peca Lava 2, Peca (Curva Norte) 2,Peca (Curva Este) 2, Peca Lava 2]
49 ,[Peca Lava 2, Peca (Curva Oeste) 2,Peca (Curva Sul) 2, Peca Lava 2]
50 ,[Peca Lava 2, Peca Lava 2, Peca Lava 2, Peca Lava 2]]
51
52 -- mapa nao geravel por caminhos, altura /= inicial sem possibilidade de rampas
53 m_ex2 = Mapa ((1,0),Este) [[Peca (Curva Norte) 5,Peca (Curva Este) 5],[Peca (Curva Oeste) 5,Peca (Curva Sul) 5]]
54
55 -- mapa minimo sem vizinhos
56 m_ex3 = Mapa ((1,0),Este) [[Peca (Curva Norte) 2,Peca Recta 2,Peca (Curva Este) 2],[Peca Recta 2,Peca Lava 2,Peca Recta 2],[Peca (Curva Oeste) 2,Peca Recta 2,Peca (Curva Sul) 2]]
57
58
59 -- testes invalidos
60 -- aberto
61 c_exOP :: Caminho
62 c_exOP = [Avanca,Avanca,CurvaDir,Avanca,Avanca,CurvaEsq,Avanca,CurvaDir,CurvaDir
63 ,Avanca,Avanca,Avanca,CurvaDir,CurvaEsq,Avanca,Avanca,CurvaDir,Avanca,Avanca,CurvaDir,Avanca]
64
65 -- fecha mas direcao errada
66 c_exDM :: Caminho
67 c_exDM = [Sobe,CurvaEsq,CurvaEsq,Sobe,CurvaEsq,CurvaEsq
68 ,Avanca,CurvaEsq,CurvaEsq,Avanca,CurvaEsq,Avanca]
69
70 -- overlaps, aberto
71 c_exOL :: Caminho
72 c_exOL = [Avanca,Avanca,CurvaDir,Avanca,Avanca,CurvaEsq,Avanca,CurvaDir,CurvaDir
73 ,Avanca,CurvaDir,Avanca,CurvaDir,CurvaEsq,Avanca,CurvaDir,Avanca,Avanca,CurvaDir,Avanca]
74
75 -- height mismatch
76 c_exHM :: Caminho
77 c_exHM = [Avanca,Avanca,CurvaDir,Avanca,Avanca,CurvaEsq,Avanca,CurvaDir,CurvaDir
78 ,Avanca,Sobe,Avanca,CurvaDir,CurvaEsq,Avanca,CurvaDir,Avanca,Avanca,CurvaDir,Avanca]
79
80 -- cruza com alturas invalidas
81 c_exR :: Caminho
82 c_exR = [Avanca,CurvaDir,Avanca,Avanca,Avanca,CurvaEsq,Sobe,CurvaEsq,Avanca
83 ,CurvaEsq,Avanca,Avanca,Avanca,CurvaDir,Desce,CurvaDir]
84
85 {-
86 let map = constroi c_exR
87 printHeight map
88 -}
89
90 -- caminho vazio
91 c_exE :: Caminho
92 c_exE = []
93
94 constroi :: Caminho -> Mapa
95 constroi c = Mapa (partida c,dirInit) tab
96 where Mapa (finishPos,finishDir) tab =
97 constroiAux (Mapa (partida c,dirInit) (initTab c)) altInit c
98
99 initTab :: Caminho -> Tabuleiro
100 initTab c = replicate y $ replicate x $ Peca Lava altLava
101 where (x,y) = dimensao c
102
103 constroiAux :: Mapa -> Altura -> Caminho -> Mapa
104 constroiAux m _ [] = m
105 constroiAux (Mapa (pos,dir) tab) a (i:is) =
106 constroiAux (Mapa (p',d') novoMapa) a' is
107 where
108 (p',d',a',novoMapa) = insere i pos dir a tab
109
110 insere Avanca pos dir a tab = (go pos dir, dir, a, coloca (Peca Recta a) pos tab)
111 insere Sobe pos dir a tab = (go pos dir, dir, a+1, coloca (Peca (Rampa dir) a) pos tab)
112 insere Desce pos dir a tab = (go pos dir, dir, a-1, coloca (Peca (Rampa (swap dir)) (a-1)) pos tab)
113 -- insere CurvaEsq pos dir a tab = (go pos des, des, a, coloca (Peca (Curva (tr dir)) a) pos tab)
114 insere CurvaEsq pos dir a tab = (go pos des, des, a, coloca (Peca (Curva (dir)) a) pos tab)
115 where des = tr.tr.tr$dir
116 insere CurvaDir pos dir a tab = (go pos ddi, ddi, a, coloca (Peca (Curva dir) a) pos tab)
117 where ddi = tr dir
118
119 swap = tr.tr
120
121 coloca :: a -> Posicao -> [[a]] -> [[a]]
122 coloca peca (0,0) ((_:l):ls) = (peca:l):ls
123 coloca p (x,0) ((h:t):ls) = let (a2:b2) = coloca p (x-1,0) (t:ls)
124 in (h:a2):b2
125 coloca p (x,y) (l:ls) = l : (coloca p (x,y-1) ls)
126
127 go (x,y) Norte = (x,y-1)
128 go (x,y) Sul = (x,y+1)
129 go (x,y) Este = (x+1,y)
130 go (x,y) Oeste = (x-1,y)
131
132 tr Norte = Este
133 tr Este = Sul
134 tr Sul = Oeste
135 tr Oeste = Norte