#!/ usr / bin / env Ġ- S Ġkotlin c Ġ- script Ċ import Ġjava . io . File Ċ Ċ val Ġall Segments Ġ= Ġset Of (' a ', Ġ' b ', Ġ' c ', Ġ' d ', Ġ' e ', Ġ' f ', Ġ' g ') Ċ Ċ fun Ġinvert Digit ( digit : ĠSet < Char >): ĠSet < Char > Ġ= Ġall Segments . subtract ( digit ) Ċ Ċ var Ġtotal Ġ= Ġ 0 Ċ File (" 2 0 2 1 / 0 8 / input . txt "). forEach Line Ġ{ ĊĠ Ġval Ġ( before , Ġafter ) Ġ= Ġit . split (" Ġ| Ġ"). map Ġ{ Ġit . split (" Ġ"). map Ġ{ Ġit . toSet () Ġ} Ġ} ĊĊĠ Ġval Ġun parsed Digits Ġ= Ġbefore . to Mutable List () ĊĠ Ġval Ġparsed Digits Ġ= ĠArray < Set < Char >? >( 1 0 ) Ġ{ Ġnull Ġ} ĊĊĠ Ġfun Ġfind Digit ( index : ĠInt , Ġfn : Ġ( digit : ĠSet < Char >) Ġ-> ĠBoolean ) Ġ{ ĊĠĠĠ Ġval Ġi Ġ= Ġun parsed Digits . indexOf First ( fn ) ĊĠĠĠ Ġcheck ( i Ġ!= Ġ- 1 ) Ġ{ Ġ" No Ġmatches Ġfor Ġ# ${ index }" Ġ} ĊĠĠĠ Ġparsed Digits [ index ] Ġ= Ġun parsed Digits . elementAt ( i ) ĊĠĠĠ Ġun parsed Digits . remove At ( i ) ĊĠ Ġ} ĊĊĠ Ġ// ĠFirst Ġpass Ġ-- Ġobvious Ġdigits . ĊĠ Ġfind Digit ( 1 ) Ġ{ Ġit . size Ġ== Ġ 2 Ġ} ĊĠ Ġfind Digit ( 7 ) Ġ{ Ġit . size Ġ== Ġ 3 Ġ} ĊĠ Ġfind Digit ( 4 ) Ġ{ Ġit . size Ġ== Ġ 4 Ġ} ĊĠ Ġfind Digit ( 8 ) Ġ{ Ġit . size Ġ== Ġ 7 Ġ} ĊĠ Ġ// ĠIn fer Ġthe Ġremaining Ġdigits Ġbased Ġon Ġthe Ġsegments Ġin Ġprevious Ġdigits . ĊĠ Ġ// ĠOrdering Ġis Ġimportant Ġfor Ġthese ! ĊĠ Ġfind Digit ( 9 ) Ġ{ Ġit . size Ġ== Ġ 6 Ġ&& Ġit . contains All ( parsed Digits [ 4 ] !! ) Ġ} ĊĠ Ġfind Digit ( 0 ) Ġ{ Ġit . size Ġ== Ġ 6 Ġ&& Ġit . contains All ( parsed Digits [ 1 ] !! ) Ġ} ĊĠ Ġfind Digit ( 6 ) Ġ{ Ġit . size Ġ== Ġ 6 Ġ} Ġ// Ġthe Ġonly Ġremaining Ġ 6 - segment Ġdigit . ĊĠ Ġfind Digit ( 3 ) Ġ{ Ġit . size Ġ== Ġ 5 Ġ&& Ġit . contains All ( parsed Digits [ 1 ] !! ) Ġ} ĊĠ Ġfind Digit ( 2 ) Ġ{ Ġit . size Ġ== Ġ 5 Ġ&& Ġit . contains All ( invert Digit ( parsed Digits [ 9 ] !! )) Ġ} ĊĠ Ġfind Digit ( 5 ) Ġ{ Ġit . size Ġ== Ġ 5 Ġ} Ġ// Ġthe Ġonly Ġremaining Ġ 5 - segment Ġdigit . ĊĊĠ Ġvar Ġoutput Ġ= Ġ 0 ĊĠ Ġfor Ġ( digit Ġin Ġafter ) Ġ{ ĊĠĠĠ Ġval Ġi Ġ= Ġparsed Digits . indexOf ( digit ) ĊĠĠĠ Ġcheck ( i Ġ!= Ġ- 1 ) Ġ{ Ġ" No Ġmatches Ġfor Ġ${ digit . join ToString ("") } "} ĊĠĠĠ Ġoutput Ġ= Ġoutput Ġ* Ġ 1 0 Ġ+ Ġi ĊĠ Ġ} ĊĠ Ġtotal Ġ+= Ġoutput Ċ } Ċ Ċ println ( total ) Ċ