fun Ġmain () Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCalculates Ġbinary Ġ[ String ] Ġgamma Ġand Ġmultip lies Ġit Ġwith Ġits Ġin version , Ġepsilon . ĊĠĠĠĠ Ġ* Ġ@ return Ġdecimal Ġpower Ġconsumption Ġ( product Ġof Ġgamma Ġand Ġepsilon ) ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġpart 1 ( input : ĠList < String >): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġgamma Ġ= Ġinput . gamma String () ĊĠĠĠĠĠĠĠ Ġval Ġepsilon Ġ= Ġgamma . invert Bit String () ĊĊĠĠĠĠĠĠĠ Ġreturn Ġgamma . toInt ( radix Ġ= Ġ 2 ) Ġ* Ġepsilon . toInt ( radix Ġ= Ġ 2 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCalculates Ġo 2 Ġand Ġco 2 Ġratings Ġand ĊĠĠĠĠ Ġ* Ġ@ return Ġproduct Ġof Ġthe Ġratings ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġpart 2 ( input : ĠList < String >) Ġ= Ġinput . filter O 2 Rating () Ġ* Ġinput . filter CO 2 Rating () ĊĊĠĠĠ Ġrun Everything (" 0 3 ", Ġ 1 9 8 , Ġ 2 3 0 , Ġ:: part 1 , Ġ:: part 2 , ĠString Input Reader ) Ċ } Ċ Ċ /** Ċ Ġ* ĠBuilds Ġa Ġbinary Ġ[ String ] Ġconsisting Ġof Ġthe Ġmore Ġcommon Ġ[ Char ] Ġfor Ġeach Ġcolumn Ġ(' 0 ' Ġor Ġ' 1 '). Ċ Ġ*/ Ċ private Ġfun ĠList < String >. gamma String (): ĠString Ġ{ ĊĠĠĠ Ġval Ġcounted Ġ= Ġ' 0 ' ĊĠĠĠ Ġval Ġcounters Ġ= ĠMutable List ( first (). length ) Ġ{ Ġ 0 Ġ} Ġ// Ġcounter Ġfor Ġeach Ġcolumn ĊĊĠĠĠ ĠforEach Ġ{ Ġline Ġ-> ĊĠĠĠĠĠĠĠ Ġline . forEach Indexed Ġ{ Ġindex , Ġchar Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( char Ġ== Ġcounted ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcounters [ index ] ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġbuild String Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġcounters ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend ( if Ġ( i Ġ> Ġthis @ gamma String . size Ġ/ Ġ 2 ) Ġcounted Ġelse Ġ' 1 ') ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun ĠString . invert Bit String () Ġ= Ġbuild String Ġ{ ĊĠĠĠ Ġfor Ġ( bit Char Ġin Ġthis @ invert Bit String ) ĊĠĠĠĠĠĠĠ Ġappend ( if Ġ( bit Char Ġ== Ġ' 1 ') Ġ 0 Ġelse Ġ 1 ) Ċ } Ċ Ċ /** Ċ Ġ* ĠFilters Ġthe Ġremaining Ġ[ List ] Ġof Ġbinary Ġ[ String ] s Ġfor Ġthe Ġmore Ġcommon Ġ[ Char ] Ġin Ġevery Ġcolumn . Ċ Ġ* Ġ@ return Ġthe Ġlast Ġremaining Ġmatching Ġbinary Ġ[ String ] Ġas Ġan Ġ[ Int ] Ċ Ġ*/ Ċ private Ġfun ĠList < String >. filter Gas Rating ( filter Rule : Ġ( toMatch : ĠChar , Ġmatcher : ĠChar ) Ġ-> ĠBoolean ): ĠInt Ġ{ ĊĠĠĠ Ġvar Ġfilter edList Ġ= Ġthis ĊĊĠĠĠ Ġfor Ġ( i Ġin Ġfirst (). indices ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfilter edList Ġ= Ġfilter edList . filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfilter Rule ( it [ i ], Ġfilter edList . gamma String ()[ i ]) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( filter edList . size Ġ== Ġ 1 ) Ġbreak ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġfilter edList . first (). toInt ( radix Ġ= Ġ 2 ) Ċ } Ċ Ċ // ĠTo Ġbe Ġhonest , ĠI Ġhave Ġno Ġcl ue Ġanymore Ġhow Ġthis Ġfilter Rule Ġworks Ġexactly , Ċ // Ġ Ġbut Ġit Ġwas Ġthe Ġonly Ġdifference Ġbetween Ġo 2 Ġand Ġco 2 Ġrating . Ċ private Ġfun ĠList < String >. filter O 2 Rating Ġ() Ġ= Ġfilter Gas Rating Ġ{ Ġto Match , Ġmatcher Ġ-> Ġto Match Ġ!= Ġmatcher Ġ} Ċ private Ġfun ĠList < String >. filter CO 2 Rating () Ġ= Ġfilter Gas Rating Ġ{ Ġto Match , Ġmatcher Ġ-> Ġto Match Ġ== Ġmatcher Ġ} Ċ