import Ġjava . io . File Ċ Ċ // Ġtag :: standard Dice [] Ċ fun Ġstandard Dice ( in 1 : ĠInt , Ġin 2 : ĠInt ): ĠInt Ġ{ Ċ ĉ var Ġplay 1 Ġ= Ġin 1 Ċ ĉ var Ġplay 2 Ġ= Ġin 2 Ċ ĉ var Ġplay 1 Score : ĠInt Ġ= Ġ 0 Ċ ĉ var Ġplay 2 Score : ĠInt Ġ= Ġ 0 Ċ ĉ var Ġdice : ĠInt Ġ= Ġ 1 Ċ ĉ var Ġdice Count Ġ= Ġ 0 ĊĊ ĉ while Ġ( play 1 Score Ġ< Ġ 1 0 0 0 Ġ&& Ġplay 2 Score Ġ< Ġ 1 0 0 0 ) Ġ{ Ċĉ ĉ // Ġthree Ġturns Ġplayer Ġ 1 Ċĉ ĉ for Ġ( i Ġin Ġ 0 .. 2 ) Ġ{ Ċĉĉ ĉ play 1 Ġ= Ġ(( play 1 Ġ+ Ġdice Ġ- Ġ 1 ) Ġ% Ġ 1 0 ) Ġ+ Ġ 1 Ċĉĉ ĉ dice Ġ= Ġ( dice ) Ġ% Ġ 1 0 0 Ġ+ Ġ 1 Ċĉ ĉ } Ċĉ ĉ dice Count Ġ+= Ġ 3 Ċĉ ĉ play 1 Score Ġ= Ġplay 1 Score Ġ+ Ġplay 1 Ċĉ ĉ if Ġ( play 1 Score Ġ>= Ġ 1 0 0 0 ) Ġ{ Ċĉĉ ĉ return Ġ( play 2 Score Ġ* Ġdice Count ) Ċĉ ĉ } Ċĉ ĉ // Ġthree Ġturns Ġplayer Ġ 2 Ċĉ ĉ for Ġ( i Ġin Ġ 0 .. 2 ) Ġ{ Ċĉĉ ĉ play 2 Ġ= Ġ( play 2 Ġ+ Ġdice Ġ- Ġ 1 ) Ġ% Ġ 1 0 Ġ+ Ġ 1 Ċĉĉ ĉ dice Ġ= Ġ( dice ) Ġ% Ġ 1 0 0 Ġ+ Ġ 1 Ċĉ ĉ } Ċĉ ĉ dice Count Ġ+= Ġ 3 Ċĉ ĉ play 2 Score Ġ= Ġplay 2 Score Ġ+ Ġplay 2 Ċĉ ĉ if Ġ( play 2 Score Ġ>= Ġ 1 0 0 0 ) Ġ{ Ċĉĉ ĉ return Ġ( play 1 Score Ġ* Ġdice Count ) Ċĉ ĉ } Ċ ĉ } Ċ ĉ return Ġ 1 Ċ } Ċ // Ġend :: standard Dice [] Ċ Ċ // Ġtag :: dir ac Dice [] Ċ fun Ġdir ac Dice ( in 1 : ĠInt , Ġin 2 : ĠInt , Ġin 3 : ĠList < Int >): ĠPair < Int , ĠLong > Ġ{ Ċ ĉ var Ġplay 1 Ġ= Ġin 1 Ċ ĉ var Ġplay 2 Ġ= Ġin 2 Ċ ĉ var Ġplay 1 Score : ĠInt Ġ= Ġ 0 Ċ ĉ var Ġplay 2 Score : ĠInt Ġ= Ġ 0 Ċ ĉ var Ġdice Ġ= Ġin 3 Ċ ĉ var Ġdice Count Ġ= Ġ 0 Ċ ĉ var ĠnumOf Vars : ĠLong Ġ= Ġ 1 Ċ ĉ var Ġmap Table Ġ= Ġmutable Map Of < Int , ĠInt >() Ċ ĉ map Table . put ( 3 , Ġ 1 ) Ċ ĉ map Table . put ( 4 , Ġ 3 ) Ċ ĉ map Table . put ( 5 , Ġ 6 ) Ċ ĉ map Table . put ( 6 , Ġ 7 ) Ċ ĉ map Table . put ( 7 , Ġ 6 ) Ċ ĉ map Table . put ( 8 , Ġ 3 ) Ċ ĉ map Table . put ( 9 , Ġ 1 ) ĊĊ ĉ var Ġi : ĠInt Ġ= Ġ 0 Ċ ĉ while Ġ( true ) Ġ{ Ċĉ ĉ play 1 Ġ= Ġ(( play 1 Ġ+ Ġdice [ i ] Ġ- Ġ 1 ) Ġ% Ġ 1 0 ) Ġ+ Ġ 1 Ċĉ ĉ num Of Vars Ġ= ĠnumOf Vars Ġ* Ġmap Table . getValue ( dice [ i ]) Ċĉ ĉ i Ġ+= Ġ 1 Ċĉ ĉ dice Count Ġ+= Ġ 3 Ċĉ ĉ play 1 Score Ġ= Ġplay 1 Score Ġ+ Ġplay 1 ĊĊĉ ĉ if Ġ( play 1 Score Ġ>= Ġ 2 1 ) Ġ{ Ċĉĉ ĉ return ĠPair ( 1 , ĠnumOf Vars ) Ċĉ ĉ } Ġelse Ġif Ġ( i Ġ> Ġdice . size Ġ- Ġ 1 ) Ġ{ Ċĉĉ ĉ return ĠPair ( 0 , Ġ 0 ) Ċĉ ĉ } Ċĉ ĉ play 2 Ġ= Ġ( play 2 Ġ+ Ġdice [ i ] Ġ- Ġ 1 ) Ġ% Ġ 1 0 Ġ+ Ġ 1 Ċĉ ĉ num Of Vars Ġ= ĠnumOf Vars Ġ* Ġmap Table . getValue ( dice [ i ]) Ċĉ ĉ i Ġ+= Ġ 1 Ċĉ ĉ dice Count Ġ+= Ġ 3 Ċĉ ĉ play 2 Score Ġ= Ġplay 2 Score Ġ+ Ġplay 2 Ċĉ ĉ if Ġ( play 2 Score Ġ>= Ġ 2 1 ) Ġ{ Ċĉĉ ĉ return ĠPair ( 2 , ĠnumOf Vars ) Ċĉ ĉ } Ġelse Ġif Ġ( i Ġ> Ġdice . size Ġ- Ġ 1 ) Ġ{ Ċĉĉ ĉ return ĠPair ( 0 , Ġ 0 ) Ċĉ ĉ } Ċ ĉ } Ċ } Ċ // Ġend :: dir ac Dice [] Ċ Ċ // fun Ġmain ( args : ĠArray < String >) Ġ{ Ċ ĉ var Ġt 1 Ġ= ĠSystem . currentTimeMillis () ĊĊ ĉ // Ġtag :: read _ pu zzle _ input [] Ċ ĉ var Ġstarting Space Ġ= Ġmutable ListOf < Int >() ĊĊ ĉ File (" day 2 1 2 1 _ pu zzle _ input . txt "). forEach Line Ġ{ Ċĉ ĉ starting Space . add ( it . take Last ( 1 ). toString (). toInt ()) Ċ ĉ } ĊĊ ĉ var Ġplay 1 Ġ= Ġstarting Space [ 0 ] Ċ ĉ var Ġplay 2 Ġ= Ġstarting Space [ 1 ] Ċ ĉ // Ġend :: read _ pu zzle _ input [] ĊĊ ĉ // Ġtag :: part 1 [] Ċ ĉ var Ġsolution 1 Ġ= Ġstandard Dice ( play 1 , Ġplay 2 ) Ċ ĉ // Ġend :: part 1 [] ĊĊ ĉ // Ġtag :: part 2 [] Ċ ĉ var Ġplay 1 W ins : ĠLong Ġ= Ġ 0 Ċ ĉ var Ġplay 2 W ins : ĠLong Ġ= Ġ 0 ĊĊ ĉ var Ġdice Var Overall Ġ= ĠMutable List ( 0 ) Ġ{ Ġmutable ListOf < Int >() Ġ} Ċ ĉ var Ġdice Var Overall New Ġ= ĠMutable List ( 0 ) Ġ{ Ġmutable ListOf < Int >() Ġ} Ċ ĉ var Ġdice Variation Ġ= Ġmutable ListOf < Int >() ĊĊ ĉ for Ġ( ii Ġin Ġ 3 .. 9 ) Ġ{ Ċĉ ĉ for Ġ( iii Ġin Ġ 3 .. 9 ) Ġ{ Ċĉĉ ĉ dice Variation . add ( ii ) Ċĉĉ ĉ dice Variation . add ( iii ) Ċĉĉ ĉ dice Var Overall . add ( dice Variation . to Mutable List ()) Ċĉĉ ĉ dice Variation . clear () ĊĊĉĉ ĉ println (" ----------------- ") Ċĉĉ ĉ println ("-- Ġnext Ġturn ĠĠ Ġ-- ") Ċĉĉ ĉ println (" ----------------- ") ĉĉĉĊĉĉ ĉ print (" ĠĠ Ġdice Var Overall : Ġ") Ċĉĉ ĉ println ( dice Var Overall ) ĊĊĉĉ ĉ while Ġ( dice Var Overall . isNotEmpty ()) Ġ{ ĊĊĉĉĉ ĉ dice Var Overall . forEach Ġ{ Ċĉĉĉĉ ĉ var Ġresult Ġ= Ġdir ac Dice ( play 1 , Ġplay 2 , Ġit ) Ċĉĉĉĉ ĉ if Ġ( result . first Ġ== Ġ 1 ) Ġ{ Ċĉĉĉĉĉ ĉ play 1 W ins Ġ= Ġplay 1 W ins Ġ+ Ġresult . second Ċĉĉĉĉ ĉ } Ġelse Ġif Ġ( result . first Ġ== Ġ 2 ) Ġ{ Ċĉĉĉĉĉ ĉ play 2 W ins Ġ= Ġplay 2 W ins Ġ+ Ġresult . second Ċĉĉĉĉ ĉ } Ġelse Ġif Ġ( result . first Ġ== Ġ 0 ) Ġ{ Ċĉĉĉĉĉ ĉ for Ġ( i Ġin Ġ 3 .. 9 ) Ġ{ Ċĉĉĉĉĉĉ ĉ var Ġdice Variation New Ġ= Ġit . to Mutable List () Ċĉĉĉĉĉĉ ĉ dice Variation New . add ( i ) Ċĉĉĉĉĉĉ ĉ dice Var Overall New . add ( dice Variation New . to Mutable List ()) Ċĉĉĉĉĉĉ ĉ // ĉ dice Variation New . clear () Ċĉĉĉĉĉ ĉ } Ċĉĉĉĉ ĉ } ĊĊĉĉĉ ĉ } Ċĉĉĉ ĉ dice Var Overall . clear () Ċĉĉĉ ĉ dice Var Overall . addAll ( dice Var Overall New ) Ċĉĉĉ ĉ dice Var Overall New . clear () ĊĊĉĉ ĉ } Ġ// Ġend ĠWhile Ġ( dice Var Overall . isNotEmpty ()) Ċĉĉ ĉ println () Ċĉ ĉ } Ċ ĉ } ĊĊ ĉ var Ġsolution 2 Ġ= Ġmax Of ( play 1 W ins , Ġplay 2 W ins ) Ċ ĉ // Ġend :: part 2 [] ĊĊ ĉ // Ġtag :: output [] Ċ ĉ // Ġprint Ġsolution Ġfor Ġpart Ġ 1 Ċ ĉ println (" ************************ ******* ") Ċ ĉ println (" --- ĠDay Ġ 2 1 : ĠDir ac ĠD ice Ġ--- ") Ċ ĉ println (" ************************ ******* ") Ċ ĉ println (" Solution Ġfor Ġpart 1 ") Ċ ĉ println (" ĠĠ Ġ$ solution 1 Ġyou Ġget Ġif Ġyou Ġmultiply Ġthe Ġscore Ġof Ġthe Ġlo sing Ġplayer Ġby Ġthe Ġnumber Ġof Ġtimes Ġthe Ġdie Ġwas Ġrolled Ġduring Ġthe Ġgame ") Ċ ĉ println () Ċ ĉ // Ġprint Ġsolution Ġfor Ġpart Ġ 2 Ċ ĉ println (" ************************ ******* ") Ċ ĉ println (" Solution Ġfor Ġpart 2 ") Ċ ĉ println (" ĠĠ Ġ$ solution 2 Ġare Ġthe Ġmost Ġwins Ġin Ġall Ġun iver ses ") Ċ ĉ println () Ċ ĉ // Ġend :: output [] Ċ ĉ t 1 Ġ= ĠSystem . currentTimeMillis () Ġ- Ġt 1 Ċ ĉ println (" pu zzle Ġsolved Ġin Ġ${ t 1 } Ġms ") Ċ //} Ċ