7 module Strat1
(strat1
) where
14 strat1
= defaultStrategy
{
15 sName
= "Strategy One",
16 sAuthor
= "Bertram Felgenhauer <int-e@gmx.de>",
18 "A first attempt at implementing the Single Point Strategy. It's \
19 \missing some forced inferences though.",
23 worker
:: Config
-> StdGen -> StrategyM
String
24 worker cfg
@Config
{ cSize
= Pos sX sY
} gen
= worker
' gen
[]
26 worker
' :: StdGen -> [Pos
] -> StrategyM
String
29 let (x
, gen
') = randomR (1, sX
) gen
30 (y
, gen
'') = randomR (1, sY
) gen
'
32 if vw
! p
== Hidden
then
33 move p
>> worker
' gen
'' [p
]
36 worker
' gen
(p
: ps
) = do
38 let Exposed i
= vw
! p
40 m
= [q | q
<- a
, Marked
<- [vw
! q
]]
41 u
= [q | q
<- a
, Hidden
<- [vw
! q
]]
42 if length m
== i
then do
44 worker
' gen
([r | q
<- u
, r
<- neighbours cfg q
, Exposed _
<- [vw
! r
]] ++ u
++ ps
)
45 else if length u
+ length m
== i
then do
47 worker
' gen
([r | q
<- u
, r
<- neighbours cfg q
, Exposed _
<- [vw
! r
]] ++ ps
)