@ file : Jvm Name (" A OC 2 0 2 1 ") Ċ Ċ package Ġcom . gr appen maker . a oc 2 0 2 1 Ċ Ċ import Ġcom . gr appen maker . a oc 2 0 2 1 . Color . Codes .* Ċ import Ġjava . io . File Ċ import Ġjava . io . Serializable Ċ import Ġkotlin . math . max Ċ import Ġkotlin . system . measure Time Millis Ċ Ċ const Ġval ĠT REE Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠ Ġ* ĠĊĠĠĠĠĠĠĠ Ġ/ |\ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĊĠĠĠĠĠĠ Ġ/* | O \ ĊĠĠĠĠĠ Ġ/* / |\ *\ ĊĠĠĠĠ Ġ/ X / O | *\ X \ ĊĠĠĠ Ġ/* / X / |\ X \ *\ ĊĠĠ Ġ/ O /*/ X | *\ O \ X \ ĠĠĠĠĠĠĠĠĠĠĠĠĠ ĊĠ Ġ/* / O / X / |\ X \ O \ *\ Ċ Ġ/ X / O /*/ X | O \ X \ *\ O \ Ċ / O / X /*/ O / |\ X \ *\ O \ X \ ĊĠĠĠĠĠĠĠ Ġ| X | ĠĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġ| X | ĠĠĠĠ Ċ """ Ċ Ċ fun Ġmain ( args : ĠArray < String >) Ġ{ ĊĠĠĠ Ġ// ĠInform Ġuser ĊĠĠĠ Ġif Ġ( args . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln (" Usage : ĠA OC 2 0 2 1 Ġ< day > Ġ[ inputFile ]") ĊĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠGet Ġpuzzle Ġindex ĊĠĠĠ Ġval Ġindex Ġ= Ġargs . first (). run Catch ing Ġ{ Ġto Int () Ġ}. get OrNull () Ġ?: Ġrun Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln (" Invalid Ġday Ġnumber / index Ġ\" ${ args . first ()} \" ") ĊĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠFormat ting ĊĠĠĠ Ġval Ġcolors Ġ= ĠarrayOf ( GREEN , ĠRED , ĠWH ITE , ĠGREEN , ĠWH ITE ) ĊĊĠĠĠ Ġ// ĠGive Ġit Ġsome Ġcolor ĊĠĠĠ Ġval Ġcolor ize Ġ= Ġ{ Ġs : ĠString Ġ-> ĊĠĠĠĠĠĠĠ Ġs . lines (). join ToString ( System . line Separator ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . map Indexed Ġ{ Ġi , Ġc Ġ-> Ġ"${ colors [ i Ġ% Ġcolors . size ]} $ c $ RESET " Ġ}. join ToString ("") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠDefine Ġtext Ġcolor ĊĠĠĠ Ġval ĠtextColor Ġ= ĠB RIGHT _ BLUE ĊĊĠĠĠ Ġ// ĠPrint Ġheader ĊĠĠĠ Ġprintln ("${ textColor } Ad vent Ġof ĠCode Ġ 2 0 2 1 ") ĊĠĠĠ Ġprintln (" Running ĠKotlin Ġversion Ġ$ RED ${ Kotlin Version . CURRENT }$ RESET ") ĊĊĠĠĠ Ġ// ĠPrint Ġtree ĊĠĠĠ Ġprintln ( color ize ( TREE )) ĊĊĠĠĠ Ġ// ĠPrint Ġsome Ġ" Christ mas Ġlights " ĊĠĠĠ Ġval Ġlight Ġ= Ġ" o " ĊĠĠĠ Ġval Ġlight Count Ġ= Ġ 3 6 ĊĠĠĠ Ġval Ġlights Ġ= Ġcolor ize ( light . repeat ( light Count )). split ( light ). join ToString ("$ light Ġ") ĊĠĠĠ Ġprintln ( lights ) ĊĊĠĠĠ Ġ// ĠPrint Ġthe Ġdate ĊĠĠĠ Ġval Ġday Text Ġ= Ġ" Day Ġ$ index Ġ( https :// ad vent of code . com / 2 0 2 1 / day /$ index )" ĊĊĠĠĠ Ġ// ĠDon 't Ġmind Ġthe Ġformatting Ġmagic ĊĠĠĠ Ġprintln (" Ġ". repeat ( max ( 0 , Ġ( light Count Ġ- Ġday Text . length Ġ/ Ġ 2 ) Ġ- Ġ 1 )) Ġ+ ĠtextColor Ġ+ Ġday Text ) ĊĠĠĠ Ġprintln ( lights ) ĊĊĠĠĠ Ġ// ĠActually Ġrun Ġthe Ġsolution ĊĠĠĠ Ġval Ġsolution Ġ= ĠSolution ( index , Ġoverride File Ġ= Ġargs . get OrNull ( 1 )?. let Ġ{ ĠFile ( it ) Ġ}) ĊĠĠĠ Ġmeasure Time Millis Result Ġ{ Ġsolution . run () Ġ}. also Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġ( time , Ġresult ) Ġ= Ġit ĊĠĠĠĠĠĠĠ Ġval Ġ( part One , Ġpart Two ) Ġ= Ġresult ĊĊĠĠĠĠĠĠĠ Ġprintln () ĊĠĠĠĠĠĠĠ Ġprintln ("${ GREEN } Part Ġone : Ġ${ BR IGHT _ BLUE }$ part One ") ĊĠĠĠĠĠĠĠ Ġprintln ("${ GREEN } Part Ġtwo : Ġ${ BR IGHT _ BLUE }$ part Two ") ĊĊĠĠĠĠĠĠĠ Ġprintln () ĊĠĠĠĠĠĠĠ Ġprintln ( lights ) ĊĠĠĠĠĠĠĠ Ġprintln () ĊĠĠĠĠĠĠĠ Ġprintln ("${ textColor } T ook Ġ$ RED ${ time } ms $ RESET Ġ${ textColor } to Ġrun Ġsolution .") ĊĠĠĠ Ġ} Ċ } Ċ Ċ type alias ĠAnswer Ġ= ĠPair < Serializable , ĠSerializable > Ċ Ċ // ĠUtil Ġto Ġget Ġinput Ġand Ġrun Ġthe Ġsolution Ċ class ĠSolution ( private Ġval Ġday : ĠInt , Ġprivate Ġval Ġoverride File : ĠFile ? Ġ= Ġnull ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġinput File Ġget () Ġ= Ġoverride File Ġ?: ĠFile (" inputs ", Ġ" day -${ day . toString (). pad Start ( 2 , Ġ' 0 ') }. txt ") ĊĠĠĠ Ġval Ġinput Lines Ġ= Ġinput File . read Lines () ĊĠĠĠ Ġval Ġinput Ġget () Ġ= Ġinput Lines . join ToString ("\ n ") ĊĊĠĠĠ Ġfun Ġrun (): ĠAnswer Ġ= Ġwhen Ġ( day ) Ġ{ ĊĠĠĠĠĠĠĠĠ 1 Ġ-> Ġsolve Day 1 () ĊĠĠĠĠĠĠĠĠ 2 Ġ-> Ġsolve Day 2 () ĊĠĠĠĠĠĠĠĠ 3 Ġ-> Ġsolve Day 3 () ĊĠĠĠĠĠĠĠĠ 4 Ġ-> Ġsolve Day 4 () ĊĠĠĠĠĠĠĠĠ 5 Ġ-> Ġsolve Day 5 () ĊĠĠĠĠĠĠĠĠ 6 Ġ-> Ġsolve Day 6 () ĊĠĠĠĠĠĠĠĠ 7 Ġ-> Ġsolve Day 7 () ĊĠĠĠĠĠĠĠĠ 8 Ġ-> Ġsolve Day 8 () ĊĠĠĠĠĠĠĠĠ 9 Ġ-> Ġsolve Day 9 () ĊĠĠĠĠĠĠĠĠ 1 0 Ġ-> Ġsolve Day 1 0 () ĊĠĠĠĠĠĠĠĠ 1 1 Ġ-> Ġsolve Day 1 1 () ĊĠĠĠĠĠĠĠĠ 1 2 Ġ-> Ġsolve Day 1 2 () ĊĠĠĠĠĠĠĠĠ 1 3 Ġ-> Ġsolve Day 1 3 () ĊĠĠĠĠĠĠĠĠ 1 4 Ġ-> Ġsolve Day 1 4 () ĊĠĠĠĠĠĠĠĠ 1 5 Ġ-> Ġsolve Day 1 5 () ĊĠĠĠĠĠĠĠĠ 1 6 Ġ-> Ġsolve Day 1 6 () ĊĠĠĠĠĠĠĠĠ 1 7 Ġ-> Ġsolve Day 1 7 () ĊĠĠĠĠĠĠĠĠ 1 8 Ġ-> Ġsolve Day 1 8 () ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġerror (" Couldn 't Ġfind Ġsolution Ġfor Ġday Ġ$ day ") ĊĠĠĠ Ġ} Ċ } Ċ Ċ inline Ġfun Ġ< T > Ġmeasure Time Millis Result ( block : Ġ() Ġ-> ĠT ): ĠPair < Long , ĠT > Ġ{ ĊĠĠĠ Ġvar Ġresult : ĠT ĊĠĠĠ Ġval Ġtime Ġ= Ġmeasure Time Millis Ġ{ Ġresult Ġ= Ġblock () Ġ} ĊĠĠĠ Ġreturn Ġtime Ġto Ġresult Ċ } Ċ Ċ // ĠUtility Ġfor Ġcolor , Ġidea Ġfrom Ġu / micro hod _ 9 6 Ċ object ĠColor Ġ{ ĊĠĠĠ Ġconst Ġval ĠESC APE Ġ= Ġ"\ u 0 0 1 B " ĊĊĠĠĠ Ġenum Ġclass ĠCode s ( val Ġcode : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠNot Ġex haustive , ĠI Ġdon 't Ġneed Ġmore ĊĠĠĠĠĠĠĠ ĠRESET ( 0 ), ĊĠĠĠĠĠĠĠ ĠRED ( 3 1 ), ĊĠĠĠĠĠĠĠ ĠGREEN ( 3 2 ), ĊĠĠĠĠĠĠĠ ĠWH ITE ( 3 7 ), ĊĠĠĠĠĠĠĠ ĠB RIGHT _ BLUE ( 9 4 ); ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠtoString () Ġ= Ġ"$ ESCAPE [ ${ code } m " ĊĠĠĠ Ġ} Ċ }