package Ġgame Ċ Ċ import Ġattribute . Colour Ċ import Ġattribute . Height Ċ import Ġattribute . Hole Ċ import Ġattribute . Shape Ċ Ċ class ĠPlayer ( val Ġcolour : ĠColour ) Ġ{ ĊĊĠĠĠ Ġvar Ġmoves Ġ= Ġ 0 ĊĠĠĠ Ġvar Ġpieces Ġ= ĠPlayer Pieces ( colour ). pieces ĊĊĠĠĠ Ġprivate Ġfun Ġassert Line ( line : ĠArray < Piece >, Ġp : ĠPiece ) Ġ: ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ( line . filter Ġ{ Ġit . shape Ġ== Ġp . shape Ġ}. size Ġ< Ġ 2 Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline . filter Ġ{ Ġit . height Ġ== Ġp . height Ġ}. size Ġ< Ġ 2 Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline . filter Ġ{ Ġit . hole Ġ== Ġp . hole Ġ}. size Ġ< Ġ 2 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcheck Lines At Pos ( grid : ĠArray < Array < Piece >>, Ġline : ĠArray < Piece >, Ġi : ĠInt , Ġj : ĠInt , Ġp : ĠPiece , Ġmultiplier : ĠInt ) Ġ: ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġline X Ġ= ĠarrayOf ( grid [ i ][ 0 ], Ġgrid [ i ][ 1 ], Ġgrid [ i ][ 2 ], Ġgrid [ i ][ 3 ]) ĊĠĠĠĠĠĠĠ Ġval Ġline Y Ġ= ĠarrayOf ( grid [ 0 ][ j ], Ġgrid [ 1 ][ j ], Ġgrid [ 2 ][ j ], Ġgrid [ 3 ][ j ]) ĊĠĠĠĠĠĠĠ Ġval Ġline D Ġ= ĠarrayOf ( grid [ 0 ][ 0 ], Ġgrid [ 1 ][ 1 ], Ġgrid [ 2 ][ 2 ], Ġgrid [ 3 ][ 3 ]) ĊĠĠĠĠĠĠĠ Ġval Ġline R Ġ= ĠarrayOf ( grid [ 0 ][ 3 ], Ġgrid [ 1 ][ 2 ], Ġgrid [ 2 ][ 1 ], Ġgrid [ 3 ][ 0 ]) ĊĠĠĠĠĠĠĠ Ġif Ġ( line X . content Equals ( line )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( assert Line ( line Y , Ġp )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i Ġ== Ġj Ġ&& Ġ! line D . content Equals ( line )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( assert Line ( line D , Ġp )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 8 Ġ* Ġmultiplier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ(( i Ġ== Ġ 0 Ġ&& Ġj Ġ== Ġ 3 Ġ|| Ġi Ġ== Ġ 1 Ġ&& Ġj Ġ== Ġ 2 Ġ|| Ġi Ġ== Ġ 2 Ġ&& Ġj Ġ== Ġ 1 Ġ|| Ġi Ġ== Ġ 3 Ġ&& Ġj Ġ== Ġ 0 ) Ġ&& Ġ! line R . content Equals ( line )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( assert Line ( line R , Ġp )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 8 Ġ* Ġmultiplier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 8 Ġ* Ġmultiplier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ- 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( line Y . content Equals ( line )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( assert Line ( line X , Ġp )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i Ġ== Ġj ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( assert Line ( line D , Ġp )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 8 Ġ* Ġmultiplier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( i Ġ== Ġ 0 Ġ&& Ġj Ġ== Ġ 3 Ġ|| Ġi Ġ== Ġ 1 Ġ&& Ġj Ġ== Ġ 2 Ġ|| Ġi Ġ== Ġ 2 Ġ&& Ġj Ġ== Ġ 1 Ġ|| Ġi Ġ== Ġ 3 Ġ&& Ġj Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( assert Line ( line R , Ġp )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 8 Ġ* Ġmultiplier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 8 Ġ* Ġmultiplier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ- 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif ( line D . content Equals ( line )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( assert Line ( line X , Ġp ) Ġ&& Ġassert Line ( line Y , Ġp )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 8 Ġ* Ġmultiplier ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ- 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif ( line R . content Equals ( line )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( assert Line ( line X , Ġp ) Ġ&& Ġassert Line ( line Y , Ġp )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 8 Ġ* Ġmultiplier ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ- 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcheck Line ( line : ĠArray < Piece >, Ġmap : ĠMutable Map < Piece , ĠInt >, Ġgrid : ĠArray < Array < Piece >>, Ġi : ĠInt , Ġj : ĠInt ) Ġ: ĠMutable Map < Piece , ĠInt > Ġ{ ĊĠĠĠĠĠĠĠ Ġmap . forEach Ġ{ Ġp , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( line . filter Ġ{ Ġit . shape Ġ== Ġp . shape Ġ}. size Ġ< Ġ 2 ) Ġmap [ p ] Ġ= Ġmap [ p ] !! Ġ+ Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( line . filter Ġ{ Ġit . shape Ġ== Ġp . shape Ġ}. size Ġ== Ġ 3 ) Ġmap [ p ] Ġ= Ġmap [ p ] !! Ġ+ Ġ 6 4 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( line . filter Ġ{ Ġit . height Ġ== Ġp . height Ġ}. size Ġ< Ġ 2 ) Ġmap [ p ] Ġ= Ġmap [ p ] !! Ġ+ Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( line . filter Ġ{ Ġit . height Ġ== Ġp . height Ġ}. size Ġ== Ġ 3 ) Ġmap [ p ] Ġ= Ġmap [ p ] !! Ġ+ Ġ 6 4 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( line . filter Ġ{ Ġit . hole Ġ== Ġp . hole Ġ}. size Ġ< Ġ 2 ) Ġmap [ p ] Ġ= Ġmap [ p ] !! Ġ+ Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( line . filter Ġ{ Ġit . hole Ġ== Ġp . hole Ġ}. size Ġ== Ġ 3 ) Ġmap [ p ] Ġ= Ġmap [ p ] !! Ġ+ Ġ 6 4 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( line . filter Ġ{ Ġit . colour Ġ== Ġp . colour Ġ}. size Ġ< Ġ 4 ) Ġmap [ p ] Ġ= Ġmap [ p ] !! Ġ+ Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( line . filter Ġ{ Ġit . colour Ġ== Ġp . colour Ġ}. size Ġ>= Ġ 2 Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline . none Ġ{ Ġit . colour Ġ!= Ġp . colour Ġ&& Ġit . colour Ġ!= ĠColour . EMPTY Ġ} Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert Line ( line , Ġp )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġadded Ġ= Ġcheck Lines At Pos ( grid , Ġline , Ġi , Ġj , Ġp , Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" (${ i + 1 }, ${ j + 1 }) Ġ$ added Ġadded Ġfor Ġline Ġwith Ġ 2 Ġor Ġmore Ġsame Ġcolour ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap [ p ] Ġ= Ġmap [ p ] !! Ġ+ Ġadded ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( line . filter Ġ{ Ġit . colour Ġ!= Ġp . colour Ġ&& Ġit . colour Ġ!= ĠColour . EMPTY Ġ}. size Ġ== Ġ 3 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġadded Ġ= Ġcheck Lines At Pos ( grid , Ġline , Ġi , Ġj , Ġp , Ġ 8 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" (${ i + 1 }, ${ j + 1 }) Ġ$ added Ġadded Ġto Ġprevent Ġwin Ġfor Ġ 3 Ġsame ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap [ p ] Ġ= Ġmap [ p ] !! Ġ+ Ġadded ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġmap ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġchoose Move ( game : ĠGame ) Ġ: ĠTrip le < Int , ĠInt , ĠInt > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġgrid Ġ= Ġgame . grid ĊĠĠĠĠĠĠĠ Ġval Ġscores Ġ= ĠArray Ġ( 4 ) Ġ{ ĠArray Ġ( 4 ) Ġ{ Ġpieces . map Ġ{ Ġp Ġ-> Ġp Ġto Ġ 0 Ġ}. toMap (). to Mutable Map ()} Ġ} ĊĠĠĠĠĠĠĠ Ġcheck ( grid . size Ġ== Ġscores . size ) ĊĊĠĠĠĠĠĠĠ Ġgrid . forEach Indexed Ġ{ Ġi , Ġps Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġps . forEach Indexed Ġ{ Ġj , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( grid [ i ][ j ]. colour Ġ== ĠColour . EMPTY ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscores [ i ][ j ] Ġ= Ġcheck Line ( array Of ( grid [ i ][ 0 ], Ġgrid [ i ][ 1 ], Ġgrid [ i ][ 2 ], Ġgrid [ i ][ 3 ]), Ġscores [ i ][ j ], Ġgrid , Ġi , Ġj ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscores [ i ][ j ] Ġ= Ġcheck Line ( array Of ( grid [ 0 ][ j ], Ġgrid [ 1 ][ j ], Ġgrid [ 2 ][ j ], Ġgrid [ 3 ][ j ]), Ġscores [ i ][ j ], Ġgrid , Ġi , Ġj ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( i == j ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmap Ġ= Ġcheck Line ( array Of ( grid [ 0 ][ 0 ], Ġgrid [ 1 ][ 1 ], Ġgrid [ 2 ][ 2 ], Ġgrid [ 3 ][ 3 ]), Ġscores [ i ][ j ], Ġgrid , Ġi , Ġj ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscores [ i ][ j ] Ġ= Ġmap . map Values Ġ{ ĠMath . floor Div (( it . value * 2 ), 3 ) Ġ}. to Mutable Map () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif ( i Ġ== Ġ 0 Ġ&& Ġj Ġ== Ġ 3 Ġ|| Ġi Ġ== Ġ 1 Ġ&& Ġj Ġ== Ġ 2 Ġ|| Ġi Ġ== Ġ 2 Ġ&& Ġj Ġ== Ġ 1 Ġ|| Ġi Ġ== Ġ 3 Ġ&& Ġj Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmap Ġ= Ġcheck Line ( array Of ( grid [ 0 ][ 3 ], Ġgrid [ 1 ][ 2 ], Ġgrid [ 2 ][ 1 ], Ġgrid [ 3 ][ 0 ]), Ġscores [ i ][ j ], Ġgrid , Ġi , Ġj ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscores [ i ][ j ] Ġ= Ġmap . map Values Ġ{ ĠMath . floor Div (( it . value * 2 ), 3 ) Ġ}. to Mutable Map () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġvar Ġscores 2 : ĠArray < Array < Int >> Ġ= ĠArray ( 4 ) Ġ{ ĠArray ( 4 ) Ġ{ 0 } Ġ} ĊĠĠĠĠĠĠĠ Ġscores . forEach Indexed Ġ{ Ġi , Ġsc Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsc . forEach Indexed Ġ{ Ġj , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( grid [ i ][ j ]. colour Ġ== ĠColour . EMPTY ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscores 2 [ i ][ j ] Ġ= Ġscores [ i ][ j ]. toList (). sorted By Descending Ġ{ Ġ(_, Ġvalue ) Ġ-> Ġvalue Ġ}. first (). second ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġvar Ġmoves Ġ= Ġmutable ListOf < Triple < Int , ĠInt , ĠList < Piece >> >() ĊĠĠĠĠĠĠĠ Ġvar Ġmax Ġ= Ġscores 2 . flatten (). sorted Descending (). take ( 1 ). first () ĊĠĠĠĠĠĠĠ Ġscores . forEach Indexed Ġ{ Ġi , Ġsc Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsc . forEach Indexed Ġ{ Ġj , Ġs Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( s . filter Values Ġ{ Ġit Ġ== Ġmax Ġ}. isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmoves . add ( Triple ( i , Ġj , Ġs . filter Values Ġ{ Ġit Ġ== Ġmax Ġ}. keys . to Mutable List ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġvar Ġmove Ġ= Ġmoves . random () ĊĠĠĠĠĠĠĠ Ġprint GameState ( scores 2 , Ġmoves , Ġmax ) ĊĠĠĠĠĠĠĠ Ġreturn ĠTrip le ( move . first , Ġmove . second , Ġpieces . indexOf ( move . third . random ())) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġprint GameState ( grid : ĠArray < Array < Int >>, Ġmoves : ĠMutable List < Triple < Int , ĠInt , ĠList < Piece >> >, Ġmax : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln () ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 1 .. grid . size ) Ġ{ Ġif Ġ( i Ġ== Ġ 1 ) Ġprint (" ĠĠĠĠ Ġ$ i ĠĠ Ġ") Ġelse Ġprint (" Ġ Ġ$ i ĠĠ Ġ" )} ĊĠĠĠĠĠĠĠ Ġprintln () ĊĠĠĠĠĠĠĠ Ġgrid . forEach Indexed Ġ{ Ġi , Ġit Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprint ("${ i + 1 } Ġ[ ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . forEach Indexed Ġ{ Ġj , Ġp Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( p Ġ>= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprint ( if Ġ( p Ġ== Ġ 0 ) Ġ" ĠĠĠĠ Ġ" Ġelse Ġif Ġ( p Ġ< Ġ 1 0 ) Ġ" ĠĠ Ġ$ p Ġ" Ġelse Ġif Ġ( p Ġ< Ġ 1 0 0 ) Ġ" Ġ Ġ$ p Ġ" Ġelse Ġ" Ġ$ p Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( j Ġ!= Ġit . last Index ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprint (',') ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" ]\ n ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġmoves . forEach Ġ{ Ġmove Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" move Ġat Ġ(${ move . first + 1 }, ${ move . second + 1 }) Ġwith Ġscore : Ġ$ max ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpieces . forEach Ġ{ Ġprint (" Ġ${ it . draw ()} Ġ") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpieces . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( move . third . contains ( it )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprint ( if Ġ( max Ġ== Ġ 0 ) Ġ" ĠĠĠĠĠĠ Ġ" Ġelse Ġif Ġ( max Ġ< Ġ 1 0 ) Ġ" ĠĠ Ġ$ max ĠĠ Ġ" Ġelse Ġif Ġ( max Ġ< Ġ 1 0 0 ) Ġ" Ġ Ġ$ max ĠĠ Ġ" Ġelse Ġ" Ġ Ġ$ max Ġ Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprint (" ĠĠĠĠĠĠ Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} Ċ }