package Ġio . github . ps he g ger . a oc . y 2 0 2 0 Ċ Ċ import Ġio . github . ps he g ger . a oc . common . Base Solver Ċ import Ġio . github . ps he g ger . a oc . common . Coordinate Ċ import Ġkotlin . math . absolute Value Ċ Ċ class ĠY 2 0 2 0 D 1 2 Ġ: ĠBase Solver () Ġ{ ĊĠĠĠ Ġoverride Ġval Ġyear Ġ= Ġ 2 0 2 0 ĊĠĠĠ Ġoverride Ġval Ġday Ġ= Ġ 1 2 ĊĊĠĠĠ Ġoverride Ġfun Ġpart 1 (): ĠInt Ġ= ĊĠĠĠĠĠĠĠ Ġparse Input (). fold ( Pair ( Coordinate ( 0 , Ġ 0 ), Ġ 9 0 )) Ġ{ Ġacc , Ġaction Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( c , Ġfacing ) Ġ= Ġacc ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( action . name ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠActions Name . North Ġ-> ĠPair ( c . copy ( y Ġ= Ġc . y Ġ+ Ġaction . value ), Ġfacing ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠActions Name . South Ġ-> ĠPair ( c . copy ( y Ġ= Ġc . y Ġ- Ġaction . value ), Ġfacing ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠActions Name . East Ġ-> ĠPair ( c . copy ( x Ġ= Ġc . x Ġ+ Ġaction . value ), Ġfacing ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠActions Name . West Ġ-> ĠPair ( c . copy ( x Ġ= Ġc . x Ġ- Ġaction . value ), Ġfacing ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠActions Name . Left Ġ-> ĠPair ( c , Ġ( 3 6 0 Ġ+ Ġfacing Ġ- Ġaction . value ) Ġ% Ġ 3 6 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠActions Name . Right Ġ-> ĠPair ( c , Ġ( 3 6 0 Ġ+ Ġfacing Ġ+ Ġaction . value ) Ġ% Ġ 3 6 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠActions Name . Forward Ġ-> Ġwhen Ġ( facing ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġ-> ĠPair ( c . copy ( y Ġ= Ġc . y Ġ+ Ġaction . value ), Ġfacing ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 9 0 Ġ-> ĠPair ( c . copy ( x Ġ= Ġc . x Ġ+ Ġaction . value ), Ġfacing ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 8 0 Ġ-> ĠPair ( c . copy ( y Ġ= Ġc . y Ġ- Ġaction . value ), Ġfacing ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 7 0 Ġ-> ĠPair ( c . copy ( x Ġ= Ġc . x Ġ- Ġaction . value ), Ġfacing ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġerror (" Unknown Ġfacing Ġ$ facing ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. let Ġ{ Ġ( c , Ġ_) Ġ-> Ġc . x . absolute Value Ġ+ Ġc . y . absolute Value Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġpart 2 (): ĠInt Ġ= ĊĠĠĠĠĠĠĠ Ġparse Input (). fold ( Pair ( Coordinate ( 0 , Ġ 0 ), ĠCoordinate ( 1 0 , Ġ 1 ))) Ġ{ Ġacc , Ġaction Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( ship , Ġwp ) Ġ= Ġacc ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( action . name ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠActions Name . North Ġ-> ĠPair ( ship , Ġwp . copy ( y Ġ= Ġwp . y Ġ+ Ġaction . value )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠActions Name . South Ġ-> ĠPair ( ship , Ġwp . copy ( y Ġ= Ġwp . y Ġ- Ġaction . value )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠActions Name . East Ġ-> ĠPair ( ship , Ġwp . copy ( x Ġ= Ġwp . x Ġ+ Ġaction . value )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠActions Name . West Ġ-> ĠPair ( ship , Ġwp . copy ( x Ġ= Ġwp . x Ġ- Ġaction . value )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠActions Name . Left Ġ-> ĠPair ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġship , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( 0 Ġuntil Ġ( action . value Ġ/ Ġ 9 0 )). fold ( wp ) Ġ{ Ġ( wp X , Ġwp Y ), Ġ_ Ġ-> ĠCoordinate (- wp Y , Ġwp X ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠActions Name . Right Ġ-> ĠPair ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġship , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( 0 Ġuntil Ġ( action . value Ġ/ Ġ 9 0 )). fold ( wp ) Ġ{ Ġ( wp X , Ġwp Y ), Ġ_ Ġ-> ĠCoordinate ( wp Y , Ġ- wp X ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠActions Name . Forward Ġ-> ĠPair ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCoordinate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġship . x Ġ+ Ġwp . x Ġ* Ġaction . value , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġship . y Ġ+ Ġwp . y Ġ* Ġaction . value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwp ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. let Ġ{ Ġ( ship , Ġ_) Ġ-> Ġship . x . absolute Value Ġ+ Ġship . y . absolute Value Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġparse Input () Ġ= Ġread Input Ġ{ ĊĠĠĠĠĠĠĠ Ġread Lines (). map Ġ{ ĠAction . parse String ( it ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġdata Ġclass ĠAction ( val Ġname : ĠActions Name , Ġval Ġvalue : ĠInt ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġparse String ( str : ĠString ) Ġ= ĠAction ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠActions Name . values (). first Ġ{ Ġit . value Ġ== Ġstr [ 0 ] Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstr . drop ( 1 ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġenum Ġclass ĠActions Name ( val Ġvalue : ĠChar ) Ġ{ ĊĠĠĠĠĠĠĠ ĠNorth (' N '), ĊĠĠĠĠĠĠĠ ĠSouth (' S '), ĊĠĠĠĠĠĠĠ ĠEast (' E '), ĊĠĠĠĠĠĠĠ ĠWest (' W '), ĊĠĠĠĠĠĠĠ ĠLeft (' L '), ĊĠĠĠĠĠĠĠ ĠRight (' R '), ĊĠĠĠĠĠĠĠ ĠForward (' F ') ĊĠĠĠ Ġ} Ċ } Ċ