package Ġcom . so y wiz . k lock . internal Ċ Ċ import Ġkotlin . math . pow Ċ Ċ internal Ġclass ĠMicro Str Reader ( val Ġstr : ĠString , Ġvar Ġoffset : ĠInt Ġ= Ġ 0 ) Ġ{ ĊĠĠĠ Ġval Ġlength Ġget () Ġ= Ġstr . length ĊĠĠĠ Ġval Ġavailable Ġget () Ġ= Ġstr . length Ġ- Ġoffset ĊĠĠĠ Ġval Ġhas More Ġget () Ġ= Ġoffset Ġ< Ġstr . length ĊĠĠĠ Ġfun Ġpeek Char (): ĠChar Ġ= Ġstr [ offset ] ĊĠĠĠ Ġfun Ġread Char (): ĠChar Ġ= Ġstr [ offset ++] ĊĠĠĠ Ġfun Ġtry Read ( str : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( str . length Ġ> Ġavailable ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġfor Ġ( n Ġin Ġ 0 Ġuntil Ġstr . length ) Ġif Ġ( this . str [ offset Ġ+ Ġn ] Ġ!= Ġstr [ n ]) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġoffset Ġ+= Ġstr . length ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĠĠĠ Ġfun Ġread ( count : ĠInt ): ĠString Ġ= Ġthis . str . substring ( offset , Ġ( offset Ġ+ Ġcount ). coerce At Most ( length )). also Ġ{ Ġthis . offset Ġ+= Ġit . length Ġ} ĊĠĠĠ Ġfun Ġread Int ( count : ĠInt ): ĠInt Ġ= Ġread ( count ). toInt () ĊĠĠĠ Ġfun Ġtry ReadInt ( count : ĠInt ): ĠInt ? Ġ= Ġread ( count ). toInt OrNull () ĊĠĠĠ Ġfun Ġtry Read Double ( count : ĠInt ): ĠDouble ? Ġ= Ġread ( count ). replace (',', Ġ'. '). toDouble OrNull () ĊĊĠĠĠ Ġfun Ġtry Read Double (): ĠDouble ? Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġnum Count Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġnum Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġden Count Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġden Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġdecimals Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġloop @ while Ġ( hasMore ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( val Ġpc Ġ= Ġpeek Char ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ',' Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( num Count Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdecimals Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġread Char () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġin Ġ' 0 ' .. ' 9 ' Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġc Ġ= Ġread Char () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( decimals ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġden Count ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġden Ġ*= Ġ 1 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġden Ġ+= Ġ( c Ġ- Ġ' 0 ') ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnum Count ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnum Ġ*= Ġ 1 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnum Ġ+= Ġ( c Ġ- Ġ' 0 ') ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak @ loop ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( num Count Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnum . toDouble () Ġ+ Ġ( den . toDouble () Ġ* Ġ 1 0 . 0 . pow (- den Count )) ĊĠĠĠ Ġ} Ċ }