package Ġme . gr ison . a oc . y 2 0 1 7 Ċ Ċ import Ġme . gr ison . a oc . Day Ċ import Ġme . gr ison . a oc . all Ints Ċ import Ġme . gr ison . a oc . pair Ċ import Ġme . gr ison . a oc . sum Ċ Ċ class ĠDay 2 4 Ġ: ĠDay ( 2 4 , Ġ 2 0 1 7 ) Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġtitle () Ġ= Ġ" Elect rom ag netic ĠMo at " ĊĊĠĠĠ Ġval Ġelements Ġ= Ġinput List . map Ġ{ Ġit . all Ints (). pair () Ġ} ĊĊĠĠĠ Ġ// Ġ 1 6 5 6 ĊĠĠĠ Ġoverride Ġfun Ġpart One () Ġ= Ġbuild Bridge ( 0 , ĠlistOf (), Ġelements , Ġcompare By ( Bridge :: value )). value () ĊĊĠĠĠ Ġ// Ġ 1 6 4 2 ĊĠĠĠ Ġoverride Ġfun Ġpart Two () Ġ= ĊĠĠĠĠĠĠĠ Ġbuild Bridge ( 0 , ĠlistOf (), Ġelements , Ġcompare By ( Bridge :: size ) Ġthen Ġcompare By ( Bridge :: value )). value () ĊĊĠĠĠ Ġprivate Ġfun Ġload () Ġ= Ġinput List . map Ġ{ Ġit . all Ints (). pair () Ġ} Ċ } Ċ Ċ type alias ĠBridge Ġ= ĠList < Pair < Int , ĠInt >> Ċ Ċ fun ĠBridge . value () Ġ= Ġthis . sum By Ġ{ Ġit . sum () Ġ} Ċ fun Ġbuild Bridge ( x : ĠInt , Ġbridge : ĠBridge , Ġremaining : ĠBridge , Ġcomparator : ĠComparator < Bridge >): ĠBridge Ġ{ ĊĠĠĠ Ġreturn Ġremaining . filter Ġ{ Ġit . first Ġ== Ġx Ġ|| Ġit . second Ġ== Ġx Ġ} ĊĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġbuild Bridge ( if Ġ( it . first Ġ== Ġx ) Ġit . second Ġelse Ġit . first , Ġbridge Ġ+ Ġit , Ġremaining Ġ- Ġit , Ġcomparator ) Ġ} ĊĠĠĠĠĠĠĠ Ġ. max With OrNull ( comparator ) Ġ?: Ġbridge Ċ } ĊĊ