package Ġorg . samp l . runtime Ċ Ċ import Ġorg . samp l . exceptions . PL Exception Ċ import Ġorg . samp l . runtime . Primitive Runtime Library . split Ċ Ċ /** Ċ Ġ* Ġ[ Primitive Runtime Library ] Ġcontains Ġa Ġcollection Ġof Ġmethods Ġfor Ġprimitive Ġruntime Ġfunctions . Ċ Ġ*/ Ċ object ĠPrimitive Runtime Library Ġ: ĠRuntime Library Ġ{ ĊĊĠĠĠ Ġ/* ĊĠĠĠĠ Ġ* Ġ------------------------------------------------------------ ĊĠĠĠĠ Ġ* ĠPart Ġ 1 : ĠPrinter s ĊĠĠĠĠ Ġ* Ġ------------------------------------------------------------ ĊĠĠĠĠ Ġ*/ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ[ print Int ] Ġprints Ġ[ value ] Ġto Ġthe Ġstandard Ġoutput Ġwithout Ġa Ġnew Ġline . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Runtime Function ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġprint Int ( value : ĠLong ): ĠUnit Ġ= Ġprint ( value ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ[ print Float ] Ġprints Ġ[ value ] Ġto Ġthe Ġstandard Ġoutput Ġwithout Ġa Ġnew Ġline . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Runtime Function ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġprint Float ( value : ĠDouble ): ĠUnit Ġ= Ġprint ( value ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ[ print Bool ] Ġprints Ġ[ value ] Ġto Ġthe Ġstandard Ġoutput Ġwithout Ġa Ġnew Ġline . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Runtime Function ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġprint Bool ( value : ĠBoolean ): ĠUnit Ġ= Ġprint ( value ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ[ print Char ] Ġprints Ġ[ value ] Ġto Ġthe Ġstandard Ġoutput Ġwithout Ġa Ġnew Ġline . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Runtime Function ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġprint Char ( value : ĠChar ): ĠUnit Ġ= Ġprint ( value ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ[ print String ] Ġprints Ġ[ value ] Ġto Ġthe Ġstandard Ġoutput Ġwithout Ġa Ġnew Ġline . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Runtime Function ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġprint String ( value : ĠString ): ĠUnit Ġ= Ġprint ( value ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ[ print Object ] Ġprints Ġ[ value ] Ġto Ġthe Ġstandard Ġoutput Ġwithout Ġa Ġnew Ġline . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Runtime Function ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġ< T Ġ: ĠAny > Ġprint Object ( value : ĠT ): ĠUnit Ġ= Ġprintln ( value ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ[ println ] Ġprints Ġan Ġempty Ġline Ġto Ġthe Ġstandard Ġoutput . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Runtime Function ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġprintln (): ĠUnit Ġ= Ġprintln () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ[ println Int ] Ġprints Ġ[ value ] Ġto Ġthe Ġstandard Ġoutput Ġwith Ġa Ġnew Ġline . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Runtime Function ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġprintln Int ( value : ĠLong ): ĠUnit Ġ= Ġprintln ( value ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ[ println Float ] Ġprints Ġ[ value ] Ġto Ġthe Ġstandard Ġoutput Ġwith Ġa Ġnew Ġline . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Runtime Function ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġprintln Float ( value : ĠDouble ): ĠUnit Ġ= Ġprintln ( value ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ[ println Bool ] Ġprints Ġ[ value ] Ġto Ġthe Ġstandard Ġoutput Ġwith Ġa Ġnew Ġline . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Runtime Function ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġprintln Bool ( value : ĠBoolean ): ĠUnit Ġ= Ġprintln ( value ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ[ println Char ] Ġprints Ġ[ value ] Ġto Ġthe Ġstandard Ġoutput Ġwith Ġa Ġnew Ġline . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Runtime Function ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġprintln Char ( value : ĠChar ): ĠUnit Ġ= Ġprintln ( value ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ[ println String ] Ġprints Ġ[ value ] Ġto Ġthe Ġstandard Ġoutput Ġwith Ġa Ġnew Ġline . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Runtime Function ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġprintln String ( value : ĠString ): ĠUnit Ġ= Ġprintln ( value ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ[ println Object ] Ġprints Ġ[ value ] Ġto Ġthe Ġstandard Ġoutput Ġwith Ġa Ġnew Ġline . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Runtime Function ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġ< T Ġ: ĠAny > Ġprintln Object ( value : ĠT ): ĠUnit Ġ= Ġprintln ( value ) ĊĊĠĠĠ Ġ/* ĊĠĠĠĠ Ġ* Ġ------------------------------------------------------------ ĊĠĠĠĠ Ġ* ĠPart Ġ 2 : ĠRe aders ĊĠĠĠĠ Ġ* Ġ------------------------------------------------------------ ĊĠĠĠĠ Ġ*/ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ[ readLine ] Ġreads Ġa Ġline Ġfrom Ġthe Ġstandard Ġinput Ġand Ġreturns Ġthe Ġline . ĊĠĠĠĠ Ġ* ĠBlocks Ġuntil Ġthere Ġis Ġa Ġline . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Runtime Function ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġread Line (): ĠString Ġ= Ġkotlin . io . readLine () !! ĊĊĠĠĠ Ġ/* ĊĠĠĠĠ Ġ* Ġ------------------------------------------------------------ ĊĠĠĠĠ Ġ* ĠPart Ġ 3 : ĠPrimitive ĠType ĠConverter s ĊĠĠĠĠ Ġ* Ġ------------------------------------------------------------ ĊĠĠĠĠ Ġ*/ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ[ float ToInt ] Ġconverts Ġ[ value ] Ġto Ġint . ĠIt Ġwill Ġalways Ġsucceed , Ġbut Ġwith Ġsome Ġprecision Ġloss . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Runtime Function ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġfloat ToInt ( value : ĠDouble ): ĠLong Ġ= Ġvalue . to Long () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ[ string ToInt ] Ġconverts Ġ[ value ] Ġto Ġint . ĠThrows Ġ" NOT _ CONVERTIBLE " Ġif Ġfailed . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Runtime Function ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġstring ToInt ( value : ĠString ): ĠLong Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue . to Long OrNull () Ġ?: Ġthrow ĠPL Exception (" NOT _ CONVERTIBLE ") ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ[ int To Float ] Ġconverts Ġ[ value ] Ġto Ġfloat . ĠIt Ġwill Ġalways Ġsucceed , Ġbut Ġwith Ġsome Ġprecision Ġloss . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Runtime Function ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġint To Float ( value : ĠLong ): ĠDouble Ġ= Ġvalue . toDouble () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ[ string To Float ] Ġconverts Ġ[ value ] Ġto Ġfloat . ĠThrows Ġ" NOT _ CONVERTIBLE " Ġif Ġfailed . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Runtime Function ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġstring To Float ( value : ĠString ): ĠDouble Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue . toDouble OrNull () Ġ?: Ġthrow ĠPL Exception (" NOT _ CONVERTIBLE ") ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ[ int ToString ] Ġconverts Ġ[ value ] Ġto Ġstring . ĠIt Ġwill Ġalways Ġsucceed . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Runtime Function ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġint ToString ( value : ĠLong ): ĠString Ġ= Ġvalue . toString () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ[ float ToString ] Ġconverts Ġ[ value ] Ġto Ġstring . ĠIt Ġwill Ġalways Ġsucceed . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Runtime Function ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġfloat ToString ( value : ĠDouble ): ĠString Ġ= Ġvalue . toString () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ[ bool ToString ] Ġconverts Ġ[ value ] Ġto Ġstring . ĠIt Ġwill Ġalways Ġsucceed . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Runtime Function ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġbool ToString ( value : ĠBoolean ): ĠString Ġ= Ġvalue . toString () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ[ char ToString ] Ġconverts Ġ[ value ] Ġto Ġstring . ĠIt Ġwill Ġalways Ġsucceed . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Runtime Function ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġchar ToString ( value : ĠChar ): ĠString Ġ= Ġvalue . toString () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ[ object ToString ] Ġconverts Ġ[ value ] Ġto Ġstring . ĠIt Ġwill Ġalways Ġsucceed . ĊĠĠĠĠ Ġ* ĠDo Ġnot Ġuse Ġthis Ġfunction Ġfor Ġother Ġprimitive Ġtypes . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Runtime Function ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġ< T Ġ: ĠAny > Ġobject ToString ( value : ĠT ): ĠString Ġ= Ġvalue . toString () ĊĊĠĠĠ Ġ/* ĊĠĠĠĠ Ġ* Ġ------------------------------------------------------------ ĊĠĠĠĠ Ġ* ĠPart Ġ 4 : ĠString ĠFunctions ĊĠĠĠĠ Ġ* Ġ------------------------------------------------------------ ĊĠĠĠĠ Ġ*/ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ[ getLength ] Ġreturns Ġthe Ġlength Ġof Ġthe Ġstring Ġ[ s ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Runtime Function ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġget Length ( s : ĠString ): ĠLong Ġ= Ġs . length . to Long () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ[ get Char ] Ġreturns Ġchar Ġat Ġ[ index ] Ġof Ġ[ s ]. ĠThrows Ġ" OUT _ OF _ BOUND " Ġif Ġ[ index ] Ġis Ġout Ġof Ġbound . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Runtime Function ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġget Char ( index : ĠLong , Ġs : ĠString ): ĠChar Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġs [ index . toInt ()] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIndex OutOfBoundsException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠPL Exception (" OUT _ OF _ BOUND ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ[ get Substring ] Ġreturns Ġsubstring Ġfrom Ġ[ from ] Ġ( inclusive ) Ġto Ġ[ to ] Ġ( exclusive ) Ġ[ s ]. ĠThrows ĊĠĠĠĠ Ġ* Ġ" OUT _ OF _ BOUND " Ġif Ġ[ from ] Ġor Ġ[ to ] Ġis Ġan Ġout Ġof Ġbound Ġindex Ġor Ġ[ from ] Ġis Ġgreater Ġthan Ġ[ to ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Runtime Function ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġget Substring ( from : ĠLong , Ġto : ĠLong , Ġs : ĠString ): ĠString Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġs . substring ( from . toInt (), Ġto . toInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIndex OutOfBoundsException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠPL Exception (" OUT _ OF _ BOUND ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ[ trim String ] Ġreturns Ġthe Ġtrimmed Ġversion Ġof Ġ[ s ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Runtime Function ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġtrim String ( s : ĠString ): ĠString Ġ= Ġs . trim () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ[ contains Substring ] Ġreturns Ġwhether Ġ[ sub ] Ġis Ġcontained Ġin Ġ[ s ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Runtime Function ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġcontains Substring ( sub : ĠString , Ġs : ĠString ): ĠBoolean Ġ= Ġs . contains ( other Ġ= Ġsub ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ[ indexOf ] Ġreturns Ġthe Ġindex Ġof Ġ[ sub ] Ġin Ġ[ s ]. ĠReturns Ġ- 1 Ġif Ġ[ sub ] Ġis Ġnot Ġin Ġ[ s ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Runtime Function ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun ĠindexOf ( sub : ĠString , Ġs : ĠString ): ĠLong Ġ= Ġs . indexOf ( string Ġ= Ġsub ). to Long () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ[ split ] Ġreturns Ġan Ġarray Ġof Ġsplit Ġstrings Ġf ro Ġ[ s ] Ġwith Ġ[ delimiter ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Runtime Function ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġsplit ( delimiter : ĠString , Ġs : ĠString ): ĠArray < String > Ġ= Ġs . split ( delimiter ). to Typed Array () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ[ getString Array Length ] Ġreturns Ġthe Ġlength Ġof Ġthe Ġgiven Ġstring Ġarray Ġ[ a ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Runtime Function ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun ĠgetString Array Length ( a : ĠArray < String >): ĠLong Ġ= Ġa . size . to Long () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ[ getString ] Ġreturns Ġthe Ġstring Ġat Ġ[ index ] Ġof Ġstring Ġarray Ġ[ a ]. ĠThrows Ġ" OUT _ OF _ BOUND " Ġif ĊĠĠĠĠ Ġ* Ġ[ index ] Ġis Ġout Ġof Ġbound . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Runtime Function ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun ĠgetString ( index : ĠLong , Ġa : ĠArray < String >): ĠString Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa [ index . toInt ()] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠArray Index OutOfBoundsException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠPL Exception (" OUT _ OF _ BOUND ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ Ċ } Ċ