package Ġdev . kom u . kr aken . model . region Ċ Ċ import Ġdev . kom u . kr aken . model . Direction Ċ import Ġdev . kom u . kr aken . utils . square Ċ import Ġkotlin . math . abs Ċ import Ġkotlin . math . sign Ċ import Ġkotlin . math . sqrt Ċ Ċ data Ġclass ĠCoordinate ( val Ġx : ĠInt , Ġval Ġy : ĠInt ) Ġ{ ĊĠĠĠ Ġoperator Ġfun Ġplus ( d : ĠDirection ) Ġ= ĠCoordinate ( x Ġ+ Ġd . dx , Ġy Ġ+ Ġd . dy ) ĊĊĠĠĠ Ġfun Ġdistance ( other : ĠCoordinate ) Ġ= Ġsqrt (( square ( x Ġ- Ġother . x ) Ġ+ Ġsquare ( y Ġ- Ġother . y )). toDouble ()). toInt () ĊĠĠĠ Ġfun Ġis Adjacent ( other : ĠCoordinate ) Ġ= Ġabs ( x Ġ- Ġother . x ) Ġ< Ġ 2 Ġ&& Ġabs ( y Ġ- Ġother . y ) Ġ< Ġ 2 Ġ&& Ġother Ġ!= Ġthis ĊĊĠĠĠ Ġfun Ġdirection Of ( other : ĠCoordinate ): ĠDirection Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdx Ġ= Ġ( other . x Ġ- Ġx ). sign ĊĠĠĠĠĠĠĠ Ġval Ġdy Ġ= Ġ( other . y Ġ- Ġy ). sign ĊĊĠĠĠĠĠĠĠ Ġreturn ĠDirection . for Del tas ( dx , Ġdy ) Ġ?: Ġerror (" could Ġnot Ġfind Ġdirection Ġof Ġ$ other Ġfrom Ġ$ this ") ĊĠĠĠ Ġ} Ċ } Ċ