package Ġcov id . sim body . v 2 . logic . core Ċ Ċ import Ġkotlin . reflect . K Mutable Property Ċ Ċ sealed Ġclass ĠParticle Ġ{ ĊĠĠĠ Ġabstract Ġval Ġsymbol : ĠString Ċ } Ċ Ċ class ĠE ry th ro Particle () Ġ: ĠParticle () Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġcounter Ġ= Ġ 1 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġobject ĠInfo Ġ: ĠParticle Info Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠ Ġoverride Ġval Ġsymbol Ġ= Ġ" ðŁĴ § " ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġsymbol Ġ= Ġ" E " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġhe mo 1 Ġ= ĠH emo () ĊĠĠĠ Ġprivate Ġval Ġhe mo 2 Ġ= ĠH emo () ĊĠĠĠ Ġval Ġhe mos : ĠCollection < H emo > Ġ= ĠlistOf ( he mo 1 , Ġhe mo 2 ) ĊĠĠĠ Ġval Ġhe mos Elements Ġget () Ġ= Ġhe mos . map Ġ{ Ġit . elements Ġ}. flatten () ĊĊĠĠĠ Ġ/** Ġreturns Ġactual Ġo xygen Ġu pt ake Ġ*/ ĊĠĠĠ Ġfun Ġtake Up O xygen ( amount : ĠInt ) Ġ= Ġchange H emo Elements ( amount , ĠH emo Element . Empty , ĠH emo Element . O xygen ) ĊĊĠĠĠ Ġ/** Ġreturns Ġactual Ġcar bond io x id Ġrelease Ġ*/ ĊĠĠĠ Ġfun Ġrelease Carbon dio x id ( amount : ĠInt ) Ġ= Ġchange H emo Elements ( amount , ĠH emo Element . Carbon dio x id , ĠH emo Element . Empty ) ĊĊĠĠĠ Ġprivate Ġfun Ġchange H emo Elements ( amount : ĠInt , Ġsearch : ĠH emo Element , Ġreplace : ĠH emo Element ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġamount Still Ġ= Ġamount ĊĠĠĠĠĠĠĠ Ġwhile Ġ( amount Still Ġ> Ġ 0 Ġ&& Ġcount H emo Elements ( search ) Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġempty Element Ġ= Ġhe mos . map NotNull Ġ{ Ġit . element Property For ( search ) Ġ}. first OrNull () Ġ?: Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġempty Element . setter . call ( replace ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġamount Still -- ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġamount Ġ- Ġamount Still ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġall H emo Elements Are ( expected : ĠH emo Element ): ĠBoolean Ġ= ĊĠĠĠĠĠĠĠ Ġhe mos . all Ġ{ Ġit . elements . all Ġ{ Ġit Ġ== Ġexpected Ġ} Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcount H emo Elements ( filter : ĠH emo Element ): ĠInt Ġ= ĊĠĠĠĠĠĠĠ Ġhe mos . map Ġ{ Ġit . elements . count Ġ{ Ġit Ġ== Ġfilter Ġ} Ġ}. sum () ĊĊĠĠĠ Ġoverride Ġval Ġsymbol : ĠString Ġ= ĠInfo . symbol ĊĠĠĠ Ġprivate Ġval Ġid Counter Ġ= Ġcounter ++ ĊĠĠĠ Ġoverride Ġfun ĠtoString () Ġ= Ġ" E ry th ro Particle @ $ id Counter " Ċ } Ċ Ċ class ĠH emo Ġ{ ĊĠĠĠ Ġvar Ġelement 1 Ġ= ĠH emo Element . Empty ĊĠĠĠ Ġvar Ġelement 2 Ġ= ĠH emo Element . Empty ĊĠĠĠ Ġvar Ġelement 3 Ġ= ĠH emo Element . Empty ĊĠĠĠ Ġvar Ġelement 4 Ġ= ĠH emo Element . Empty ĊĠĠĠ Ġval Ġelements Ġget () Ġ= ĠlistOf ( element 1 , Ġelement 2 , Ġelement 3 , Ġelement 4 ) ĊĠĠĠ Ġval Ġelements Prop ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġmap Of < H emo Element , ĠK Mutable Property < H emo Element >>( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelement 1 Ġto Ġ:: element 1 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelement 2 Ġto Ġ:: element 2 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelement 3 Ġto Ġ:: element 3 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelement 4 Ġto Ġ:: element 4 , ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠ Ġfun Ġelement Property For ( find : ĠH emo Element ) Ġ= ĊĠĠĠĠĠĠĠ Ġelements Prop . entries . first OrNull Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . key Ġ== Ġfind ĊĠĠĠĠĠĠĠ Ġ} ?. value Ċ Ċ } Ċ Ċ enum Ġclass ĠH emo Element Ġ{ ĊĠĠĠ ĠEmpty , ĊĠĠĠ ĠO xygen , ĊĠĠĠ ĠCarbon dio x id , Ċ } ĊĊ Ċ class ĠS ugar Particle Ġ: ĠParticle () Ġ{ ĊĠĠĠ Ġobject ĠInfo Ġ: ĠParticle Info Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠ Ġoverride Ġval Ġsymbol Ġ= Ġ" ðŁ į ¬ " ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġsymbol Ġ= Ġ" S " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġsymbol : ĠString Ġ= ĠE ry th ro Particle . Info . symbol Ċ } Ċ Ċ interface ĠParticle Info Ġ{ ĊĠĠĠ Ġval Ġsymbol : ĠString Ċ }