package Ġday 2 2 Ċ Ċ import Ġjava . io . File Ċ Ċ fun Ġmain ( args : ĠArray < String >) Ġ{ ĊĠ Ġval Ġde cks Ġ= ĠFile ("./ src / main / resources / day 2 2 Input . txt ") ĊĠĠĠ Ġ. read Text () ĊĠĠĠ Ġ. split ("\ n \ n ") ĊĊĠ Ġval Ġdeck 1 Ġ= Ġbuild Deck ( 0 , Ġde cks ). to Mutable List () ĊĠ Ġval Ġdeck 2 Ġ= Ġbuild Deck ( 1 , Ġde cks ). to Mutable List () ĊĠ Ġval Ġresult Ġ= Ġplay Game ( deck 1 , Ġdeck 2 ) ĊĊĠ Ġprintln (" Player Ġ${ result . second } Ġwon Ġthe Ġgame ") ĊĠ Ġprintln ( ĊĠĠĠ Ġresult . first . reversed () ĊĠĠĠĠĠ Ġ. map Indexed Ġ{ Ġindex , Ġcard Ġ-> ĊĠĠĠĠĠĠĠ Ġ( index Ġ+ Ġ 1 ) Ġ* Ġcard ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ. sum ()) Ċ Ċ } Ċ Ċ // ĠPlay Ġa Ġgame Ġ( or Ġsub Ġgame ) Ġand Ġreturn Ġwin ning Ġdeck Ġ( 1 Ġor Ġ 2 ) Ċ fun Ġplay Game ( deck 1 O : ĠList < Int >, Ġdeck 2 O : ĠList < Int >): ĠPair < List < Int >, ĠInt > Ġ{ ĊĠ Ġval Ġdeck 1 Ġ= Ġdeck 1 O . to Mutable List () ĊĠ Ġval Ġdeck 2 Ġ= Ġdeck 2 O . to Mutable List () ĊĊĠ Ġvar Ġround Count Ġ= Ġ 0 ĊĠ Ġdo Ġ{ ĊĠĠĠ Ġval Ġdeck 1 Card Ġ= Ġdeck 1 . remove At ( 0 ) ĊĠĠĠ Ġval Ġdeck 2 Card Ġ= Ġdeck 2 . remove At ( 0 ) ĊĊĠĠĠ Ġvar Ġwinner : ĠInt ĊĠĠĠ Ġif Ġ( deck 1 . size Ġ>= Ġdeck 1 Card Ġ&& Ġdeck 2 . size Ġ>= Ġdeck 2 Card ) Ġ{ ĊĠĠĠĠĠ Ġwinner Ġ= Ġplay Game ( ĊĠĠĠĠĠĠĠ Ġdeck 1 . take ( deck 1 Card ), ĊĠĠĠĠĠĠĠ Ġdeck 2 . take ( deck 2 Card )). second ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠ Ġwinner Ġ= Ġif Ġ( deck 1 Card Ġ> Ġdeck 2 Card ) Ġ 1 Ġelse Ġ 2 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġif Ġ( winner Ġ== Ġ 1 ) Ġ{ ĊĠĠĠĠĠ Ġdeck 1 . add ( deck 1 Card ) ĊĠĠĠĠĠ Ġdeck 1 . add ( deck 2 Card ) ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠ Ġdeck 2 . add ( deck 2 Card ) ĊĠĠĠĠĠ Ġdeck 2 . add ( deck 1 Card ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠToo Ġmany Ġrounds , Ġmaybe Ġthe Ġinfinite Ġgame Ġgoing Ġon ? ĊĠĠĠ Ġround Count ++ ĊĠĠĠ Ġif ( round Count Ġ> Ġ 1 0 0 0 ) ĊĠĠĠĠĠ Ġreturn ĠPair ( deck 1 , Ġ 1 ) ĊĊĠ Ġ} Ġwhile Ġ( Ġdeck 1 . isNotEmpty () Ġ&& Ġdeck 2 . isNotEmpty ()) ĊĊĠ Ġreturn Ġif Ġ( deck 1 . isEmpty ()) ĠPair ( deck 2 , Ġ 2 ) Ġelse ĠPair ( deck 1 , Ġ 1 ) Ċ } ĊĊ Ċ private Ġfun Ġbuild Deck ( player : ĠInt , Ġde cks : ĠList < String >) Ġ= Ġde cks [ player ]. split ("\ n "). drop ( 1 ) ĊĠ Ġ. map Ġ{ Ġit . toInt () Ġ} Ċ