class ĠIs bn Verifier Ġ{ ĊĠĠĠ Ġfun ĠisValid ( s : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdigits String Ġ= Ġs . filter (:: isValid Digit ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! isValid Structure ( digits String )) Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠ Ġval Ġds Ġ= Ġdigits String . map (:: digit ) ĊĠĠĠĠĠĠĠ Ġreturn Ġds . zip ( 1 0 Ġdown To Ġ 1 ). map (:: mul ). sum () Ġ% Ġ 1 1 Ġ== Ġ 0 ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun ĠisValid Structure ( digits String : ĠString ): ĠBoolean Ġ= ĊĠĠĠ ĠRegex ("^ [ 0 - 9 ]{ 9 }[ 0 - 9 X ]$ ") Ġmatches Ġdigits String Ċ Ċ private Ġfun ĠisValid Digit ( c : ĠChar ) Ġ= ĊĠĠĠ Ġc Ġ== Ġ' X ' Ġ|| Ġ( c Ġ>= Ġ' 0 ' Ġ&& Ġc Ġ<= Ġ' 9 ') Ċ Ċ private Ġfun Ġdigit ( c : ĠChar ): ĠInt Ġ= ĊĠĠĠ Ġif Ġ( c Ġ== Ġ' X ') ĊĠĠĠĠĠĠĠĠ 1 0 ĊĠĠĠ Ġelse ĊĠĠĠĠĠĠĠ Ġc . toString (). toInt () Ċ Ċ private Ġfun Ġmul ( pair : ĠPair < Int , ĠInt >): ĠInt Ġ= ĊĠĠĠ Ġpair . first Ġ* Ġpair . second Ċ