/* Ċ Ġ* ĠCopyright ĠÂ© Ġ 2 0 2 1 ĠPaul ĠAmb rose Ġ( p amb rose @ mac . com ) Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ @ file : Suppress (" Un document ed Public Class ", Ġ" Un document ed Public Function ") Ċ Ċ import Ġio . b att les n ake . core . Abstract Battle Snake Ċ import Ġio . b att les n ake . core . DOWN Ċ import Ġio . b att les n ake . core . Describe Response Ċ import Ġio . b att les n ake . core . Game Strategy Ċ import Ġio . b att les n ake . core . LEFT Ċ import Ġio . b att les n ake . core . Move Request Ċ import Ġio . b att les n ake . core . Move Response Ċ import Ġio . b att les n ake . core . RIGHT Ċ import Ġio . b att les n ake . core . Snake Context Ċ import Ġio . b att les n ake . core . Start Request Ċ import Ġio . b att les n ake . core . UP Ċ import Ġio . b att les n ake . core . strategy Ċ import Ġio . ktor . server . application .* Ċ Ċ object ĠMy Kotlin Snake Ġ: ĠAbstract Battle Snake < My Kotlin Snake . My Snake Context >() Ġ{ ĊĊĠ Ġoverride Ġfun Ġgame Strategy (): ĠGame Strategy < My Snake Context > Ġ= ĊĠĠĠ Ġstrategy ( verbose Ġ= Ġtrue ) Ġ{ ĊĊĠĠĠĠĠ Ġon Describe Ġ{ Ġcall : ĠApplication Call Ġ-> ĊĠĠĠĠĠĠĠ ĠDescribe Response (" me ", Ġ"# ff 0 0 0 0 ", Ġ" bel uga ", Ġ" bolt ") ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ ĠonStart Ġ{ Ġcontext : ĠMy Snake Context , Ġrequest : ĠStart Request Ġ-> ĊĠĠĠĠĠĠĠ Ġfun Ġorigin Path ( x : ĠInt , Ġy : ĠInt ): ĠList < Move Response > Ġ= ĊĠĠĠĠĠĠĠĠĠ Ġbuild List Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepeat ( y ) Ġ{ Ġadd ( DOWN ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepeat ( x ) Ġ{ Ġadd ( LEFT ) Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġyou Ġ= Ġrequest . you ĊĠĠĠĠĠĠĠ Ġval Ġboard Ġ= Ġrequest . board ĊĊĠĠĠĠĠĠĠ Ġcontext . moves Ġ= Ġorigin Path ( you . head Position . x , Ġyou . head Position . y ). iterator () ĊĊĠĠĠĠĠĠĠ Ġlogger . info Ġ{ Ġ" Go Ġto Ġorigin Ġmoves : Ġ${ you . head Position . x }, ${ you . head Position . y } Ġgame Ġid : Ġ${ request . game Id }" Ġ} ĊĠĠĠĠĠĠĠ Ġlogger . info Ġ{ Ġ" Per imeter Ġmoves : Ġ${ board . width } x ${ board . height } Ġgame Ġid : Ġ${ request . game Id }" Ġ} ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġon Move Ġ{ Ġcontext : ĠMy Snake Context , Ġrequest : ĠMove Request Ġ-> ĊĠĠĠĠĠĠĠ Ġfun Ġper imeter Path ( width : ĠInt , Ġheight : ĠInt ): ĠList < Move Response > Ġ= ĊĠĠĠĠĠĠĠĠĠ Ġbuild List Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepeat ( height Ġ- Ġ 1 ) Ġ{ Ġadd ( UP ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepeat ( width Ġ- Ġ 1 ) Ġ{ Ġadd ( RIGHT ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepeat ( height Ġ- Ġ 1 ) Ġ{ Ġadd ( DOWN ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepeat ( width Ġ- Ġ 1 ) Ġ{ Ġadd ( LEFT ) Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( request . is At Origin ) ĊĠĠĠĠĠĠĠĠĠ Ġcontext . moves Ġ= Ġper imeter Path ( request . board . width , Ġrequest . board . height ). iterator () ĊĊĠĠĠĠĠĠĠ Ġcontext . moves . next () ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠ Ġclass ĠMy Snake Context Ġ: ĠSn ake Context () Ġ{ ĊĠĠĠ Ġlateinit Ġvar Ġmoves : ĠIterator < Move Response > ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġsnake Context (): ĠMy Snake Context Ġ= ĊĠĠĠ ĠMy Snake Context () ĊĊĠ Ġ@ Jvm Static ĊĠ Ġfun Ġmain ( args : ĠArray < String >) Ġ{ ĊĠĠĠ Ġrun () ĊĠ Ġ} Ċ }