import Ġutils . Direction Ċ import Ġutils . Point Ċ Ċ /** Ċ Ġ* ĠCreated Ġby Ġsag ar Ġon Ġ 1 9 / 0 1 / 1 8 . Ċ Ġ*/ Ċ object ĠDay 0 3 Ġ{ ĊĊĠĠĠ Ġfun Ġpart 1 ( input : ĠInt ) Ġ: ĠInt Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġpoint Ġ= Ġget Point ( input ) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠMath . abs ( point . x ) Ġ+ ĠMath . abs ( point . y ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġpart 2 ( input : ĠInt ) Ġ: ĠInt Ġ{ ĊĊĠĠĠĠĠĠĠ Ġvar Ġdirection Ġ= ĠDirection . EAST ĊĠĠĠĠĠĠĠ Ġvar Ġpoint Ġ= ĠPoint () ĊĊĠĠĠĠĠĠĠ Ġval Ġpoint Value Mapping Ġ= Ġmutable Map Of ( point Ġto Ġ 1 ) ĊĊĠĠĠĠĠĠĠ Ġvar Ġmin X Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġmax X Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġmin Y Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġmax Y Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġpoint Value : ĠInt ĊĊĠĠĠĠĠĠĠ Ġif ( input Ġ== Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 2 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġwhile Ġ( true ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen ( direction ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDirection . EAST Ġ-> Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmax X Ġ+= Ġ 1 ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( point . x Ġ!= Ġmax X ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpoint Ġ= Ġpoint . move ( Direction . EAST ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpoint Value Ġ= Ġcalculate Point Value ( point , Ġpoint Value Mapping ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( point Value Ġ> Ġinput ) Ġreturn Ġpoint Value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpoint Value Mapping [ point ] Ġ= Ġpoint Value ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdirection Ġ= ĠDirection . NORTH ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDirection . NORTH Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmax Y Ġ+= Ġ 1 ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( point . y Ġ!= Ġmax Y ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpoint Ġ= Ġpoint . move ( Direction . NORTH ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpoint Value Ġ= Ġcalculate Point Value ( point , Ġpoint Value Mapping ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( point Value Ġ> Ġinput ) Ġreturn Ġpoint Value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpoint Value Mapping [ point ] Ġ= Ġpoint Value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdirection Ġ= ĠDirection . WEST ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDirection . WEST Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmin X Ġ-= Ġ 1 ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( point . x Ġ!= Ġmin X ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpoint Ġ= Ġpoint . move ( Direction . WEST ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpoint Value Ġ= Ġcalculate Point Value ( point , Ġpoint Value Mapping ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( point Value Ġ> Ġinput ) Ġreturn Ġpoint Value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpoint Value Mapping [ point ] Ġ= Ġpoint Value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdirection Ġ= ĠDirection . SO UTH ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDirection . SO UTH Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmin Y Ġ-= Ġ 1 ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( point . y Ġ!= Ġmin Y ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpoint Ġ= Ġpoint . move ( Direction . SO UTH ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpoint Value Ġ= Ġcalculate Point Value ( point , Ġpoint Value Mapping ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( point Value Ġ> Ġinput ) Ġreturn Ġpoint Value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpoint Value Mapping [ point ] Ġ= Ġpoint Value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdirection Ġ= ĠDirection . EAST ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcalculate Point Value ( point : ĠPoint , Ġpoint Value Mapping : ĠMap < Point , ĠInt >) Ġ: ĠInt Ġ{ ĊĊĠĠĠĠĠĠĠ Ġvar Ġpoint Value Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( dx Ġin Ġ- 1 .. 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( dy Ġin Ġ- 1 .. 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( dx Ġ== Ġ 0 Ġ&& Ġdy Ġ== Ġ 0 ) Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpoint Value Ġ+= Ġpoint Value Mapping [ Point ( point . x Ġ+ Ġdx , Ġpoint . y Ġ+ Ġdy )] Ġ?: Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġpoint Value ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Point ( input : ĠInt ) Ġ: ĠPoint Ġ{ ĊĊĠĠĠĠĠĠĠ Ġvar Ġcount Ġ= Ġinput ĊĠĠĠĠĠĠĠ Ġvar Ġdirection Ġ= ĠDirection . EAST ĊĠĠĠĠĠĠĠ Ġvar Ġpoint Ġ= ĠPoint () ĊĊĠĠĠĠĠĠĠ Ġvar Ġmin X Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġmax X Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġmin Y Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġmax Y Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġif ( count Ġ== Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġpoint ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġwhile Ġ( true ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen ( direction ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDirection . EAST Ġ-> Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmax X Ġ+= Ġ 1 ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( point . x Ġ!= Ġmax X ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpoint Ġ= Ġpoint . move ( Direction . EAST ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(-- count Ġ== Ġ 1 ) Ġreturn Ġpoint ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdirection Ġ= ĠDirection . NORTH ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDirection . NORTH Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmax Y Ġ+= Ġ 1 ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( point . y Ġ!= Ġmax Y ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpoint Ġ= Ġpoint . move ( Direction . NORTH ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(-- count Ġ== Ġ 1 ) Ġreturn Ġpoint ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdirection Ġ= ĠDirection . WEST ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDirection . WEST Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmin X Ġ-= Ġ 1 ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( point . x Ġ!= Ġmin X ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpoint Ġ= Ġpoint . move ( Direction . WEST ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(-- count Ġ== Ġ 1 ) Ġreturn Ġpoint ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdirection Ġ= ĠDirection . SO UTH ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDirection . SO UTH Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmin Y Ġ-= Ġ 1 ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( point . y Ġ!= Ġmin Y ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpoint Ġ= Ġpoint . move ( Direction . SO UTH ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(-- count Ġ== Ġ 1 ) Ġreturn Ġpoint ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdirection Ġ= ĠDirection . EAST ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} Ċ Ċ }