10 strat1
:: StdGen -> Strategy
String
14 strat1_worker gen Config
{ cSize
= Pos sX sY
} = strat1_worker
' gen
[]
16 strat1_worker
' :: StdGen -> [Pos
] -> Strategy
String
17 strat1_worker
' gen
[] = do
19 let (x
, gen
') = randomR (1, sX
) gen
20 (y
, gen
'') = randomR (1, sY
) gen
'
22 if vw
! p
== Hidden
then
23 move p
>> strat1_worker
' gen
'' [p
]
25 strat1_worker
' gen
'' []
26 strat1_worker
' gen
(p
: ps
) = do
28 let Exposed i
= vw
! p
30 m
= [q | q
<- a
, Marked
<- [vw
! q
]]
31 u
= [q | q
<- a
, Hidden
<- [vw
! q
]]
32 if length m
== i
then do
34 strat1_worker
' gen
([r | q
<- u
, r
<- neighbours q
, Exposed _
<- [vw
! r
]] ++ u
++ ps
)
35 else if length u
+ length m
== i
then do
37 strat1_worker
' gen
([r | q
<- u
, r
<- neighbours q
, Exposed _
<- [vw
! r
]] ++ ps
)
40 neighbours
(Pos x y
) =
41 [ Pos
(x
+ dx
) (y
+ dy
)
42 | dx
<- [if x
== 1 then 0 else -1 .. if x
== sX
then 0 else 1],
43 dy
<- [if y
== 1 then 0 else -1 .. if y
== sY
then 0 else 1],