/* Ċ Ġ* ĠThis ĠKotlin Ġsource Ġfile Ġwas Ġgenerated Ġby Ġthe ĠGradle Ġ' init ' Ġtask . Ċ Ġ*/ Ċ package Ġm ars _ land er _ ep 2 Ċ Ċ import Ġjava . util .* Ċ Ċ /** Ċ Ġ* ĠAuto - generated Ġcode Ġbelow Ġaims Ġat Ġhelping Ġyou Ġparse Ċ Ġ* Ġthe Ġstandard Ġinput Ġaccording Ġto Ġthe Ġproblem Ġstatement . Ċ Ġ**/ Ċ fun Ġmain ( args : ĠArray < String >) Ġ{ ĊĠĠĠ Ġval Ġinput Ġ= ĠScanner ( System .` in `) ĊĠĠĠ Ġval Ġsurface N Ġ= Ġinput . nextInt () Ġ// Ġthe Ġnumber Ġof Ġpoints Ġused Ġto Ġdraw Ġthe Ġsurface Ġof ĠM ars . ĊĠĠĠ Ġval Ġpoints : ĠMutable List < Point > Ġ= Ġmutable ListOf (); ĊĠĠĠ Ġvar Ġstart Of Flat Ground Ġ= ĠPoint () ĊĠĠĠ Ġvar Ġend Of Flat Ground Ġ= ĠPoint () ĊĠĠĠ Ġvar Ġhighest Point Ġ= ĠPoint () ĊĊĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġsurface N ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġland X Ġ= Ġinput . nextInt () Ġ// ĠX Ġcoordinate Ġof Ġa Ġsurface Ġpoint . Ġ( 0 Ġto Ġ 6 9 9 9 ) ĊĠĠĠĠĠĠĠ Ġval Ġland Y Ġ= Ġinput . nextInt () Ġ// ĠY Ġcoordinate Ġof Ġa Ġsurface Ġpoint . ĠBy Ġlinking Ġall Ġthe Ġpoints Ġtogether Ġin Ġa Ġsequential Ġfashion , Ġyou Ġform Ġthe Ġsurface Ġof ĠM ars . ĊĠĠĠĠĠĠĠ Ġval Ġcurrent Point Ġ= ĠPoint ( land X , Ġland Y ) ĊĠĠĠĠĠĠĠ Ġif Ġ( i Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprevious Point Ġ= Ġpoints . get ( i Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( previous Point . as Same Height As ( current Point )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( previous Point . distance Al ong X Axis ( current Point ) Ġ>= Ġ 1 0 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Of Flat Ground Ġ= Ġprevious Point ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Of Flat Ground Ġ= Ġcurrent Point ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( current Point . is Strict ly High er Than ( highest Point )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhighest Point Ġ= Ġcurrent Point ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġpoints . add ( current Point ) ĊĠĠĠ Ġ} ĊĊĠĠĠ ĠSystem . err . println (" Found Ġflat Ġarea Ġbetween Ġ${ start Of Flat Ground } Ġand Ġ${ end Of Flat Ground }") ĊĊĠĠĠ Ġ// Ġgame Ġloop ĊĠĠĠ Ġwhile Ġ( true ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠX Ġ= Ġinput . nextInt () ĊĠĠĠĠĠĠĠ Ġval ĠY Ġ= Ġinput . nextInt () ĊĠĠĠĠĠĠĠ Ġval Ġh Speed Ġ= Ġinput . nextInt () Ġ// Ġthe Ġhorizontal Ġspeed Ġ( in Ġm / s ), Ġcan Ġbe Ġnegative . ĊĠĠĠĠĠĠĠ Ġval Ġv Speed Ġ= Ġinput . nextInt () Ġ// Ġthe Ġvertical Ġspeed Ġ( in Ġm / s ), Ġcan Ġbe Ġnegative . ĊĠĠĠĠĠĠĠ Ġval Ġfuel Ġ= Ġinput . nextInt () Ġ// Ġthe Ġquantity Ġof Ġremaining Ġfuel Ġin Ġlit ers . ĊĠĠĠĠĠĠĠ Ġval Ġrotate Ġ= Ġinput . nextInt () Ġ// Ġthe Ġrotation Ġangle Ġin Ġdegrees Ġ(- 9 0 Ġto Ġ 9 0 ). ĊĠĠĠĠĠĠĠ Ġval Ġpower Ġ= Ġinput . nextInt () Ġ// Ġthe Ġthrust Ġpower Ġ( 0 Ġto Ġ 4 ). ĊĊĠĠĠĠĠĠĠ Ġ// ĠWrite Ġan Ġaction Ġusing Ġprintln () ĊĠĠĠĠĠĠĠ Ġ// ĠTo Ġdebug : ĠSystem . err . println (" Debug Ġmessages ..."); ĊĠĠĠĠĠĠĠ Ġ// ĠWhere Ġam ĠI Ġ? ĊĠĠĠĠĠĠĠ Ġ// ĠIf Ġabove Ġthe Ġflat ground , Ġthat 's Ġok , ĠI Ġhave Ġonly Ġto Ġdesc end Ġwith ĊĠĠĠĠĠĠĠ Ġ// Ġ- Ġrotation Ġ== Ġ 0 ĊĠĠĠĠĠĠĠ Ġ// Ġ- Ġh Speed Ġ<= Ġ 2 0 ĊĠĠĠĠĠĠĠ Ġ// Ġ- Ġv Speed Ġ<= Ġ 4 0 ĊĠĠĠĠĠĠĠ Ġ// ĠIf Ġon Ġthe Ġleft Ġof Ġthe Ġmin X , ĠI Ġhave Ġto Ġrotate Ġneg atively Ġand Ġthrust Ġto Ġmax Ġto Ġgo Ġon Ġleft Ġuntil ĠI Ġam Ġabove Ġflat Ġground ĊĠĠĠĠĠĠĠ Ġ// ĠIf Ġon Ġthe Ġright Ġof Ġthe Ġmax X , ĠI Ġhave Ġto Ġrotate Ġposit ively Ġand Ġthrust Ġto Ġmax Ġto Ġgo Ġon Ġright Ġuntil ĠI Ġam Ġabove Ġflat Ġground ĊĠĠĠĠĠĠĠ Ġval Ġanswer Ġ= Ġwhen Ġ( X ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġin Ġ 0 .. start Of Flat Ground . x Ġ-> Ġgo Right ( h Speed , Ġv Speed , Ġfuel , Ġrotate , Ġpower ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġin Ġend Of Flat Ground . x .. 6 9 9 9 Ġ-> Ġgo Left ( h Speed , Ġv Speed , Ġfuel , Ġrotate , Ġpower ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġin Ġstart Of Flat Ground . x .. end Of Flat Ground . x Ġ-> Ġgo Down ( h Speed , Ġv Speed , Ġfuel , Ġrotate , Ġpower ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġgo Down ( h Speed , Ġv Speed , Ġfuel , Ġrotate , Ġpower ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġrotate Ġpower . Ġrotate Ġis Ġthe Ġdesired Ġrotation Ġangle . Ġpower Ġis Ġthe Ġdesired Ġthrust Ġpower . ĊĠĠĠĠĠĠĠ Ġprintln ( answer ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ data Ġclass ĠPoint ( val Ġx : ĠInt Ġ= Ġ 0 , Ġval Ġy : ĠInt Ġ= Ġ 0 ) Ġ{ ĊĠĠĠ Ġfun Ġis Strict ly High er Than ( other : Point ): Boolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . y Ġ> Ġother . y ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġis Strict ly Lower Than ( other : ĠPoint ): Boolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . y Ġ< Ġother . y ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġas Same Height As ( other : ĠPoint ): Boolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . y Ġ== Ġother . y ; ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdistance Al ong X Axis ( other : ĠPoint ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠMath . abs ( other . x Ġ- Ġthis . x ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdistance Al ong Y Axis ( other : ĠPoint ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠMath . abs ( other . y Ġ- Ġthis . y ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdistance ( other : Point ): ĠDouble Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠMath . sqrt ( Math . pow (( other . x Ġ- Ġthis . x ). toDouble (), 2 . 0 ) Ġ+ ĠMath . pow (( other . y Ġ- Ġthis . y ). toDouble (), 2 . 0 )) ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġgo Down ( h Speed : ĠInt , Ġv Speed : ĠInt , Ġfuel : ĠInt , Ġrotate : ĠInt , Ġpower : ĠInt ): ĠString Ġ{ ĊĠĠĠ Ġvar Ġresult Ġ= Ġ"" ĊĊĠĠĠ Ġif Ġ( h Speed Ġ> Ġ 1 9 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ" 1 5 Ġ${ Integer . toString ( Math . max ( 0 , Ġpower Ġ- Ġ 1 )) }" ĊĠĠĠ Ġ} Ġelse Ġif Ġ( h Speed Ġ< Ġ- 1 9 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ"- 1 5 Ġ${ Integer . toString ( Math . min ( 4 , Ġpower Ġ+ Ġ 1 )) }" ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( v Speed Ġ> Ġ 3 9 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġ" 0 Ġ${ Integer . toString ( Math . max ( 0 , Ġpower Ġ- Ġ 1 )) }" ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( v Speed Ġ< Ġ- 3 9 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġ" 0 Ġ${ Integer . toString ( Math . min ( 4 , Ġpower Ġ+ Ġ 1 )) }" ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġ" 0 Ġ 0 " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġresult Ċ } Ċ Ċ fun Ġgo Left ( h Speed : ĠInt , Ġv Speed : ĠInt , Ġfuel : ĠInt , Ġrotate : ĠInt , Ġpower : ĠInt ): ĠString Ġ{ ĊĠĠĠ Ġ// return Ġ" 9 0 Ġ 4 " ĊĠĠĠ Ġreturn Ġif Ġ( h Speed Ġ> Ġ 1 9 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ" 4 5 Ġ${ Integer . toString ( Math . max ( 0 , Ġpower Ġ- Ġ 1 )) }" ĊĠĠĠ Ġ} Ġelse Ġif Ġ( h Speed Ġ< Ġ- 1 9 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ"- 4 5 Ġ${ Integer . toString ( Math . min ( 4 , Ġpower Ġ+ Ġ 1 )) }" ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġ" 0 Ġ 0 " ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġgo Right ( h Speed : ĠInt , Ġv Speed : ĠInt , Ġfuel : ĠInt , Ġrotate : ĠInt , Ġpower : ĠInt ): ĠString Ġ{ ĊĠĠĠ Ġ// return Ġ"- 9 0 Ġ 4 " ĊĠĠĠ Ġreturn Ġif Ġ( h Speed Ġ> Ġ 1 9 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ" 4 5 Ġ${ Integer . toString ( Math . max ( 0 , Ġpower Ġ- Ġ 1 )) }" ĊĠĠĠ Ġ} Ġelse Ġif Ġ( h Speed Ġ< Ġ- 1 9 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ"- 4 5 Ġ${ Integer . toString ( Math . min ( 4 , Ġpower Ġ+ Ġ 1 )) }" ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġ" 0 Ġ 0 " ĊĠĠĠ Ġ} Ċ } ĊĊĊ