package Ġmatter link Ċ Ċ import Ġblue . end less . j ank son . JsonObject Ċ import Ġblue . end less . j ank son . impl . SyntaxError Ċ import Ġkotlin . math . sqrt Ċ Ċ fun ĠJsonObject . parse Dimensions (): ĠList < Int > Ġ= Ġget Or Put List (" dimensions ", Ġempty List (), Ġ" list Ġof Ġdimension Ġids ") Ċ fun ĠJsonObject . parse All Dimensions (): ĠBoolean Ġ= Ġget OrDefault (" all Dimensions ", Ġfalse , Ġ" ign ores Ġdimension Ġlist ") Ċ Ċ sealed Ġclass ĠArea Ġ{ ĊĠĠĠ Ġabstract Ġval Ġtype : ĠString ĊĠĠĠ Ġabstract Ġval Ġdimensions : ĠList < Int > ĊĠĠĠ Ġabstract Ġval Ġall Dimensions : ĠBoolean ĊĊĠĠĠ Ġabstract Ġfun Ġtest In Bounds ( x : ĠInt , Ġy : ĠInt , Ġz : ĠInt ): ĠBoolean ĊĊĠĠĠ Ġfun Ġtest For Dim ( dimension : ĠInt ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( all Dimensions ) Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġif Ġ( dimension Ġ== Ġnull ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġreturn Ġdimensions . contains ( dimension ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġparse ( json Obj : ĠJsonObject ): ĠArea Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype : ĠString Ġ= Ġjson Obj . get OrDefault (" type ", Ġ" INF IN ITE ", Ġ" Area Ġtype Ġidentifier ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( type . toUpperCase ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" INF IN ITE " Ġ-> ĠIn finite . parse ( json Obj ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" RADIUS " Ġ-> ĠRadius . parse ( json Obj ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" SP HERE " Ġ-> ĠSphere . parse ( json Obj ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" BOX " Ġ-> ĠBox . parse ( json Obj ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" S QUARE " Ġ-> ĠSquare . parse ( json Obj ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠSyntax Error (" no ĠArea Ġtype Ġ'$ type ' Ġfound ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdata Ġclass ĠIn finite ( ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġdimensions : ĠList < Int > Ġ= ĠlistOf (), ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġall Dimensions : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġ) Ġ: ĠArea () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġtype Ġ= Ġ" INF IN ITE " ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġtest In Bounds ( x : ĠInt , Ġy : ĠInt , Ġz : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġparse ( json Obj : ĠJsonObject ): ĠArea Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠIn finite ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdimensions Ġ= Ġjson Obj . parse Dimensions (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġall Dimensions Ġ= Ġjson Obj . parse All Dimensions () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdata Ġclass ĠRadius ( ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġdimensions : ĠList < Int > Ġ= ĠlistOf (), ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġall Dimensions : ĠBoolean Ġ= Ġfalse , ĊĠĠĠĠĠĠĠ Ġval Ġx : ĠInt , ĊĠĠĠĠĠĠĠ Ġval Ġz : ĠInt , ĊĠĠĠĠĠĠĠ Ġval Ġradius : ĠInt ? ĊĠĠĠ Ġ) Ġ: ĠArea () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġtype Ġ= Ġ" RADIUS " ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġtest In Bounds ( x : ĠInt , Ġy : ĠInt , Ġz : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( radius Ġ== Ġnull ) Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsqrt ((( this . x Ġ- Ġx ) Ġ* Ġ( this . x Ġ- Ġx )) Ġ+ Ġ(( this . z Ġ- Ġz ) Ġ* Ġ( this . z Ġ- Ġz )). toFloat ()) Ġ< Ġthis . radius ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġparse ( json Obj : ĠJsonObject ): ĠArea Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠRadius ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdimensions Ġ= Ġjson Obj . parse Dimensions (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġall Dimensions Ġ= Ġjson Obj . parse All Dimensions (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Ġ= Ġjson Obj . get OrDefault (" x ", Ġ 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġz Ġ= Ġjson Obj . get OrDefault (" z ", Ġ 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġradius Ġ= Ġjson Obj . get Re ified (" radius ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠSphere ( ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġdimensions : ĠList < Int > Ġ= ĠlistOf (), ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġall Dimensions : ĠBoolean Ġ= Ġfalse , ĊĠĠĠĠĠĠĠ Ġval Ġx : ĠInt , ĊĠĠĠĠĠĠĠ Ġval Ġy : ĠInt , ĊĠĠĠĠĠĠĠ Ġval Ġz : ĠInt , ĊĠĠĠĠĠĠĠ Ġval Ġradius : ĠInt ? Ġ= Ġnull ĊĠĠĠ Ġ) Ġ: ĠArea () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġtype Ġ= Ġ" SP HERE " ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġtest In Bounds ( x : ĠInt , Ġy : ĠInt , Ġz : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( radius Ġ== Ġnull ) Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsqrt ((( this . x Ġ- Ġx ) Ġ* Ġ( this . x Ġ- Ġx )) Ġ+ Ġ(( this . y Ġ- Ġy ) Ġ* Ġ( this . y Ġ- Ġy )) Ġ+ Ġ(( this . z Ġ- Ġz ) Ġ* Ġ( this . z Ġ- Ġz )). toFloat ()) Ġ< Ġthis . radius ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġparse ( json Obj : ĠJsonObject ): ĠArea Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠSphere ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdimensions Ġ= Ġjson Obj . parse Dimensions (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġall Dimensions Ġ= Ġjson Obj . parse All Dimensions (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Ġ= Ġjson Obj . get OrDefault (" x ", Ġ 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Ġ= Ġjson Obj . get OrDefault (" y ", Ġ 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġz Ġ= Ġjson Obj . get OrDefault (" z ", Ġ 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġradius Ġ= Ġjson Obj . get Re ified (" radius ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠBox ( ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġdimensions : ĠList < Int > Ġ= ĠlistOf (), ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġall Dimensions : ĠBoolean Ġ= Ġfalse , ĊĠĠĠĠĠĠĠ Ġval Ġx 1 : ĠInt , ĊĠĠĠĠĠĠĠ Ġval Ġx 2 : ĠInt , ĊĠĠĠĠĠĠĠ Ġval Ġy 1 : ĠInt , ĊĠĠĠĠĠĠĠ Ġval Ġy 2 : ĠInt , ĊĠĠĠĠĠĠĠ Ġval Ġz 1 : ĠInt , ĊĠĠĠĠĠĠĠ Ġval Ġz 2 : ĠInt ĊĠĠĠ Ġ) Ġ: ĠArea () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġtype Ġ= Ġ" BOX " ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġtest In Bounds ( x : ĠInt , Ġy : ĠInt , Ġz : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġx Ġin Ġx 1 .. x 2 Ġ&& Ġy Ġin Ġy 1 .. y 2 Ġ&& Ġz Ġin Ġz 1 .. z 2 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġparse ( json Obj : ĠJsonObject ): ĠArea Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠBox ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdimensions Ġ= Ġjson Obj . parse Dimensions (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġall Dimensions Ġ= Ġjson Obj . parse All Dimensions (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx 1 Ġ= Ġjson Obj . get OrDefault (" x 1 ", Ġ 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx 2 Ġ= Ġjson Obj . get OrDefault (" x 2 ", Ġ 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy 1 Ġ= Ġjson Obj . get OrDefault (" y 1 ", Ġ 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy 2 Ġ= Ġjson Obj . get OrDefault (" y 2 ", Ġ 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġz 1 Ġ= Ġjson Obj . get OrDefault (" z 1 ", Ġ 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġz 2 Ġ= Ġjson Obj . get OrDefault (" z 2 ", Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠSquare ( ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġdimensions : ĠList < Int > Ġ= ĠlistOf (), ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġall Dimensions : ĠBoolean Ġ= Ġfalse , ĊĠĠĠĠĠĠĠ Ġval Ġx 1 : ĠInt , ĊĠĠĠĠĠĠĠ Ġval Ġx 2 : ĠInt , ĊĠĠĠĠĠĠĠ Ġval Ġz 1 : ĠInt , ĊĠĠĠĠĠĠĠ Ġval Ġz 2 : ĠInt ĊĠĠĠ Ġ) Ġ: ĠArea () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġtype Ġ= Ġ" S QUARE " ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġtest In Bounds ( x : ĠInt , Ġy : ĠInt , Ġz : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġx Ġin Ġx 1 .. x 2 Ġ&& Ġz Ġin Ġz 1 .. z 2 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġparse ( json Obj : ĠJsonObject ): ĠArea Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠSquare ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdimensions Ġ= Ġjson Obj . parse Dimensions (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġall Dimensions Ġ= Ġjson Obj . parse All Dimensions (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx 1 Ġ= Ġjson Obj . get OrDefault (" x 1 ", Ġ 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx 2 Ġ= Ġjson Obj . get OrDefault (" x 2 ", Ġ 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġz 1 Ġ= Ġjson Obj . get OrDefault (" z 1 ", Ġ 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġz 2 Ġ= Ġjson Obj . get OrDefault (" z 2 ", Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ // Ċ // Ċ // ĠĠĠ Ġclass ĠFake Player Ġ( Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġx : ĠInt , Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġy : ĠInt , Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġz : ĠInt , Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname : ĠString Ċ // ĠĠĠ Ġ): ĠArea () Ċ }