package Ġ_ 2 0 2 1 Ċ Ċ import Ġa oc Ċ import Ġparse Input Ċ import Ġjava . util . regex . Pattern Ċ Ċ private Ġval ĠP ATTERN Ġ= ĠPattern . compile ("( \\ w +) Ġ( \\ d + )") Ċ Ċ fun Ġmain () Ġ{ Ċ ĉ a oc ( 2 0 2 1 , Ġ 2 ) Ġ{ Ċĉ ĉ a oc Run Ġ{ Ċĉĉ ĉ process ( it ) Ġ{ Ġdir , Ġsub mar ine , Ġamount Ġ-> Ġdir . execute 1 ( sub mar ine , Ġamount ) Ġ} Ċĉ ĉ } Ċĉ ĉ a oc Run Ġ{ Ċĉĉ ĉ process ( it ) Ġ{ Ġdir , Ġsub mar ine , Ġamount Ġ-> Ġdir . execute 2 ( sub mar ine , Ġamount ) Ġ} Ċĉ ĉ } Ċ ĉ } Ċ } Ċ Ċ private Ġfun Ġprocess ( input : ĠString , Ġinput Handler : Ġ( Direction , ĠSub mar ine , ĠInt ) Ġ-> ĠUnit ): ĠInt Ġ{ Ċ ĉ val Ġsub mar ine Ġ= ĠSub mar ine () Ċ ĉ parse Input ( PATTERN , Ġinput ) Ġ{ ĠDirection . valueOf ( it . group ( 1 ). uppercase ()) Ġto Ġit . group ( 2 ). toInt () Ġ} Ċĉ ĉ . forEach Ġ{ Ġ( dir , Ġamount ) Ġ-> Ġinput Handler ( dir , Ġsub mar ine , Ġamount ) Ġ} Ċ ĉ return Ġsub mar ine . horizontal Pos Ġ* Ġsub mar ine . vertical Pos Ċ } Ċ Ċ private Ġdata Ġclass ĠSub mar ine ( Ċ ĉ var Ġhorizontal Pos : ĠInt Ġ= Ġ 0 , Ċ ĉ var Ġvertical Pos : ĠInt Ġ= Ġ 0 , Ċ ĉ var Ġaim : ĠInt Ġ= Ġ 0 Ċ ) Ċ Ċ private Ġenum Ġclass ĠDirection Ġ{ Ċ ĉ FORWARD Ġ{ Ċĉ ĉ override Ġfun Ġexecute 1 ( sub mar ine : ĠSub mar ine , Ġamount : ĠInt ) Ġ{ Ċĉĉ ĉ sub mar ine . horizontal Pos Ġ+= Ġamount Ċĉ ĉ } ĊĊĉ ĉ override Ġfun Ġexecute 2 ( sub mar ine : ĠSub mar ine , Ġamount : ĠInt ) Ġ{ Ċĉĉ ĉ sub mar ine . horizontal Pos Ġ+= Ġamount Ċĉĉ ĉ sub mar ine . vertical Pos Ġ+= Ġ( sub mar ine . aim Ġ* Ġamount ) Ċĉ ĉ } Ċ ĉ }, Ċ ĉ UP Ġ{ Ċĉ ĉ override Ġfun Ġexecute 1 ( sub mar ine : ĠSub mar ine , Ġamount : ĠInt ) Ġ{ Ċĉĉ ĉ sub mar ine . vertical Pos Ġ-= Ġamount Ċĉ ĉ } ĊĊĉ ĉ override Ġfun Ġexecute 2 ( sub mar ine : ĠSub mar ine , Ġamount : ĠInt ) Ġ{ Ċĉĉ ĉ sub mar ine . aim Ġ-= Ġamount Ċĉ ĉ } Ċ ĉ }, Ċ ĉ DOWN Ġ{ Ċĉ ĉ override Ġfun Ġexecute 1 ( sub mar ine : ĠSub mar ine , Ġamount : ĠInt ) Ġ{ Ċĉĉ ĉ sub mar ine . vertical Pos Ġ+= Ġamount Ċĉ ĉ } ĊĊĉ ĉ override Ġfun Ġexecute 2 ( sub mar ine : ĠSub mar ine , Ġamount : ĠInt ) Ġ{ Ċĉĉ ĉ sub mar ine . aim Ġ+= Ġamount Ċĉ ĉ } Ċ ĉ }; ĊĊ ĉ abstract Ġfun Ġexecute 1 ( sub mar ine : ĠSub mar ine , Ġamount : ĠInt ) ĊĊ ĉ abstract Ġfun Ġexecute 2 ( sub mar ine : ĠSub mar ine , Ġamount : ĠInt ) Ċ } Ċ