package Ġy 2 0 2 1 Ċ Ċ class ĠDay 0 3 ( private Ġval Ġdata : ĠList < String >) Ġ{ ĊĊĠĠĠ Ġclass ĠReport ( private Ġval Ġdata : ĠList < String >) Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġgamma (): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠUsing Ġfirst Ġline Ġto Ġdetermine Ġlimits Ġof Ġmy Ġbrowse Ġ( indices Ġof Ġline Ġ 1 Ġwill Ġtell Ġme ĠI Ġcan Ġlook Ġthrough Ġcolumn Ġ 0 Ġto Ġ 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThen Ġfor Ġeach Ġcolumn Ġ( 0 Ġto Ġ 4 ), ĠI Ġcount Ġ 1 , Ġif Ġthere Ġare Ġin Ġmajority Ġwe Ġreturn Ġ 1 Ġelse Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠLast Ġwe Ġgenerate Ġfinal Ġbinary Ġnumber Ġwith Ġ" 1 0 1 0 1 " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġdata . first (). indices . map Ġ{ Ġcolumn Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( data . count Ġ{ Ġit [ column ] Ġ== Ġ' 1 ' Ġ} Ġ> Ġdata . size Ġ/ Ġ 2 ) Ġ' 1 ' Ġelse Ġ' 0 ' ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. join ToString ("") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġepsilon (): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThe Ġepsilon Ġis Ġthe Ġjust Ġa Ġbinary Ġrevert Ġfor Ġgamma ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġgamma (). map Ġ{ Ġif Ġ( it Ġ== Ġ' 1 ') Ġ' 0 ' Ġelse Ġ' 1 ' Ġ}. join ToString ("") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġo xygen (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġbrowse Ġ{ Ġones , Ġzeros Ġ-> Ġif Ġ( ones . size Ġ>= Ġzeros . size ) Ġones Ġelse Ġzeros Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġco 2 (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġbrowse Ġ{ Ġones , Ġzeros Ġ-> Ġif Ġ( zeros . size Ġ<= Ġones . size ) Ġzeros Ġelse Ġones Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġbrowse ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompare : Ġ( ones : ĠList < String >, Ġzeros : ĠList < String >) Ġ-> ĠList < String > ĊĠĠĠĠĠĠĠ Ġ) Ġ= Ġdata . first (). indices ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. fold ( data ) Ġ{ Ġacc , Ġindex Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( acc . size Ġ== Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġacc ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġones Ġ= Ġacc . filter Ġ{ Ġit [ index ] Ġ== Ġ' 1 ' Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġzeros Ġ= Ġacc . filter Ġ{ Ġit [ index ] Ġ== Ġ' 0 ' Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcompare ( ones , Ġzeros ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. join ToString ("") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. toInt ( 2 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġpart 1 (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġreport Ġ= ĠReport ( data ) ĊĠĠĠĠĠĠĠ Ġreturn Ġreport . gamma (). toInt ( 2 ) Ġ* Ġreport . epsilon (). toInt ( 2 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġpart 2 (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġreport Ġ= ĠReport ( data ) ĊĠĠĠĠĠĠĠ Ġreturn Ġreport . co 2 () Ġ* Ġreport . oxy gen () ĊĊĠĠĠ Ġ} Ċ Ċ }