package ĠTw enty 4 8 Ċ Ċ import ĠExtended State less Solver Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġorg . junit . jupiter . api . Assertions . assertTrue Ċ import Ġkotlin . random . Random Ċ import Ġca . aq tech . m ctree search 4 j . Generic Solver Ċ import Ġkotlin . test . assertNotNull Ċ Ċ class ĠGame 2 0 4 8 Tests Ġ{ ĊĊĠĠĠ Ġval Ġscenario Grid 1 Ġ= ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( 0 , Ġ 0 , Ġ 2 , Ġ 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( 2 , Ġ 2 , Ġ 0 , Ġ 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( 6 4 , Ġ 6 4 , Ġ 2 , Ġ 2 ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( 1 2 8 , Ġ 2 5 6 , Ġ 5 1 2 , Ġ 1 0 2 4 ) ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġval Ġscenario Grid 2 Ġ= ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( 1 0 2 4 , Ġ 0 , Ġ 0 , Ġ 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( 5 1 2 , Ġ 5 1 2 , Ġ 0 , Ġ 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( 0 , Ġ 0 , Ġ 0 , Ġ 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( 0 , Ġ 0 , Ġ 0 , Ġ 0 ) ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġfun Ġtest Game 2 0 4 8 ( input Grid : ĠArray < Array < Int >>) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġtest Grid Ġ= Ġinput Grid . copyOf () ĊĊĠĠĠĠĠĠĠ Ġval Ġinitial GameState Ġ= ĠGame 2 0 4 8 State ( Game 2 0 4 8 Position ( test Grid )) ĊĠĠĠĠĠĠĠ Ġval Ġgame 2 0 4 8 MD P Ġ= ĠGame 2 0 4 8 MD P ( initial GameState ) ĊĊĠĠĠĠĠĠĠ Ġvar Ġsolver Ġ= ĠExtended State less Solver ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgame 2 0 4 8 MD P , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 5 0 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 . 4 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 . 9 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġsolver . run Tree Search ( 2 0 0 ) ĊĠĠĠĠĠĠĠ Ġsolver . display Tree () ĊĊĠĠĠĠĠĠĠ Ġprintln (" optimal Action ") ĊĠĠĠĠĠĠĠ Ġprintln ( solver . extract Opt imal Action (). toString ()) ĊĊĠĠĠĠĠĠĠ Ġprintln (" optimal ĠH orizon ") ĊĠĠĠĠĠĠĠ Ġval Ġsol List Ġ= Ġsolver . get Opt imal H orizon (). map Ġ{ Ġit . toString () Ġ} ĊĊĠĠĠĠĠĠĠ Ġprintln ( sol List ) ĊĠĠĠĠĠĠĠ Ġ// Ġsimply Ġreplay Ġthe Ġ 2 0 4 8 Ġgame Ġusing Ġthe Ġsolution ĊĊĠĠĠĠĠĠĠ Ġvar Ġgc Ġ= ĠGame 2 0 4 8 Controller () ĊĠĠĠĠĠĠĠ Ġfor Ġ( a Ġin Ġsol List ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtest Grid Ġ= Ġgc . manip ulate Grid ( test Grid , Ġa ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġprintln ( Game 2 0 4 8 State ( Game 2 0 4 8 Position ( test Grid )). toString ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġscore Ġ= ĠGame 2 0 4 8 State ( Game 2 0 4 8 Position ( test Grid )). score ĊĠĠĠĠĠĠĠ Ġprintln ( score ) ĊĊĠĠĠĠĠĠĠ ĠassertNotNull ( score , Ġ" 2 0 4 8 Ġscore Ġis Ġnot Ġnull .") ĊĊĠĠĠĠĠĠĠ Ġif Ġ( score Ġ< Ġ 2 0 4 8 ) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( score Ġ>= Ġ 2 0 4 8 , Ġ" Scenario Ġreached Ġa Ġsub optimal Ġsolution Ġof Ġscore : Ġ$ score ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġgame 2 0 4 8 test S enario 1 () Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . test Game 2 0 4 8 ( this . scenario Grid 1 ) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġgame 2 0 4 8 test Scenario 2 () Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . test Game 2 0 4 8 ( this . scenario Grid 2 ) ĊĠĠĠ Ġ} Ċ }