package Ġcom . chr is wk . a oc . ad vent 2 0 2 0 Ċ Ċ import Ġcom . chr is wk . a oc . ad vent . Slow Ċ import Ġorg . assertj . core . api . Assertions . assertThat Ċ import Ġorg . junit . jupiter . api . Test Ċ Ċ class ĠDay 2 2 Test Ġ{ ĊĠĠĠ Ġval Ġsmall Game Ġ= Ġ""" ĊĠĠĠĠĠĠĠ ĠPlayer Ġ 1 : ĊĠĠĠĠĠĠĠĠ 9 ĊĠĠĠĠĠĠĠĠ 2 ĊĠĠĠĠĠĠĠĠ 6 ĊĠĠĠĠĠĠĠĠ 3 ĊĠĠĠĠĠĠĠĠ 1 ĊĊĠĠĠĠĠĠĠ ĠPlayer Ġ 2 : ĊĠĠĠĠĠĠĠĠ 5 ĊĠĠĠĠĠĠĠĠ 8 ĊĠĠĠĠĠĠĠĠ 4 ĊĠĠĠĠĠĠĠĠ 7 ĊĠĠĠĠĠĠĠĠ 1 0 ĊĠĠĠ Ġ""" . trim Indent () ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` can Ġparse Ġinput `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġday Ġ= ĠDay 2 2 () ĊĠĠĠĠĠĠĠ Ġval Ġ( p 1 , Ġp 2 ) Ġ= Ġday . build De cks ( small Game ) ĊĠĠĠĠĠĠĠ ĠassertThat ( p 1 ). contains Exactly ( 9 , 2 , 6 , 3 , 1 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( p 2 ). contains Exactly ( 5 , 8 , 4 , 7 , 1 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` can Ġplay Ġsingle Ġround ` (){ ĊĠĠĠĠĠĠĠ Ġval Ġday Ġ= ĠDay 2 2 () ĊĠĠĠĠĠĠĠ ĠassertThat ( day . dec ide Round Winner ( 9 , 5 )). isEqualTo ( Round Result . Player 1 Win ) ĊĠĠĠĠĠĠĠ ĠassertThat ( day . dec ide Round Winner ( 5 , 6 )). isEqualTo ( Round Result . Player 2 Win ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` keep s Ġtrack Ġof Ġgame Ġstate `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġday Ġ= ĠDay 2 2 () ĊĠĠĠĠĠĠĠ Ġval Ġgame Ġ= Ġday . build De cks ( small Game ) ĊĠĠĠĠĠĠĠ Ġval Ġ( p 1 , Ġp 2 ) Ġ= Ġday . play Round ( game ) ĊĠĠĠĠĠĠĠ ĠassertThat ( p 1 ). contains Exactly ( 2 , 6 , 3 , 1 , 9 , 5 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( p 2 ). contains Exactly ( 8 , 4 , 7 , 1 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` play s Ġsmall Ġgame Ġto Ġend `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġday Ġ= ĠDay 2 2 () ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġday . play Game Part 1 ( day . build De cks ( small Game )) ĊĠĠĠĠĠĠĠ ĠassertThat ( day . score Cards ( result )). isEqualTo ( 3 0 6 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġpart 1 () Ġ{ ĊĠĠĠĠĠĠĠ ĠassertThat ( Day 2 2 (). part 1 ()). isEqualTo ( 3 3 6 9 4 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` can Ġplay Ġrecursive Ġcom bat `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġday Ġ= ĠDay 2 2 () ĊĠĠĠĠĠĠĠ Ġval Ġ( win ning Deck , Ġresult ) Ġ= Ġday . play Game Part 2 ( day . build De cks ( small Game )) ĊĠĠĠĠĠĠĠ ĠassertThat ( result ). isEqualTo ( GameState . Player 2 Win ) ĊĠĠĠĠĠĠĠ ĠassertThat ( day . score Cards ( win ning Deck )). isEqualTo ( 2 9 1 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ Slow ( 1 0 0 0 ) ĊĠĠĠ Ġfun Ġpart 2 () Ġ{ ĊĠĠĠĠĠĠĠ ĠassertThat ( Day 2 2 (). part 2 ()). isEqualTo ( 3 1 8 3 5 ) ĊĠĠĠ Ġ} Ċ }