package Ġcom . s 1 3 g . a oc . a oc 2 0 2 0 Ċ Ċ import Ġcom . s 1 3 g . a oc . Result Ċ import Ġcom . s 1 3 g . a oc . Solver Ċ Ċ /** Ċ Ġ* Ġ--- ĠDay Ġ 2 5 : ĠCombo ĠBreak er Ġ--- Ċ Ġ* Ġhttps :// ad vent of code . com / 2 0 2 0 / day / 2 5 Ċ Ġ*/ Ċ class ĠDay 2 5 Ġ: ĠSolver Ġ{ ĊĠ Ġoverride Ġfun Ġsolve ( lines : ĠList < String >): ĠResult Ġ{ ĊĠĠĠ Ġval Ġinput Ġ= Ġlines . map Ġ{ Ġit . to Long () Ġ}. map Ġ{ ĠPair ( it , Ġtransform ( 7 , Ġit )) Ġ} ĊĠĠĠ Ġval Ġenc Key 1 Ġ= Ġloop It ( input [ 0 ]. first , Ġinput [ 1 ]. second ) ĊĠĠĠ Ġval Ġenc Key 2 Ġ= Ġloop It ( input [ 1 ]. first , Ġinput [ 0 ]. second ) ĊĠĠĠ Ġassert ( enc Key 1 Ġ== Ġenc Key 2 ) ĊĠĠĠ Ġreturn ĠResult ("$ enc Key 1 ", Ġ"") ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġloop It ( subject No : ĠLong , Ġtimes : ĠLong ): ĠLong Ġ{ ĊĠĠĠ Ġvar Ġvalue Ġ= Ġ 1 L ĊĠĠĠ Ġvar Ġloop Ġ= Ġ 0 L ĊĠĠĠ Ġfor Ġ( i Ġin Ġ 1 .. times ) Ġ{ ĊĠĠĠĠĠ Ġvalue Ġ= Ġ( value Ġ* Ġsubject No ) Ġ% Ġ 2 0 2 0 1 2 2 7 L ĊĠĠĠĠĠ Ġloop ++ ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġvalue ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġtransform ( subject No : ĠLong , Ġkey : ĠLong ): ĠLong Ġ{ ĊĠĠĠ Ġvar Ġvalue Ġ= Ġ 1 L ĊĠĠĠ Ġvar Ġloop Ġ= Ġ 0 L ĊĠĠĠ Ġwhile Ġ( value Ġ!= Ġkey ) Ġ{ ĊĠĠĠĠĠ Ġvalue Ġ= Ġ( value Ġ* Ġsubject No ) Ġ% Ġ 2 0 2 0 1 2 2 7 L ĊĠĠĠĠĠ Ġloop ++ ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġloop ĊĠ Ġ} Ċ }