package Ġcom . x ime des . a oc . day 0 1 Ċ Ċ import Ġcom . jav amon itor . tools . Stop watch Ċ import Ġcom . x ime des . a oc . util . getClass path File Ċ Ċ fun Ġmain () Ġ{ ĊĠĠĠ Ġval Ġsw Ġ= ĠStop watch (" Day Ġ 1 ", Ġ" load Ġinput ") ĊĠĠĠ Ġval Ġints Ġ= Ġmutable Set Of < Int >() ĊĠĠĠ ĠgetClass path File ("/ input - 1 . txt "). forEach Line Ġ{ ĊĠĠĠĠĠĠĠ Ġints . add ( it . toInt ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsw . about To (" find Ġpair ") ĊĠĠĠ Ġval Ġ( x , Ġy ) Ġ= Ġfind 2 0 2 0 Pair ( ints ) ĊĠĠĠ Ġprintln (" Day Ġ 0 1 Ġpart Ġ 1 Ġsolution : Ġ${ x Ġ* Ġy }") ĊĊĠĠĠ Ġsw . about To (" find Ġtrip let Ġ( foreach Ġversion )") ĊĠĠĠ Ġval Ġ( a , Ġb , Ġc ) Ġ= Ġfind Trip let ( ints ) ĊĠĠĠ Ġprintln (" Day Ġ 0 2 Ġpart Ġ 2 Ġsolution : Ġ${ a Ġ* Ġb Ġ* Ġc }") ĊĊĠĠĠ Ġsw . about To (" find Ġtrip let Ġ( indexed Ġversion )") ĊĠĠĠ Ġval Ġ( d , Ġe , Ġf ) Ġ= ĠLo ops ( ints ). find () ĊĠĠĠ Ġprintln (" Day Ġ 0 2 Ġpart Ġ 2 Ġsolution : Ġ${ d Ġ* Ġe Ġ* Ġf }") ĊĊĠĠĠ Ġprintln ( sw . stop (). getMessage ()) Ċ } Ċ Ċ fun Ġfind 2 0 2 0 Pair ( numbers : ĠSet < Int >): ĠPair < Int , ĠInt > Ġ{ ĊĠĠĠ Ġnumbers . forEach Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( numbers . contains ( 2 0 2 0 Ġ- Ġit )) Ġreturn ĠPair ( it , Ġ 2 0 2 0 Ġ- Ġit ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġerror (" incorrect Ġpuzzle Ġinput ") Ċ } Ċ Ċ fun Ġfind Trip let ( numbers : ĠSet < Int >): ĠTrip le < Int , ĠInt , ĠInt > Ġ{ ĊĠĠĠ Ġval Ġsorted Ġ= Ġnumbers . sorted (). filter Ġ{ Ġit Ġ< Ġ 2 0 2 0 Ġ} ĊĠĠĠ Ġsorted . forEach Ġ{ Ġx Ġ-> ĊĠĠĠĠĠĠĠ Ġsorted . filter Ġ{ Ġ( it Ġ!= Ġx ) Ġ&& Ġ( it Ġ+ Ġx ) Ġ< Ġ 2 0 2 0 Ġ}. forEach Ġ{ Ġy Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsorted . find Ġ{ Ġz Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( z Ġ!= Ġx ) Ġ&& Ġ( z Ġ!= Ġy ) Ġ&& Ġ( x Ġ+ Ġy Ġ+ Ġz Ġ== Ġ 2 0 2 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ?. also Ġ{ Ġz Ġ-> Ġreturn ĠTrip le ( x , Ġy , Ġz ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġerror (" incorrect Ġpuzzle Ġinput ") Ċ } Ċ Ċ class ĠLo ops ( numbers : ĠSet < Int >) Ġ{ ĊĠĠĠ Ġval Ġsorted Ġ= Ġnumbers . sorted (). filter Ġ{ Ġit Ġ< Ġ 2 0 2 0 Ġ} ĊĠĠĠ Ġfun Ġfind (): Triple < Int , Int , Int > Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( x Ġin Ġ 0 .. sorted . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( y Ġin Ġ( x Ġ+ Ġ 1 ) .. sorted . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( z Ġin Ġ( y Ġ+ Ġ 1 ) .. sorted . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( sorted [ x ] Ġ+ Ġsorted [ y ] Ġ+ Ġsorted [ z ] Ġ== Ġ 2 0 2 0 ) Ġreturn ĠTrip le ( sorted [ x ], Ġsorted [ y ], Ġsorted [ z ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġerror (" incorrect Ġpuzzle Ġinput ") ĊĠĠĠ Ġ} Ċ }