package Ġnet . b 0 n 5 4 1 . ai . algorithm . m cts Ċ Ċ import Ġnet . b 0 n 5 4 1 . ai . game . common . Game Move Ċ import Ġnet . b 0 n 5 4 1 . ai . game . common . GameState Ċ Ċ internal Ġclass ĠTest GameState ( override Ġval Ġplayers : ĠList < String >) Ġ: ĠGameState < Game Move > Ġ{ ĊĠĠĠ Ġprivate Ġval Ġmoves : ĠMutable List < Game Move > Ġ= Ġmutable ListOf () ĊĊĠĠĠ Ġprivate Ġconstructor ( players : ĠList < String >, Ġmoves : ĠList < Game Move >, Ġmove : ĠGame Move ) Ġ: Ġthis ( players ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . moves . addAll ( moves ) ĊĠĠĠĠĠĠĠ Ġthis . moves . add ( move ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġpossible Moves : ĠList < Game Move > ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠlistOf ( Test Game Move . HEAD S , ĠTest Game Move . TAIL S ) ĊĊĠĠĠ Ġoverride Ġfun Ġadd Move ( move : ĠGame Move ): ĠGameState < Game Move > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠTest GameState ( players , Ġmoves , Ġmove ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġis Game Finished : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġmoves . size Ġ== Ġ 1 0 0 ĊĊĠĠĠ Ġoverride Ġval Ġgame Values : ĠMap < String , ĠDouble > ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġheads Game Value Ġ= Ġ 1 . 0 Ġ* ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmoves . stream () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġmove : ĠGame Move Ġ-> Ġmove Ġ=== ĠTest Game Move . HEAD S Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. count () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( players . size Ġ== Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmap Of ( players [ 0 ] Ġto Ġheads Game Value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( players . size Ġ== Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ( map Of ( players [ 0 ] Ġto Ġheads Game Value , Ġplayers [ 1 ] Ġto Ġ( 1 0 0 Ġ- Ġheads Game Value ))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmap Of () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġlast Move : ĠGame Move ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġmoves [ moves . size Ġ- Ġ 1 ] ĊĊĠĠĠ Ġoverride Ġval Ġnext Player : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġplayers [ 0 ] Ċ }