module Labs2025
( module Labs2025
, module Tarefa0_geral
) where
import Tarefa0_geral
data Terreno
= Ar
| Agua
| Terra
| Pedra
deriving (Terreno -> Terreno -> Bool
(Terreno -> Terreno -> Bool)
-> (Terreno -> Terreno -> Bool) -> Eq Terreno
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Terreno -> Terreno -> Bool
== :: Terreno -> Terreno -> Bool
$c/= :: Terreno -> Terreno -> Bool
/= :: Terreno -> Terreno -> Bool
Eq,Eq Terreno
Eq Terreno =>
(Terreno -> Terreno -> Ordering)
-> (Terreno -> Terreno -> Bool)
-> (Terreno -> Terreno -> Bool)
-> (Terreno -> Terreno -> Bool)
-> (Terreno -> Terreno -> Bool)
-> (Terreno -> Terreno -> Terreno)
-> (Terreno -> Terreno -> Terreno)
-> Ord Terreno
Terreno -> Terreno -> Bool
Terreno -> Terreno -> Ordering
Terreno -> Terreno -> Terreno
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: Terreno -> Terreno -> Ordering
compare :: Terreno -> Terreno -> Ordering
$c< :: Terreno -> Terreno -> Bool
< :: Terreno -> Terreno -> Bool
$c<= :: Terreno -> Terreno -> Bool
<= :: Terreno -> Terreno -> Bool
$c> :: Terreno -> Terreno -> Bool
> :: Terreno -> Terreno -> Bool
$c>= :: Terreno -> Terreno -> Bool
>= :: Terreno -> Terreno -> Bool
$cmax :: Terreno -> Terreno -> Terreno
max :: Terreno -> Terreno -> Terreno
$cmin :: Terreno -> Terreno -> Terreno
min :: Terreno -> Terreno -> Terreno
Ord,Int -> Terreno -> ShowS
[Terreno] -> ShowS
Terreno -> String
(Int -> Terreno -> ShowS)
-> (Terreno -> String) -> ([Terreno] -> ShowS) -> Show Terreno
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Terreno -> ShowS
showsPrec :: Int -> Terreno -> ShowS
$cshow :: Terreno -> String
show :: Terreno -> String
$cshowList :: [Terreno] -> ShowS
showList :: [Terreno] -> ShowS
Show,ReadPrec [Terreno]
ReadPrec Terreno
Int -> ReadS Terreno
ReadS [Terreno]
(Int -> ReadS Terreno)
-> ReadS [Terreno]
-> ReadPrec Terreno
-> ReadPrec [Terreno]
-> Read Terreno
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
$creadsPrec :: Int -> ReadS Terreno
readsPrec :: Int -> ReadS Terreno
$creadList :: ReadS [Terreno]
readList :: ReadS [Terreno]
$creadPrec :: ReadPrec Terreno
readPrec :: ReadPrec Terreno
$creadListPrec :: ReadPrec [Terreno]
readListPrec :: ReadPrec [Terreno]
Read,Int -> Terreno
Terreno -> Int
Terreno -> [Terreno]
Terreno -> Terreno
Terreno -> Terreno -> [Terreno]
Terreno -> Terreno -> Terreno -> [Terreno]
(Terreno -> Terreno)
-> (Terreno -> Terreno)
-> (Int -> Terreno)
-> (Terreno -> Int)
-> (Terreno -> [Terreno])
-> (Terreno -> Terreno -> [Terreno])
-> (Terreno -> Terreno -> [Terreno])
-> (Terreno -> Terreno -> Terreno -> [Terreno])
-> Enum Terreno
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
$csucc :: Terreno -> Terreno
succ :: Terreno -> Terreno
$cpred :: Terreno -> Terreno
pred :: Terreno -> Terreno
$ctoEnum :: Int -> Terreno
toEnum :: Int -> Terreno
$cfromEnum :: Terreno -> Int
fromEnum :: Terreno -> Int
$cenumFrom :: Terreno -> [Terreno]
enumFrom :: Terreno -> [Terreno]
$cenumFromThen :: Terreno -> Terreno -> [Terreno]
enumFromThen :: Terreno -> Terreno -> [Terreno]
$cenumFromTo :: Terreno -> Terreno -> [Terreno]
enumFromTo :: Terreno -> Terreno -> [Terreno]
$cenumFromThenTo :: Terreno -> Terreno -> Terreno -> [Terreno]
enumFromThenTo :: Terreno -> Terreno -> Terreno -> [Terreno]
Enum)
type Mapa = Matriz Terreno
data TipoArma = Jetpack | Escavadora | Bazuca | Mina | Dinamite
deriving (TipoArma -> TipoArma -> Bool
(TipoArma -> TipoArma -> Bool)
-> (TipoArma -> TipoArma -> Bool) -> Eq TipoArma
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: TipoArma -> TipoArma -> Bool
== :: TipoArma -> TipoArma -> Bool
$c/= :: TipoArma -> TipoArma -> Bool
/= :: TipoArma -> TipoArma -> Bool
Eq,Eq TipoArma
Eq TipoArma =>
(TipoArma -> TipoArma -> Ordering)
-> (TipoArma -> TipoArma -> Bool)
-> (TipoArma -> TipoArma -> Bool)
-> (TipoArma -> TipoArma -> Bool)
-> (TipoArma -> TipoArma -> Bool)
-> (TipoArma -> TipoArma -> TipoArma)
-> (TipoArma -> TipoArma -> TipoArma)
-> Ord TipoArma
TipoArma -> TipoArma -> Bool
TipoArma -> TipoArma -> Ordering
TipoArma -> TipoArma -> TipoArma
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: TipoArma -> TipoArma -> Ordering
compare :: TipoArma -> TipoArma -> Ordering
$c< :: TipoArma -> TipoArma -> Bool
< :: TipoArma -> TipoArma -> Bool
$c<= :: TipoArma -> TipoArma -> Bool
<= :: TipoArma -> TipoArma -> Bool
$c> :: TipoArma -> TipoArma -> Bool
> :: TipoArma -> TipoArma -> Bool
$c>= :: TipoArma -> TipoArma -> Bool
>= :: TipoArma -> TipoArma -> Bool
$cmax :: TipoArma -> TipoArma -> TipoArma
max :: TipoArma -> TipoArma -> TipoArma
$cmin :: TipoArma -> TipoArma -> TipoArma
min :: TipoArma -> TipoArma -> TipoArma
Ord,Int -> TipoArma -> ShowS
[TipoArma] -> ShowS
TipoArma -> String
(Int -> TipoArma -> ShowS)
-> (TipoArma -> String) -> ([TipoArma] -> ShowS) -> Show TipoArma
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> TipoArma -> ShowS
showsPrec :: Int -> TipoArma -> ShowS
$cshow :: TipoArma -> String
show :: TipoArma -> String
$cshowList :: [TipoArma] -> ShowS
showList :: [TipoArma] -> ShowS
Show,ReadPrec [TipoArma]
ReadPrec TipoArma
Int -> ReadS TipoArma
ReadS [TipoArma]
(Int -> ReadS TipoArma)
-> ReadS [TipoArma]
-> ReadPrec TipoArma
-> ReadPrec [TipoArma]
-> Read TipoArma
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
$creadsPrec :: Int -> ReadS TipoArma
readsPrec :: Int -> ReadS TipoArma
$creadList :: ReadS [TipoArma]
readList :: ReadS [TipoArma]
$creadPrec :: ReadPrec TipoArma
readPrec :: ReadPrec TipoArma
$creadListPrec :: ReadPrec [TipoArma]
readListPrec :: ReadPrec [TipoArma]
Read,Int -> TipoArma
TipoArma -> Int
TipoArma -> [TipoArma]
TipoArma -> TipoArma
TipoArma -> TipoArma -> [TipoArma]
TipoArma -> TipoArma -> TipoArma -> [TipoArma]
(TipoArma -> TipoArma)
-> (TipoArma -> TipoArma)
-> (Int -> TipoArma)
-> (TipoArma -> Int)
-> (TipoArma -> [TipoArma])
-> (TipoArma -> TipoArma -> [TipoArma])
-> (TipoArma -> TipoArma -> [TipoArma])
-> (TipoArma -> TipoArma -> TipoArma -> [TipoArma])
-> Enum TipoArma
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
$csucc :: TipoArma -> TipoArma
succ :: TipoArma -> TipoArma
$cpred :: TipoArma -> TipoArma
pred :: TipoArma -> TipoArma
$ctoEnum :: Int -> TipoArma
toEnum :: Int -> TipoArma
$cfromEnum :: TipoArma -> Int
fromEnum :: TipoArma -> Int
$cenumFrom :: TipoArma -> [TipoArma]
enumFrom :: TipoArma -> [TipoArma]
$cenumFromThen :: TipoArma -> TipoArma -> [TipoArma]
enumFromThen :: TipoArma -> TipoArma -> [TipoArma]
$cenumFromTo :: TipoArma -> TipoArma -> [TipoArma]
enumFromTo :: TipoArma -> TipoArma -> [TipoArma]
$cenumFromThenTo :: TipoArma -> TipoArma -> TipoArma -> [TipoArma]
enumFromThenTo :: TipoArma -> TipoArma -> TipoArma -> [TipoArma]
Enum)
data VidaMinhoca
= Viva Int
| Morta
deriving (VidaMinhoca -> VidaMinhoca -> Bool
(VidaMinhoca -> VidaMinhoca -> Bool)
-> (VidaMinhoca -> VidaMinhoca -> Bool) -> Eq VidaMinhoca
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: VidaMinhoca -> VidaMinhoca -> Bool
== :: VidaMinhoca -> VidaMinhoca -> Bool
$c/= :: VidaMinhoca -> VidaMinhoca -> Bool
/= :: VidaMinhoca -> VidaMinhoca -> Bool
Eq,Eq VidaMinhoca
Eq VidaMinhoca =>
(VidaMinhoca -> VidaMinhoca -> Ordering)
-> (VidaMinhoca -> VidaMinhoca -> Bool)
-> (VidaMinhoca -> VidaMinhoca -> Bool)
-> (VidaMinhoca -> VidaMinhoca -> Bool)
-> (VidaMinhoca -> VidaMinhoca -> Bool)
-> (VidaMinhoca -> VidaMinhoca -> VidaMinhoca)
-> (VidaMinhoca -> VidaMinhoca -> VidaMinhoca)
-> Ord VidaMinhoca
VidaMinhoca -> VidaMinhoca -> Bool
VidaMinhoca -> VidaMinhoca -> Ordering
VidaMinhoca -> VidaMinhoca -> VidaMinhoca
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: VidaMinhoca -> VidaMinhoca -> Ordering
compare :: VidaMinhoca -> VidaMinhoca -> Ordering
$c< :: VidaMinhoca -> VidaMinhoca -> Bool
< :: VidaMinhoca -> VidaMinhoca -> Bool
$c<= :: VidaMinhoca -> VidaMinhoca -> Bool
<= :: VidaMinhoca -> VidaMinhoca -> Bool
$c> :: VidaMinhoca -> VidaMinhoca -> Bool
> :: VidaMinhoca -> VidaMinhoca -> Bool
$c>= :: VidaMinhoca -> VidaMinhoca -> Bool
>= :: VidaMinhoca -> VidaMinhoca -> Bool
$cmax :: VidaMinhoca -> VidaMinhoca -> VidaMinhoca
max :: VidaMinhoca -> VidaMinhoca -> VidaMinhoca
$cmin :: VidaMinhoca -> VidaMinhoca -> VidaMinhoca
min :: VidaMinhoca -> VidaMinhoca -> VidaMinhoca
Ord,Int -> VidaMinhoca -> ShowS
[VidaMinhoca] -> ShowS
VidaMinhoca -> String
(Int -> VidaMinhoca -> ShowS)
-> (VidaMinhoca -> String)
-> ([VidaMinhoca] -> ShowS)
-> Show VidaMinhoca
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> VidaMinhoca -> ShowS
showsPrec :: Int -> VidaMinhoca -> ShowS
$cshow :: VidaMinhoca -> String
show :: VidaMinhoca -> String
$cshowList :: [VidaMinhoca] -> ShowS
showList :: [VidaMinhoca] -> ShowS
Show,ReadPrec [VidaMinhoca]
ReadPrec VidaMinhoca
Int -> ReadS VidaMinhoca
ReadS [VidaMinhoca]
(Int -> ReadS VidaMinhoca)
-> ReadS [VidaMinhoca]
-> ReadPrec VidaMinhoca
-> ReadPrec [VidaMinhoca]
-> Read VidaMinhoca
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
$creadsPrec :: Int -> ReadS VidaMinhoca
readsPrec :: Int -> ReadS VidaMinhoca
$creadList :: ReadS [VidaMinhoca]
readList :: ReadS [VidaMinhoca]
$creadPrec :: ReadPrec VidaMinhoca
readPrec :: ReadPrec VidaMinhoca
$creadListPrec :: ReadPrec [VidaMinhoca]
readListPrec :: ReadPrec [VidaMinhoca]
Read)
data Minhoca = Minhoca
{ Minhoca -> Maybe Posicao
posicaoMinhoca :: Maybe Posicao
, Minhoca -> VidaMinhoca
vidaMinhoca :: VidaMinhoca
, Minhoca -> Int
jetpackMinhoca :: Int
, Minhoca -> Int
escavadoraMinhoca :: Int
, Minhoca -> Int
bazucaMinhoca :: Int
, Minhoca -> Int
minaMinhoca :: Int
, Minhoca -> Int
dinamiteMinhoca :: Int
}
deriving (Minhoca -> Minhoca -> Bool
(Minhoca -> Minhoca -> Bool)
-> (Minhoca -> Minhoca -> Bool) -> Eq Minhoca
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Minhoca -> Minhoca -> Bool
== :: Minhoca -> Minhoca -> Bool
$c/= :: Minhoca -> Minhoca -> Bool
/= :: Minhoca -> Minhoca -> Bool
Eq,Eq Minhoca
Eq Minhoca =>
(Minhoca -> Minhoca -> Ordering)
-> (Minhoca -> Minhoca -> Bool)
-> (Minhoca -> Minhoca -> Bool)
-> (Minhoca -> Minhoca -> Bool)
-> (Minhoca -> Minhoca -> Bool)
-> (Minhoca -> Minhoca -> Minhoca)
-> (Minhoca -> Minhoca -> Minhoca)
-> Ord Minhoca
Minhoca -> Minhoca -> Bool
Minhoca -> Minhoca -> Ordering
Minhoca -> Minhoca -> Minhoca
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: Minhoca -> Minhoca -> Ordering
compare :: Minhoca -> Minhoca -> Ordering
$c< :: Minhoca -> Minhoca -> Bool
< :: Minhoca -> Minhoca -> Bool
$c<= :: Minhoca -> Minhoca -> Bool
<= :: Minhoca -> Minhoca -> Bool
$c> :: Minhoca -> Minhoca -> Bool
> :: Minhoca -> Minhoca -> Bool
$c>= :: Minhoca -> Minhoca -> Bool
>= :: Minhoca -> Minhoca -> Bool
$cmax :: Minhoca -> Minhoca -> Minhoca
max :: Minhoca -> Minhoca -> Minhoca
$cmin :: Minhoca -> Minhoca -> Minhoca
min :: Minhoca -> Minhoca -> Minhoca
Ord,Int -> Minhoca -> ShowS
[Minhoca] -> ShowS
Minhoca -> String
(Int -> Minhoca -> ShowS)
-> (Minhoca -> String) -> ([Minhoca] -> ShowS) -> Show Minhoca
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Minhoca -> ShowS
showsPrec :: Int -> Minhoca -> ShowS
$cshow :: Minhoca -> String
show :: Minhoca -> String
$cshowList :: [Minhoca] -> ShowS
showList :: [Minhoca] -> ShowS
Show,ReadPrec [Minhoca]
ReadPrec Minhoca
Int -> ReadS Minhoca
ReadS [Minhoca]
(Int -> ReadS Minhoca)
-> ReadS [Minhoca]
-> ReadPrec Minhoca
-> ReadPrec [Minhoca]
-> Read Minhoca
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
$creadsPrec :: Int -> ReadS Minhoca
readsPrec :: Int -> ReadS Minhoca
$creadList :: ReadS [Minhoca]
readList :: ReadS [Minhoca]
$creadPrec :: ReadPrec Minhoca
readPrec :: ReadPrec Minhoca
$creadListPrec :: ReadPrec [Minhoca]
readListPrec :: ReadPrec [Minhoca]
Read)
type Ticks = Int
type NumMinhoca = Int
type NumObjeto = Int
data Objeto
= Disparo
{ Objeto -> Posicao
posicaoDisparo :: Posicao
, Objeto -> Direcao
direcaoDisparo :: Direcao
, Objeto -> TipoArma
tipoDisparo :: TipoArma
, Objeto -> Maybe Int
tempoDisparo :: Maybe Ticks
, Objeto -> Int
donoDisparo :: NumMinhoca
}
| Barril
{ Objeto -> Posicao
posicaoBarril :: Posicao
, Objeto -> Bool
explodeBarril :: Bool
}
deriving (Objeto -> Objeto -> Bool
(Objeto -> Objeto -> Bool)
-> (Objeto -> Objeto -> Bool) -> Eq Objeto
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Objeto -> Objeto -> Bool
== :: Objeto -> Objeto -> Bool
$c/= :: Objeto -> Objeto -> Bool
/= :: Objeto -> Objeto -> Bool
Eq,Eq Objeto
Eq Objeto =>
(Objeto -> Objeto -> Ordering)
-> (Objeto -> Objeto -> Bool)
-> (Objeto -> Objeto -> Bool)
-> (Objeto -> Objeto -> Bool)
-> (Objeto -> Objeto -> Bool)
-> (Objeto -> Objeto -> Objeto)
-> (Objeto -> Objeto -> Objeto)
-> Ord Objeto
Objeto -> Objeto -> Bool
Objeto -> Objeto -> Ordering
Objeto -> Objeto -> Objeto
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: Objeto -> Objeto -> Ordering
compare :: Objeto -> Objeto -> Ordering
$c< :: Objeto -> Objeto -> Bool
< :: Objeto -> Objeto -> Bool
$c<= :: Objeto -> Objeto -> Bool
<= :: Objeto -> Objeto -> Bool
$c> :: Objeto -> Objeto -> Bool
> :: Objeto -> Objeto -> Bool
$c>= :: Objeto -> Objeto -> Bool
>= :: Objeto -> Objeto -> Bool
$cmax :: Objeto -> Objeto -> Objeto
max :: Objeto -> Objeto -> Objeto
$cmin :: Objeto -> Objeto -> Objeto
min :: Objeto -> Objeto -> Objeto
Ord,Int -> Objeto -> ShowS
[Objeto] -> ShowS
Objeto -> String
(Int -> Objeto -> ShowS)
-> (Objeto -> String) -> ([Objeto] -> ShowS) -> Show Objeto
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Objeto -> ShowS
showsPrec :: Int -> Objeto -> ShowS
$cshow :: Objeto -> String
show :: Objeto -> String
$cshowList :: [Objeto] -> ShowS
showList :: [Objeto] -> ShowS
Show,ReadPrec [Objeto]
ReadPrec Objeto
Int -> ReadS Objeto
ReadS [Objeto]
(Int -> ReadS Objeto)
-> ReadS [Objeto]
-> ReadPrec Objeto
-> ReadPrec [Objeto]
-> Read Objeto
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
$creadsPrec :: Int -> ReadS Objeto
readsPrec :: Int -> ReadS Objeto
$creadList :: ReadS [Objeto]
readList :: ReadS [Objeto]
$creadPrec :: ReadPrec Objeto
readPrec :: ReadPrec Objeto
$creadListPrec :: ReadPrec [Objeto]
readListPrec :: ReadPrec [Objeto]
Read)
data Estado = Estado
{ Estado -> Mapa
mapaEstado :: Mapa
, Estado -> [Objeto]
objetosEstado :: [Objeto]
, Estado -> [Minhoca]
minhocasEstado :: [Minhoca]
}
deriving (Estado -> Estado -> Bool
(Estado -> Estado -> Bool)
-> (Estado -> Estado -> Bool) -> Eq Estado
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Estado -> Estado -> Bool
== :: Estado -> Estado -> Bool
$c/= :: Estado -> Estado -> Bool
/= :: Estado -> Estado -> Bool
Eq,Eq Estado
Eq Estado =>
(Estado -> Estado -> Ordering)
-> (Estado -> Estado -> Bool)
-> (Estado -> Estado -> Bool)
-> (Estado -> Estado -> Bool)
-> (Estado -> Estado -> Bool)
-> (Estado -> Estado -> Estado)
-> (Estado -> Estado -> Estado)
-> Ord Estado
Estado -> Estado -> Bool
Estado -> Estado -> Ordering
Estado -> Estado -> Estado
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: Estado -> Estado -> Ordering
compare :: Estado -> Estado -> Ordering
$c< :: Estado -> Estado -> Bool
< :: Estado -> Estado -> Bool
$c<= :: Estado -> Estado -> Bool
<= :: Estado -> Estado -> Bool
$c> :: Estado -> Estado -> Bool
> :: Estado -> Estado -> Bool
$c>= :: Estado -> Estado -> Bool
>= :: Estado -> Estado -> Bool
$cmax :: Estado -> Estado -> Estado
max :: Estado -> Estado -> Estado
$cmin :: Estado -> Estado -> Estado
min :: Estado -> Estado -> Estado
Ord,Int -> Estado -> ShowS
[Estado] -> ShowS
Estado -> String
(Int -> Estado -> ShowS)
-> (Estado -> String) -> ([Estado] -> ShowS) -> Show Estado
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Estado -> ShowS
showsPrec :: Int -> Estado -> ShowS
$cshow :: Estado -> String
show :: Estado -> String
$cshowList :: [Estado] -> ShowS
showList :: [Estado] -> ShowS
Show,ReadPrec [Estado]
ReadPrec Estado
Int -> ReadS Estado
ReadS [Estado]
(Int -> ReadS Estado)
-> ReadS [Estado]
-> ReadPrec Estado
-> ReadPrec [Estado]
-> Read Estado
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
$creadsPrec :: Int -> ReadS Estado
readsPrec :: Int -> ReadS Estado
$creadList :: ReadS [Estado]
readList :: ReadS [Estado]
$creadPrec :: ReadPrec Estado
readPrec :: ReadPrec Estado
$creadListPrec :: ReadPrec [Estado]
readListPrec :: ReadPrec [Estado]
Read)
data Jogada
= Dispara TipoArma Direcao
| Move Direcao
deriving (Jogada -> Jogada -> Bool
(Jogada -> Jogada -> Bool)
-> (Jogada -> Jogada -> Bool) -> Eq Jogada
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Jogada -> Jogada -> Bool
== :: Jogada -> Jogada -> Bool
$c/= :: Jogada -> Jogada -> Bool
/= :: Jogada -> Jogada -> Bool
Eq,Eq Jogada
Eq Jogada =>
(Jogada -> Jogada -> Ordering)
-> (Jogada -> Jogada -> Bool)
-> (Jogada -> Jogada -> Bool)
-> (Jogada -> Jogada -> Bool)
-> (Jogada -> Jogada -> Bool)
-> (Jogada -> Jogada -> Jogada)
-> (Jogada -> Jogada -> Jogada)
-> Ord Jogada
Jogada -> Jogada -> Bool
Jogada -> Jogada -> Ordering
Jogada -> Jogada -> Jogada
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: Jogada -> Jogada -> Ordering
compare :: Jogada -> Jogada -> Ordering
$c< :: Jogada -> Jogada -> Bool
< :: Jogada -> Jogada -> Bool
$c<= :: Jogada -> Jogada -> Bool
<= :: Jogada -> Jogada -> Bool
$c> :: Jogada -> Jogada -> Bool
> :: Jogada -> Jogada -> Bool
$c>= :: Jogada -> Jogada -> Bool
>= :: Jogada -> Jogada -> Bool
$cmax :: Jogada -> Jogada -> Jogada
max :: Jogada -> Jogada -> Jogada
$cmin :: Jogada -> Jogada -> Jogada
min :: Jogada -> Jogada -> Jogada
Ord,Int -> Jogada -> ShowS
[Jogada] -> ShowS
Jogada -> String
(Int -> Jogada -> ShowS)
-> (Jogada -> String) -> ([Jogada] -> ShowS) -> Show Jogada
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Jogada -> ShowS
showsPrec :: Int -> Jogada -> ShowS
$cshow :: Jogada -> String
show :: Jogada -> String
$cshowList :: [Jogada] -> ShowS
showList :: [Jogada] -> ShowS
Show,ReadPrec [Jogada]
ReadPrec Jogada
Int -> ReadS Jogada
ReadS [Jogada]
(Int -> ReadS Jogada)
-> ReadS [Jogada]
-> ReadPrec Jogada
-> ReadPrec [Jogada]
-> Read Jogada
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
$creadsPrec :: Int -> ReadS Jogada
readsPrec :: Int -> ReadS Jogada
$creadList :: ReadS [Jogada]
readList :: ReadS [Jogada]
$creadPrec :: ReadPrec Jogada
readPrec :: ReadPrec Jogada
$creadListPrec :: ReadPrec [Jogada]
readListPrec :: ReadPrec [Jogada]
Read)