package Ġcommon Ċ Ċ import Ġkotlin . time . Experimental Time Ċ import Ġkotlin . time . measure Timed Value Ċ Ċ type alias ĠInput Ġ= ĠList < String > Ċ type alias ĠSolution Ġ= ĠInt Ċ type alias ĠSol ving Fun Ġ= Ġ( Input ) Ġ-> ĠSolution Ċ Ċ fun Ġsolve ( ĊĠĠĠ Ġday : ĠInt , ĊĠĠĠ Ġinput : ĠInput , ĊĠĠĠ Ġsolve Part 1 : ĠSol ving Fun , ĊĠĠĠ Ġsolve Part 2 : ĠSol ving Fun , Ċ ) Ġ{ ĊĠĠĠ Ġsolve Part ( day Ġ= Ġday , Ġpart Ġ= Ġ 1 , Ġinput Ġ= Ġinput , Ġsolve Ġ= Ġsolve Part 1 ) ĊĠĠĠ Ġsolve Part ( day Ġ= Ġday , Ġpart Ġ= Ġ 2 , Ġinput Ġ= Ġinput , Ġsolve Ġ= Ġsolve Part 2 ) Ċ } Ċ Ċ @ Opt In ( Experimental Time :: class ) Ċ private Ġfun Ġsolve Part ( day : ĠInt , Ġpart : ĠInt , Ġinput : ĠInput , Ġsolve : ĠSol ving Fun ) Ġ{ ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln ("\ n Start Ġsolving Ġpart Ġ$ part .") ĊĠĠĠĠĠĠĠ Ġval Ġsolution Ġ= Ġmeasure Timed Value Ġ{ Ġsolve ( input ) Ġ} ĊĠĠĠĠĠĠĠ Ġprintln ("\ n Sol ving Ġpart Ġ$ part Ġtook Ġ${ solution . duration }. ") ĊĠĠĠĠĠĠĠ Ġprintln (" The Ġsolution Ġfor Ġday Ġ$ day Ġpart Ġ$ part Ġis : Ġ${ solution . value }") ĊĠĠĠ Ġ} Ġcatch Ġ( ignored : ĠNotImplementedError ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln (" Skipped Ġpart Ġ$ part .") ĊĠĠĠ Ġ} Ċ }