Ċ type alias ĠCommand Ġ= ĠPair < String , ĠInt > Ċ type alias ĠD ive State Ġ= ĠTrip le < Ġ/* ĠHorizontal Ġ*/ Int , Ġ/* ĠDepth Ġ*/ ĠInt , Ġ/* ĠA im Ġ*/ ĠInt > Ċ Ċ fun ĠList < String >. to Commands () Ġ= Ġmap Ġ{ ĊĠĠĠ Ġwith ( it . split (" Ġ")) Ġ{ ĠCommand ( first (), Ġthis [ 1 ]. toInt ()) Ġ} Ċ } Ċ Ċ fun ĠD ive State . add ( first Add : ĠInt Ġ= Ġ 0 , Ġsecond Add : ĠInt Ġ= Ġ 0 , Ġthird Add : ĠInt Ġ= Ġ 0 ) Ġ= ĊĠĠĠ Ġcopy ( first Ġ+ Ġfirst Add , Ġsecond Ġ+ Ġsecond Add , Ġthird Ġ+ Ġthird Add ) Ċ fun ĠD ive State . total () Ġ= Ġfirst Ġ* Ġsecond Ċ Ċ fun Ġmain () Ġ{ ĊĠĠĠ Ġfun Ġpart 1 ( input : ĠList < String >): ĠInt Ġ= ĊĠĠĠĠĠĠĠ Ġinput . to Commands (). fold ( D ive State ( 0 , Ġ 0 , Ġ 0 )) Ġ{ state , Ġ( cmd , Ġdistance ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen ( cmd ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" forward " Ġ-> Ġstate . add ( first Add Ġ= Ġdistance ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" backward " Ġ-> Ġstate . add ( first Add Ġ= Ġ- distance ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" up " Ġ-> Ġstate . add ( second Add Ġ= Ġ- distance ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" down " Ġ-> Ġstate . add ( second Add Ġ= Ġdistance ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġstate ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. total () ĊĊĠĠĠ Ġfun Ġpart 2 ( input : ĠList < String >): ĠInt Ġ= ĊĠĠĠĠĠĠĠ Ġinput . to Commands (). fold ( D ive State ( 0 , Ġ 0 , Ġ 0 )) Ġ{ state , Ġ( cmd , Ġdistance ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen ( cmd ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" forward " Ġ-> Ġstate . add ( first Add Ġ= Ġdistance , Ġsecond Add Ġ= Ġ( distance Ġ* Ġstate . third )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" backward " Ġ-> Ġstate . add ( first Add Ġ= Ġ- distance ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" up " Ġ-> Ġstate . add ( third Add Ġ= Ġ- distance ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" down " Ġ-> Ġstate . add ( third Add Ġ= Ġdistance ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġstate ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. total () ĊĊĠĠĠ Ġ// Ġtest Ġif Ġimplementation Ġme ets Ġcriteria Ġfrom Ġthe Ġdescription , Ġlike : ĊĠĠĠ Ġval Ġtest Input Ġ= ĠreadFile Contents (" Day 0 2 _ test ") ĊĠĠĠ Ġval Ġpart 1 Result Ġ= Ġpart 1 ( test Input ) ĊĠĠĠ Ġcheck ( part 1 Result Ġ== Ġ 1 5 0 , Ġ{" Expected : Ġ 1 5 0 Ġbut Ġfound Ġ$ part 1 Result "}) ĊĊĠĠĠ Ġval Ġpart 2 Result Ġ= Ġpart 2 ( test Input ) ĊĠĠĠ Ġcheck ( part 2 Result Ġ== Ġ 9 0 0 , Ġ{ Ġ" Expected Ġ 9 0 0 Ġbut Ġis : Ġ$ part 2 Result "}) ĊĊĠĠĠ Ġval Ġinput Ġ= ĠreadFile Contents (" Day 0 2 ") ĊĠĠĠ Ġprintln (" Part 1 : Ġ" Ġ+ Ġpart 1 ( input )) ĊĠĠĠ Ġprintln (" Part 2 : Ġ" Ġ+ Ġpart 2 ( input )) Ċ } Ċ