package Ġcom . challenge . domain . manager Ċ Ċ import Ġcom . challenge . domain . entity . Circle Ċ Ċ /** Ċ Ġ* ĠCount s Ġtotal Ġnumber Ġof Ġ[ Circle ] Ġwith Ġsame ĠIDs Ċ Ġ*/ Ċ fun ĠIterable < Circle >. count Duplicates (): ĠInt Ġ= ĊĠĠĠ Ġthis . grouping By Ġ{ Ġit . id Ġ}. each Count (). values ĊĠĠĠĠĠĠĠ Ġ// Ġ- 1 Ġstands Ġfor Ġremoving Ġnon - duplicate Ġitem ĊĠĠĠĠĠĠĠ Ġ. fold ( 0 ) Ġ{ Ġacc , Ġi Ġ-> Ġacc Ġ+ Ġi Ġ- Ġ 1 Ġ} Ċ Ċ /** Ċ Ġ* ĠReturns Ġlist Ġof Ġ[ Circle ] Ġwith Ġunique ĠIDs . Ċ Ġ* ĠIn Ġcase Ġseveral Ġcircles Ġhave Ġthe Ġsame ĠIDs Ġit Ġreturns Ġthe Ġone Ġwith Ġhighest Ġnumber Ġof Ġ[ Circle . members ]. Ċ Ġ* ĠBe haviour Ġin Ġcase , Ġwhen Ġtwo Ġcircles Ġhave Ġthe Ġsame Ġnumber Ġof Ġmembers Ġis Ġundefined , Ġany Ġof Ġthem Ġcan Ġbe Ġreturned . Ċ Ġ*/ Ċ fun ĠIterable < Circle >. remove Duplicates (): ĠList < Circle > Ġ{ ĊĠĠĠ Ġval Ġcircle Items Number Comparator Ġ= Ġcompare By Ġ{ Ġcircle : ĠCircle Ġ-> Ġcircle . members . size Ġ} ĊĠĠĠ Ġval Ġresult Map Ġ= Ġhash Map Of < Int , ĠCircle >() ĊĠĠĠ ĠforEach Ġ{ Ġa Ġ-> ĊĠĠĠĠĠĠĠ Ġresult Map [ a . id ] Ġ= Ġresult Map [ a . id ]?. let Ġ{ Ġb Ġ-> Ġmax Of ( a , Ġb , Ġcircle Items Number Comparator ) Ġ} Ġ?: Ġa ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġresult Map . values . toList () Ċ } ĊĊ