fun Ġmain () Ġ{ ĊĊĠĠĠ Ġfun Ġpart 1 ( input : ĠList < Command >): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġhorizontal Ġ= Ġinput ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Is Instance < Command . Forward >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. sum Of Ġ{ Ġit . value Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġdepth Ġ= Ġinput ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Not Ġ{ Ġit Ġis ĠCommand . Forward Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. sum Of Ġ{ Ġit . value Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġhorizontal Ġ* Ġdepth ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġpart 2 ( input : ĠList < Command >): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġhorizontal Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġdepth Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġaim Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġinput . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠCommand . Forward Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhorizontal Ġ+= Ġit . value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdepth Ġ+= Ġaim Ġ* Ġit . value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠCommand . Up , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠCommand . Down Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaim Ġ+= Ġit . value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġhorizontal Ġ* Ġdepth ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġtest Ġif Ġimplementation Ġme ets Ġcriteria Ġfrom Ġthe Ġdescription , Ġlike : ĊĠĠĠ Ġval Ġtest Input Ġ= Ġget TestData (" Day 0 2 ") ĊĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . to Command () Ġ} ĊĠĠĠ Ġcheck ( part 1 ( test Input ) Ġ== Ġ 1 5 0 ) ĊĠĠĠ Ġcheck ( part 2 ( test Input ) Ġ== Ġ 9 0 0 ) ĊĊĠĠĠ Ġval Ġinput Ġ= ĠgetData (" Day 0 2 ") ĊĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . to Command () Ġ} ĊĠĠĠ Ġprintln ( part 1 ( input )) ĊĠĠĠ Ġprintln ( part 2 ( input )) Ċ } Ċ Ċ sealed Ġclass ĠCommand ( val Ġvalue : ĠInt ) Ġ{ ĊĠĠĠ Ġclass ĠForward ( value : ĠInt ) Ġ: ĠCommand ( value ) ĊĠĠĠ Ġclass ĠDown ( value : ĠInt ) Ġ: ĠCommand ( value ) ĊĠĠĠ Ġclass ĠUp ( value : ĠInt ) Ġ: ĠCommand (- value ) Ċ } Ċ Ċ fun ĠString . to Command (): ĠCommand Ġ{ ĊĠĠĠ Ġval Ġitems Ġ= Ġsplit (" Ġ") ĊĊĠĠĠ Ġval Ġcommand Ġ= Ġitems . first () ĊĠĠĠ Ġval Ġvalue Ġ= Ġitems . last (). toInt () ĊĊĠĠĠ Ġreturn Ġwhen Ġ( command ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ" forward " Ġ-> ĠCommand . Forward ( value ) ĊĠĠĠĠĠĠĠ Ġ" up " Ġ-> ĠCommand . Up ( value ) ĊĠĠĠĠĠĠĠ Ġ" down " Ġ-> ĠCommand . Down ( value ) ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġerror (" unknown Ġcommand Ġtype : Ġ$ command ") ĊĠĠĠ Ġ} Ċ }