Board

Representation of Board

In[]:=
bd={11686282922941415355493027,7253554917687775048237045,7218924300030925557375733,7253554197100839384907765,16490244781409523165428135,16504485596616872653356199,7253370450247037952065525,7218856061489371493999349,7253554917676779931959285,15312936325352857506785958,109891396237601865728,109887830907940044800,10477288603294946054417058,17295229965476823040,10477233045576447273052834,109891244367558279168,109887830907940044800,11686215114307112556866211,7253554125059738289831925,7223522828427531474543605,7237745196890807252854517,7253554917687775048237045,7223523160079093336744949,7201718775884924390278645,7237745816781541426898677,7253554917676779931959285,15313060381789700926122662};
In[]:=
decode[bd_]:=Module[{board,bead,all},all=Map[IntegerDigits[#,16,21]&,bd];board=all;bead=all;​​board=board/.{150};bead=bead/.{1515,_Integer0};{board,bead}​​];​​{board,beads}=decode[bd];
In[]:=
board//Grid
Out[]=
9
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
3
5
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
5
5
0
8
10
10
10
11
10
2
0
1
0
8
10
11
10
10
10
2
0
5
5
0
0
0
0
0
5
0
0
0
5
0
0
0
5
0
0
0
0
0
5
13
10
3
0
1
0
5
0
9
10
14
10
3
0
5
0
1
0
9
10
7
13
10
6
0
5
0
4
0
12
10
10
10
6
0
4
0
5
0
12
10
7
5
0
0
0
5
0
0
0
0
0
0
0
0
0
0
0
5
0
0
0
5
5
0
8
10
6
0
8
10
2
0
1
0
8
10
2
0
12
10
2
0
5
5
0
0
0
0
0
0
0
0
0
5
0
0
0
0
0
0
0
0
0
5
12
10
10
10
3
0
1
0
9
10
14
10
3
0
1
0
9
10
10
10
6
0
0
0
0
5
0
5
0
12
10
10
10
6
0
5
0
5
0
0
0
0
0
0
0
0
5
0
5
0
0
0
0
0
0
0
5
0
5
0
0
0
0
8
10
10
10
6
0
4
0
9
10
10
10
3
0
4
0
12
10
10
10
2
0
0
0
0
0
0
0
0
5
0
0
0
5
0
0
0
0
0
0
0
0
8
10
10
10
3
0
1
0
5
0
0
0
5
0
1
0
9
10
10
10
2
0
0
0
0
5
0
5
0
12
2
0
8
6
0
5
0
5
0
0
0
0
0
0
0
0
5
0
5
0
0
0
0
0
0
0
5
0
5
0
0
0
0
9
10
10
10
6
0
13
10
2
0
1
0
8
10
7
0
12
10
10
10
3
5
0
0
0
0
0
5
0
0
0
5
0
0
0
5
0
0
0
0
0
5
5
0
9
10
3
0
5
0
9
10
14
10
3
0
5
0
9
10
3
0
5
5
0
12
10
6
0
4
0
12
10
10
10
6
0
4
0
12
10
6
0
5
5
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
5
5
0
9
10
3
0
9
10
3
0
1
0
9
10
3
0
9
10
3
0
5
5
0
5
0
5
0
5
0
5
0
5
0
5
0
5
0
5
0
5
0
5
5
0
12
10
6
0
12
10
6
0
5
0
12
10
6
0
12
10
6
0
5
5
0
0
0
0
0
0
0
0
0
5
0
0
0
0
0
0
0
0
0
5
12
10
10
10
10
10
10
10
10
10
14
10
10
10
10
10
10
10
10
10
6

Beads on the board

In[]:=
beads//Grid
Out[]=
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
15
15
15
15
15
15
15
15
15
15
15
15
15
15
15
15
15
15
15
0
0
15
0
0
0
0
0
0
0
15
0
15
0
0
0
0
0
0
0
15
0
0
15
15
15
15
15
0
15
15
15
0
15
15
15
0
15
15
15
15
15
0
0
0
0
15
0
15
0
15
0
0
0
0
0
15
0
15
0
15
0
0
0
0
0
0
15
0
15
0
15
0
0
0
0
0
15
0
15
0
15
0
0
0
0
15
15
15
0
15
15
15
15
15
15
15
15
15
15
15
0
15
15
15
0
0
15
0
0
0
15
0
0
0
15
0
15
0
0
0
15
0
0
0
15
0
0
15
15
15
15
15
15
15
15
15
0
15
15
15
15
15
15
15
15
15
0
0
0
0
0
0
15
0
0
0
0
0
0
0
0
0
15
0
0
0
0
0
0
0
0
0
0
15
0
0
0
0
0
0
0
0
0
15
0
0
0
0
0
0
0
0
0
0
15
0
0
0
0
0
0
0
0
0
15
0
0
0
0
0
0
0
0
0
0
15
0
0
0
0
0
0
0
0
0
15
0
0
0
0
0
0
0
0
0
0
15
0
0
0
0
0
0
0
0
0
15
0
0
0
0
0
0
0
0
0
0
15
0
0
0
0
0
0
0
0
0
15
0
0
0
0
0
0
0
0
0
0
15
0
0
0
0
0
0
0
0
0
15
0
0
0
0
0
0
0
0
0
0
15
0
0
0
0
0
0
0
0
0
15
0
0
0
0
0
0
0
0
0
0
15
0
0
0
0
0
0
0
0
0
15
0
0
0
0
0
0
15
15
15
15
15
0
0
0
0
0
0
0
0
0
15
15
15
15
15
0
0
15
0
0
0
15
0
0
0
0
0
0
0
0
0
15
0
0
0
15
0
0
15
0
0
0
15
0
0
0
0
0
0
0
0
0
15
0
0
0
15
0
0
15
15
15
15
15
15
15
15
15
15
15
15
15
15
15
15
15
15
15
0
0
15
0
0
0
15
0
0
0
15
0
15
0
0
0
15
0
0
0
15
0
0
15
0
0
0
15
0
0
0
15
0
15
0
0
0
15
0
0
0
15
0
0
15
0
0
0
15
0
0
0
15
0
15
0
0
0
15
0
0
0
15
0
0
15
15
15
15
15
15
15
15
15
0
15
15
15
15
15
15
15
15
15
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0

Modular boards

In[]:=
gX[x_]:=Mod[x,21]+1;​​gY[y_]:=Mod[y,27]+1;

Objects on Board:

In[]:=
drawCell[k_,{y_,x_}]:=If[k==15,Disk[{x,y},0.2],{If[BitAnd[k,1]1,Line[{{x,y},{x,y+1/2}}],Nothing],​​If[BitAnd[k,2]2,Line[{{x,y},{x-1/2,y}}],Nothing],​​If[BitAnd[k,4]4,Line[{{x,y},{x,y-1/2}}],Nothing],​​If[BitAnd[k,8]8,Line[{{x,y},{x+1/2,y}}],Nothing]}]
In[]:=
Table[Graphics[{Blue,Thick,drawCell[i,{1,1}]},PlotRange{{0,2},{0,2}}],{i,1,14}]
Out[]=

,
,
,
,
,
,
,
,
,
,
,
,
,

In[]:=
drawBead[bd_]:={Green,Flatten@MapIndexed[drawCell,bd,{2}]}
In[]:=
drawBoard[bd_]:={Blue,Thick,Flatten@MapIndexed[drawCell,bd,{2}]}
In[]:=
Graphics[{drawBoard[board],drawBead[beads]}]
Out[]=

Draw 4 ghosts

Draw pacman, pacman is represented as {x,y,s,d}, position {x,y} move in direction d and width of mouth s.

Movement

give next move coordinates {x, y} move delta in direction d:

test if objects at {x,y} could move delta position in direction d on board bd.

Ghost movement, ghost is represented as {x, y, d}, position {x, y} and current move direction d.

Pacman {x,y,s,d} and 4 ghosts {x1,y1,d1},{x2,y2,d2}, {x3,x3,d3},{x4,y4,d4}: