package Ġcom . dev paul . calcul ador ak otlin app ĊĊ Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . Button Ċ import Ġkotlinx . android . synt hetic . main . activity _ main .* Ċ Ċ class ĠMainActivity Ġ: ĠAppCompatActivity () Ċ { ĊĠĠĠ Ġprivate Ġvar Ġcan Add Operation Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġcan Add Decimal Ġ= Ġtrue ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ main ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġnumber Action ( view : ĠView ) ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġif ( view Ġis ĠButton ) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( view . text Ġ== Ġ". ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( can Add Decimal ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwork ings TV . append ( view . text ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcan Add Decimal Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwork ings TV . append ( view . text ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcan Add Operation Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġoperation Action ( view : ĠView ) ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġif ( view Ġis ĠButton Ġ&& Ġcan Add Operation ) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwork ings TV . append ( view . text ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcan Add Operation Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcan Add Decimal Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġall Clear Action ( view : ĠView ) ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġwork ings TV . text Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġresults TV . text Ġ= Ġ"" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġback Space Action ( view : ĠView ) ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlength Ġ= Ġwork ings TV . length () ĊĠĠĠĠĠĠĠ Ġif ( length Ġ> Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwork ings TV . text Ġ= Ġwork ings TV . text . sub Sequence ( 0 , Ġlength Ġ- Ġ 1 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġequals Action ( view : ĠView ) ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġresults TV . text Ġ= Ġcalculate Results () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcalculate Results (): ĠString ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdigits Operators Ġ= Ġdigits Operators () ĊĠĠĠĠĠĠĠ Ġif ( digits Operators . isEmpty ()) Ġreturn Ġ"" ĊĊĠĠĠĠĠĠĠ Ġval Ġtimes Division Ġ= Ġtimes Division Calculate ( digits Operators ) ĊĠĠĠĠĠĠĠ Ġif ( times Division . isEmpty ()) Ġreturn Ġ"" ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġadd Subtract Calculate ( times Division ) ĊĠĠĠĠĠĠĠ Ġreturn Ġresult . toString () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadd Subtract Calculate ( passed List : ĠMutable List < Any >): ĠFloat ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= Ġpassed List [ 0 ] Ġas ĠFloat ĊĊĠĠĠĠĠĠĠ Ġfor ( i Ġin Ġpassed List . indices ) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( passed List [ i ] Ġis ĠChar Ġ&& Ġi Ġ!= Ġpassed List . last Index ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoperator Ġ= Ġpassed List [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnext Digit Ġ= Ġpassed List [ i Ġ+ Ġ 1 ] Ġas ĠFloat ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( operator Ġ== Ġ'+ ') ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ+= Ġnext Digit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( operator Ġ== Ġ'-') ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ-= Ġnext Digit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġtimes Division Calculate ( passed List : ĠMutable List < Any >): ĠMutable List < Any > ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġlist Ġ= Ġpassed List ĊĠĠĠĠĠĠĠ Ġwhile Ġ( list . contains (' x ') Ġ|| Ġlist . contains ('/ ')) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist Ġ= Ġcalc Times Div ( list ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġlist ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcalc Times Div ( passed List : ĠMutable List < Any >): ĠMutable List < Any > ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnew List Ġ= Ġmutable ListOf < Any >() ĊĠĠĠĠĠĠĠ Ġvar Ġrestart Index Ġ= Ġpassed List . size ĊĊĠĠĠĠĠĠĠ Ġfor ( i Ġin Ġpassed List . indices ) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( passed List [ i ] Ġis ĠChar Ġ&& Ġi Ġ!= Ġpassed List . last Index Ġ&& Ġi Ġ< Ġrestart Index ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoperator Ġ= Ġpassed List [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprev Digit Ġ= Ġpassed List [ i Ġ- Ġ 1 ] Ġas ĠFloat ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnext Digit Ġ= Ġpassed List [ i Ġ+ Ġ 1 ] Ġas ĠFloat ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen ( operator ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ' x ' Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew List . add ( prev Digit Ġ* Ġnext Digit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrestart Index Ġ= Ġi Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ'/' Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew List . add ( prev Digit Ġ/ Ġnext Digit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrestart Index Ġ= Ġi Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew List . add ( prev Digit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew List . add ( operator ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( i Ġ> Ġrestart Index ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew List . add ( passed List [ i ]) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġnew List ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdigits Operators (): ĠMutable List < Any > ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlist Ġ= Ġmutable ListOf < Any >() ĊĠĠĠĠĠĠĠ Ġvar Ġcurrent Digit Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġfor ( character Ġin Ġwork ings TV . text ) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( character . is Digit () Ġ|| Ġcharacter Ġ== Ġ'.') ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Digit Ġ+= Ġcharacter ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist . add ( current Digit . toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Digit Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist . add ( character ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif ( current Digit Ġ!= Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist . add ( current Digit . toFloat ()) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġlist ĊĠĠĠ Ġ} Ċ Ċ } ĊĊĊĊĊĊĊĊĊĊĊĊĊĊĊĊ ĊĊĊĊ