From c6ca510a5ccf232cbf0677a77453addb8d5d70be Mon Sep 17 00:00:00 2001 From: Steven Le Rouzic Date: Mon, 23 Dec 2024 23:33:31 +0100 Subject: Day 23 --- day23/data.txt | 3380 +++++++++++++++++++++++++++++++++++++++++++++++++++++ day23/example.txt | 32 + day23/go.mod | 3 + day23/main.go | 144 +++ go.work | 1 + 5 files changed, 3560 insertions(+) create mode 100644 day23/data.txt create mode 100644 day23/example.txt create mode 100644 day23/go.mod create mode 100644 day23/main.go diff --git a/day23/data.txt b/day23/data.txt new file mode 100644 index 0000000..10efad9 --- /dev/null +++ b/day23/data.txt @@ -0,0 +1,3380 @@ +tb-pd +gf-oz +er-od +fj-jc +fp-zt +cf-xp +uq-kr +vj-us +ks-xq +dv-hn +zt-jd +oc-tn +te-hg +yz-ep +vj-jd +si-qc +av-va +hl-xg +ef-xq +tj-tl +cx-rs +fm-ui +dp-yr +io-bw +no-wt +vm-ny +aq-gl +tg-vz +ac-kt +hu-cf +al-ur +wb-wm +nr-mk +db-wz +xg-wj +al-zh +xs-ft +ud-fh +hd-my +jw-mf +ug-jb +vp-za +uo-cg +dk-xl +cd-kn +ho-gv +ic-ql +er-ke +ds-sg +ec-xt +fw-hp +wb-cw +zs-bk +pd-ow +xr-tg +mc-yg +fh-sy +dg-op +vm-bw +xs-ev +ib-hi +yh-an +xe-qr +pa-fj +tj-vt +ct-zz +xs-nr +rf-gi +xg-wx +br-ce +ym-rq +uo-xm +pa-qx +qo-hr +uo-ym +sj-vu +al-re +ba-og +ik-cb +ay-rp +iz-df +hc-jf +uc-dy +lc-se +ah-nh +lu-qq +au-ni +ft-lh +yn-ax +vh-ue +uy-gj +nf-zh +bb-mz +hn-fi +mx-sc +bp-xy +mv-ld +dp-zf +er-fe +kk-ww +ei-ao +if-kh +al-tu +xf-mq +ha-ts +jn-cl +da-bj +sr-kl +je-ah +cm-qk +um-wa +fj-qx +do-zj +kc-ob +ef-bt +cx-vb +en-xm +as-ry +tb-vb +vg-ms +xh-tr +dc-gi +ib-cl +pv-kn +zx-pj +hr-kg +wj-rr +vx-wt +ho-jr +og-an +qc-qv +vs-pg +fg-rf +bt-lt +je-ig +bg-dr +mc-ek +mh-ze +vz-an +ki-wz +go-hc +ij-kh +jr-gv +kh-ry +qw-nw +re-cm +qg-rx +qg-do +uk-mk +ix-rm +ss-bi +oz-ne +jh-xq +io-sz +uj-ln +xc-kr +jk-ok +gs-gy +wp-go +ln-ar +jp-br +qy-og +lt-sd +qq-wb +dt-ac +kj-kh +mh-te +mk-ze +yr-ru +hp-bo +fo-py +ru-dp +uj-ux +vv-aj +rt-ww +gt-oo +hy-ll +ip-rr +pw-bo +la-bn +dc-yk +mv-py +ws-hc +ww-zp +bt-ei +nz-dr +lc-uo +qr-yi +wv-oz +cx-qq +hi-rw +iy-qr +lw-qb +ri-mf +za-rn +sz-ny +kx-uv +bo-ci +xe-hy +uz-ap +nz-tt +fu-cy +wz-ud +by-yz +yh-fb +vn-rt +zz-rn +lo-dr +qq-vb +ku-jy +sh-dz +rr-fr +rm-mx +mj-si +sy-ud +cn-xm +te-wo +la-wu +ik-fq +fo-bk +hg-fu +ce-ac +so-kc +cl-si +ag-vs +ot-xo +kj-iv +fi-uu +pd-vb +rc-jf +ke-od +bj-vg +qi-gm +zk-hb +ym-jy +lt-zm +vj-ec +nr-ci +gl-rx +ct-za +ks-gs +ao-vw +kh-ro +sb-mx +oo-ed +pz-mh +hc-mc +ay-xg +dc-hk +hh-vj +dh-xr +jz-id +ah-dg +wf-bg +wx-hx +mb-gj +cr-ry +jy-qb +fr-kp +qx-hd +ia-qb +pz-hg +mf-hb +ox-pc +na-pj +ba-dh +py-hq +sv-es +vc-uf +kv-ej +jp-dt +lm-cv +kj-cr +mo-ox +rd-fu +cb-hl +qq-tb +vz-ba +gi-zf +ap-sr +dk-qm +ux-yi +su-nx +my-qs +rh-wj +mp-il +wu-uo +aq-vc +wf-lo +iz-ei +ko-mi +tr-nx +pn-gt +kc-jh +ru-nn +ks-ob +hg-zj +vt-vf +jp-mz +hk-zx +bo-qo +ln-uu +gd-iv +mx-dp +gt-fe +zp-oa +ro-ni +xy-mb +rf-dp +cm-sc +lw-vu +wa-ew +qk-cs +vp-no +ar-da +rc-fp +uc-fs +qm-yi +xk-ey +bq-zj +sf-zl +ur-sc +sf-yg +ql-so +wj-wx +pw-pq +qr-ll +bb-ss +na-ep +sd-zk +if-ro +sn-oz +ao-oj +hr-dx +xl-gf +zx-yz +xo-mv +hy-wq +pw-hp +nz-mo +sy-wz +fp-nm +yz-yw +ap-dw +tb-mr +id-ys +xf-af +vi-zw +bp-wi +fj-we +li-pb +hh-xv +gm-cx +eg-er +um-eh +tc-jz +qm-ll +ok-ny +wp-sf +gz-ni +ix-va +lu-wm +wn-vf +cc-ej +hq-ot +az-cg +ay-hx +sd-hb +fm-vd +il-xm +tu-sk +az-ym +es-zl +si-ai +ze-hg +qb-kt +ui-lk +le-kp +es-wp +oq-kz +bp-sw +gx-fo +ig-dg +nf-sc +vf-ti +td-ko +ab-tt +vb-lu +nu-ue +it-pg +fb-wa +lq-uj +xk-do +de-sf +uu-pg +vx-ng +zo-ll +wq-qr +ru-fg +pb-ty +yq-cp +wa-eq +zt-bh +ft-qe +lk-fm +on-gv +hk-dx +gj-ki +ra-ue +ib-rk +ks-ef +ms-kb +nx-vq +bd-bi +we-um +oa-xh +tj-wn +nf-qk +uq-wq +fx-ej +tb-rs +zb-xm +yp-vo +qy-ns +ag-uh +vm-qt +fn-lv +xc-ll +hz-tp +eq-eh +yp-ub +vx-fn +al-cs +mk-pz +jl-hv +if-kj +mr-md +es-xj +cs-re +cn-wu +ba-fa +hl-wx +ak-qf +tl-tc +bg-tt +fu-uk +jg-wv +py-xo +hb-ha +qj-br +fa-dn +gc-oe +qo-hp +hh-fs +nk-bx +mp-if +jq-dw +cj-gt +lu-gm +jr-lm +gs-ly +hl-hx +qr-hy +xt-ey +pb-ok +pc-ys +gi-mg +dh-tg +db-ej +kt-dy +ri-hb +sn-ne +ac-la +ul-qx +kp-fb +uj-ar +wo-uk +ug-bi +xr-gv +ld-va +mh-rd +hi-mr +rs-vb +cr-gz +mj-qh +nf-ur +ww-tr +jn-qh +db-ow +qs-hd +kd-yk +mf-ve +wz-xy +ki-mb +mh-hg +ka-ch +xq-jt +hx-ik +nu-gw +ak-db +tp-wu +gv-lm +vn-ww +nn-rf +xb-qd +eu-ds +db-yp +kx-on +vv-vx +gr-ws +nu-cj +kv-dj +jr-sg +sq-lz +uu-hn +bi-xb +gd-as +bh-og +ij-ec +cm-cs +jz-hv +ji-jr +il-tp +io-ti +gd-kj +za-fn +rc-zl +jw-ve +gx-ai +co-yc +ll-uq +rc-xj +dw-ax +hc-sf +vv-vp +xo-lv +mi-ja +yp-ty +ny-fn +vt-ly +ix-ld +il-en +kd-ai +ah-xf +ip-le +ng-aj +jz-eg +yg-jf +uq-wd +cj-ke +yc-uh +fg-zf +ct-wt +vv-za +au-as +ik-xw +ns-an +az-hz +mh-fu +ku-zj +no-zz +ly-sm +lm-ji +lr-hu +it-ev +dh-ns +lk-qx +cd-oz +fs-nm +af-mq +yf-lr +fm-hd +rs-cw +no-gn +xy-wi +zb-df +ia-lw +wm-rs +pd-lu +kk-rt +ow-lb +fe-ef +vk-mx +fl-ic +zs-dx +kx-gv +oz-jg +eg-od +ak-ub +ew-wc +uq-qr +pp-hq +dw-vi +aq-ja +pd-gm +jm-qf +ja-rx +sy-gj +yf-qv +hs-fw +uo-tp +sw-xy +my-qx +bt-ic +yz-dj +zo-hy +qq-cw +qc-zc +lk-ga +ds-gv +xv-fs +es-go +zm-kc +as-mp +oc-rl +rd-cy +kg-ci +ih-tl +cd-im +wj-hx +bx-ch +rc-ws +ty-db +dj-zx +re-ur +ga-ht +ap-ct +qe-xs +qc-kv +yt-td +sr-zw +gr-rc +pq-bo +de-mb +lm-uv +bt-xq +kl-yq +fh-ki +lb-ub +ye-ri +jr-cv +yb-zk +gz-ro +xe-fk +rs-qi +ww-jt +nl-ts +rh-hx +np-wm +nu-gt +kk-tr +fj-hd +as-kj +pd-qq +wq-fk +xs-hp +qc-zx +tu-nf +nl-ve +ih-gy +ft-qo +kd-zs +lk-rv +uk-cy +lr-np +nk-ka +lz-qd +uz-os +vs-nz +nu-od +pj-ep +ye-nl +ct-fn +hl-xw +rm-vk +gv-vr +pa-ui +dp-gi +cg-cn +kg-qe +us-xv +jc-qx +jp-nk +wc-xe +xl-im +qk-rj +xk-jc +ua-ys +kd-hk +va-vj +dt-dy +kc-bt +cn-en +ku-qg +uo-cn +cp-dw +ki-ux +rj-te +cb-hx +lw-do +sq-ug +ga-bj +ul-hb +mq-dz +zh-tu +dz-et +fj-lk +ms-ln +mf-yb +pp-oc +ce-bx +ev-ag +im-pv +ti-ny +ys-ed +on-eu +zw-fc +nr-pw +bd-lc +wi-ry +gm-wb +jm-ub +au-kh +hu-yf +ny-jk +fl-so +zk-ha +id-ei +fi-uh +vz-ns +jk-mg +gn-tu +zn-zw +wp-xj +km-kz +qm-fk +lo-ys +mj-mr +kx-ji +rh-cb +sj-xk +ax-sr +lh-ci +wd-wf +jb-sq +um-ew +jp-bx +nk-uc +gt-eg +fn-vp +rv-jc +tp-xm +pa-hd +ru-rf +ke-ue +oz-xl +tu-tn +hg-uk +im-wv +yb-sd +zt-vj +ki-de +jg-ne +xs-lh +gx-dx +hb-ye +ct-ng +sb-nn +zf-nn +pq-cx +oa-vn +jy-do +nw-ii +ga-kb +mi-vh +ih-vt +sg-wq +xj-go +ht-kb +tt-lo +rk-jn +tg-nn +ev-vs +jm-ej +rn-vx +vs-uh +iv-as +gn-re +nu-ra +zp-kn +yw-ep +kn-dk +ue-eg +ba-xc +fb-ip +na-kv +ji-cv +bd-sq +ub-qf +ze-ju +yt-gl +ix-oc +pq-lh +as-ni +uv-gv +cy-kd +do-jo +ni-mp +fl-ob +wq-iy +si-rk +ip-yg +rn-wt +xf-gc +io-pb +hs-mj +kv-yw +sk-tn +vk-dp +ap-yn +ow-fx +ay-hl +yk-dx +ze-te +xt-ij +im-dk +gc-fl +jm-os +uy-de +fh-uy +zo-yi +nl-yb +yg-go +cg-hz +ds-on +zs-uz +ox-wd +fw-mr +vz-zr +dc-bk +jb-bi +me-tc +qh-rw +yr-sb +rq-wb +lu-rs +mz-ss +wc-wa +uf-yt +ei-tv +qy-ba +mt-kz +zq-ik +ti-li +ne-pv +ia-jy +hd-ui +sd-ve +ek-fi +la-il +su-zp +vz-xr +xe-wq +yf-mt +ku-vu +tr-rt +au-kj +lq-ea +oc-va +lh-nr +kn-wv +vi-jq +bp-ki +pz-te +li-qw +ux-vg +jt-oa +ic-jh +zb-tv +yi-xe +fx-ak +tx-kv +la-en +xk-jo +jb-lc +ww-su +qf-vo +ji-eu +av-mv +de-gj +kb-vg +fc-dw +sm-wn +df-jl +cd-pv +fb-zc +vq-sh +rh-rp +jb-ss +rm-nn +hl-ug +vw-oj +eg-ke +ni-gd +uf-rx +ng-wt +ra-er +yh-wc +mc-es +mj-rk +nn-mx +my-rv +xy-fh +pr-ix +en-ym +jz-oj +yc-uu +cd-sv +zz-wt +mi-yt +hr-pw +dn-zr +hc-es +wx-qr +vh-td +xl-cd +fj-fm +sj-ia +gd-ro +yq-zw +ki-xy +ne-cd +ju-pz +mb-rv +ij-xv +wx-ik +pj-kv +iz-oz +ok-li +cp-sr +ud-wi +ys-mo +va-py +oq-mt +so-ef +xr-ba +sr-ze +gd-gz +ak-lb +pn-vr +ay-xr +rf-sb +go-jf +qg-bq +ii-qw +ox-nz +gz-mp +ip-fr +en-bn +gl-mi +ko-ja +al-sc +vp-wt +fr-wa +cw-tb +iy-hy +ql-ro +nh-op +gi-sb +ac-qj +qb-jo +ye-sd +ks-ic +wz-gj +sm-tc +tl-gy +mt-nw +ih-vf +yk-ai +fe-cj +dy-br +yg-ws +od-fe +jo-lw +ys-wd +su-qr +fx-ub +uc-ka +su-xh +mt-xp +wo-hg +ax-ap +bj-lq +zn-vi +im-jg +je-dg +lq-ga +tg-fa +si-fw +rx-vc +tx-zx +hi-fq +qg-ia +qs-lk +qg-jo +pv-xl +br-nk +ww-sh +sw-gj +wi-sy +ko-gl +hk-xn +uy-sw +zr-ns +yr-rf +yb-ts +sn-cd +ln-ux +ij-hh +ah-ig +rn-vv +zf-vk +dn-bh +je-gc +ii-mt +vn-kk +kb-uj +uh-ek +bk-ct +fp-fs +zl-fk +xl-wv +vu-do +zb-hv +wp-jf +ek-vs +rn-no +zj-sj +wu-en +oc-ot +ei-ma +pv-sn +gz-ry +li-io +cl-fw +gm-mv +bi-mz +zn-fc +wp-rc +wv-pv +ui-jc +hz-bn +kl-yn +dg-nh +na-yw +wn-ly +ra-rt +zh-qk +bk-yk +ih-vn +vr-cv +cm-al +zf-rm +yb-ve +al-tn +ht-ln +ft-hr +eg-ra +md-rk +gy-sm +ia-xk +kv-qv +za-no +vu-jy +hy-kr +nr-qe +lq-ht +og-fa +kk-sh +cw-rq +vc-gg +cw-lu +dj-ep +da-ms +yf-km +fg-sb +lo-ox +tb-qi +mf-ul +bn-uo +pp-np +cu-li +mo-dr +ts-ri +il-cn +nr-qo +fr-um +fg-gi +fe-ue +fi-it +ef-kc +cu-kg +hv-ma +zt-xv +pc-bg +bd-bb +ai-xn +oj-ea +ld-ot +zm-xq +jl-ei +hz-pc +ga-ea +la-xm +bk-os +jk-bw +sg-lm +lz-mz +rm-mg +ic-so +kp-yh +ek-co +xo-pr +de-wi +ni-ry +pn-gw +vn-jt +hv-vw +ev-co +ue-gt +bw-pb +tv-df +zq-rh +xb-se +ht-ar +uc-br +ra-pn +qt-sf +mk-rj +ly-at +bp-ud +oc-xo +vr-kx +hd-jc +kp-um +cg-ym +kl-ap +jf-mc +ii-cf +ma-df +kg-qo +an-zr +yf-nw +ah-et +mz-sq +os-yk +xy-xg +zf-mx +gr-hc +ly-tl +io-ok +xv-fp +il-hz +tc-at +gw-oe +vv-ct +vq-tr +qm-uq +dn-xr +au-ha +nm-us +rd-wf +vg-lq +md-hi +wo-ju +lv-vv +hv-ig +qi-wm +iz-zb +cr-ro +wf-pc +mv-ot +hs-hi +qv-bo +zl-yg +kc-ks +sr-vi +hb-ve +tx-qv +np-qw +cy-vm +se-qd +gn-sc +ww-oa +rp-dt +go-fm +rk-cl +ja-yt +ho-lm +dh-dn +lt-fl +yp-kl +lr-yp +zz-vv +jl-id +va-rl +pq-ci +fx-jn +by-yw +wb-rs +cr-au +ry-kj +yf-ii +xf-je +mk-ju +xt-nm +ak-ow +vi-kl +qd-ss +ju-hg +bq-do +ql-jh +iv-if +ax-jq +so-uf +bq-jy +vk-fg +hy-yi +lu-gx +vv-pd +ay-wx +cp-zw +on-cv +wt-xs +ib-qh +ow-ej +fc-pw +wd-dr +iy-xc +mo-jo +id-ma +ui-en +cx-pd +rm-gi +dj-by +ch-ac +eq-sq +qg-jy +zt-fs +bo-nr +oe-nh +pq-kg +hh-ey +bg-ox +pa-my +vw-jl +db-ub +ja-td +tg-qy +cr-as +ni-kj +en-az +as-kh +km-qw +ux-bj +hq-av +md-qh +cm-zh +lb-cc +ok-fv +au-if +ow-yp +ss-bd +op-dn +nl-ha +lw-sj +we-jc +bj-nm +sq-qd +dc-os +pp-mv +ba-zr +vs-co +rd-mk +qs-vd +ok-vm +sc-tn +li-jk +vg-ea +sw-sy +qh-hs +fx-lb +hr-xs +rq-vb +na-qc +uf-aq +cv-uv +mz-bd +zx-qv +hr-hp +tg-an +lc-bb +sm-vt +mj-fw +jm-ow +fx-vo +hz-wn +eh-yh +ot-av +qw-mt +sk-al +le-wc +dt-qj +wa-rr +ne-ho +hq-qh +op-et +er-oo +nx-sh +sd-mf +sb-zf +jt-rt +si-ib +ka-ac +qf-ej +by-zx +xw-fq +an-bh +ke-fe +ly-tc +pa-fm +vs-it +df-hv +sv-ne +fg-dp +fe-oo +jm-db +ng-no +ah-jg +wv-sn +kr-qm +dy-bx +oo-eg +zo-xc +kd-dc +da-ea +yr-gi +rt-zp +vc-ja +lv-aj +ab-rx +ss-sq +rl-xo +pp-xo +sw-wi +gt-gw +we-fm +ly-ih +fc-jq +wz-de +bp-gj +tt-ed +ew-eq +mv-hq +tu-qk +pa-rv +ld-oc +ar-ux +xq-ob +mb-wz +va-ot +fb-eq +yz-tx +uo-la +nf-tn +kr-ft +su-rt +ht-vg +vv-ng +qj-ce +jl-ma +zq-wj +ul-zk +bd-qd +op-xf +mj-jn +yh-ew +vv-wt +vu-ve +kc-lt +qs-we +kr-xe +wp-hc +nm-vj +sz-cu +ag-uu +oa-nx +zh-re +kn-xl +xs-pw +sh-jt +tx-jq +gm-cw +yq-sr +ye-ts +yr-rm +uz-xn +ag-hn +wb-pd +qf-vk +tj-vf +ag-fi +er-gt +fe-ra +qt-bw +vr-lq +gf-ne +hq-oc +nu-er +fn-rn +aq-ab +ha-mf +zr-tg +td-ab +bp-le +qk-tn +wc-eq +ap-yq +ek-it +ib-rw +kv-zx +uj-ii +ro-au +xk-vu +tj-gy +do-if +xo-ld +xt-fs +qv-dj +vq-su +ig-gc +tt-ua +dt-kt +cy-rj +ix-pp +bd-se +rp-hl +yz-nf +fj-xb +jz-ma +mv-ix +od-pn +ei-vw +rn-aj +oq-lr +ws-es +ve-ri +az-tp +gj-ud +rh-xg +ll-fk +gm-vb +fq-xg +ok-cu +ap-zn +ke-ra +hg-rj +vd-my +bo-qe +kg-vo +lw-qg +qe-hp +xp-oq +dj-tx +kp-ji +af-gc +yf-oq +rf-mg +ma-yc +ig-af +sg-on +ec-fs +dz-je +ay-zq +ma-ao +nz-bg +rq-pj +lu-qi +ud-mb +ar-ga +mo-lo +gm-tb +ss-lc +ob-zm +yw-tx +jk-cu +fb-rr +zm-ef +vq-xh +na-by +gs-we +vd-fj +fv-vm +sy-bp +fq-cb +sd-ws +mi-uf +zc-ep +vw-zb +hl-fq +qs-ui +uc-qj +hv-ei +zt-ey +py-av +es-gr +qm-xe +gm-rs +ti-jk +no-lv +df-hy +cj-oo +dg-oe +nm-jd +ew-ip +ab-yt +os-zs +mg-lh +fk-xt +me-gy +ti-fv +ft-pq +gy-xb +fv-cu +cs-ur +kh-iv +eq-ip +xw-hx +vs-dv +nh-et +ly-gy +rp-wx +fo-ai +wz-wi +vq-zp +lc-sq +je-mq +sh-rt +ga-da +jw-hb +ow-cc +ig-nh +vw-ma +mx-qh +yh-eq +rr-eq +uq-fk +iy-zo +ll-xe +xk-jy +wa-nh +zr-qy +ng-lv +ve-zk +la-ym +jf-xj +ev-uh +gl-vc +ql-bt +bn-tp +zj-lw +os-kd +wb-cx +dp-mg +gl-uf +on-vw +bb-lz +rn-lb +pj-yw +vf-tc +cg-mf +cw-wm +uy-xy +bq-sj +ly-ox +vt-gs +ru-sb +al-nf +mr-qh +ib-jn +ec-xv +rn-fu +xl-sn +kb-da +iy-qm +rv-qs +wt-aj +mz-ug +jm-fx +dy-ce +cd-jg +en-cg +id-oj +oe-mq +us-ij +qt-cu +ot-rl +od-cj +lk-hd +rs-pd +wf-ed +yn-fc +ed-dr +an-xr +bo-xs +gj-wi +xr-ns +er-cj +qb-zj +gr-go +pj-yz +rw-mr +vx-kz +ni-kh +qd-bb +vh-rx +lo-ed +hh-nm +ew-kp +wm-qq +qh-rk +cx-rq +ig-xf +kb-ln +pw-ft +cv-sg +ob-ef +sf-mc +vz-sy +fn-no +tn-ur +vi-ap +xm-az +mf-ye +bn-az +li-bw +ye-ha +hn-pg +ic-kc +kt-uc +iy-yi +uk-te +ch-qj +tc-gs +ic-ua +qh-fw +dj-zc +iz-oj +ax-fc +hs-ib +bb-bi +xl-jg +uu-co +gn-qk +kh-gd +wn-me +zr-xr +tl-ia +gv-cv +xh-kk +pn-cj +fo-zs +zo-wq +ce-ka +qf-ty +cv-kx +vg-da +xk-lw +fr-fb +km-ii +sg-ho +na-zx +qg-xk +ug-xb +kl-fc +gg-ja +fl-zm +ts-ve +pp-rl +ek-hn +if-ni +fe-gw +np-kz +qw-oq +jr-on +xj-hc +co-hn +as-if +wx-fq +cp-ap +gg-uf +bn-cj +ua-ed +db-cc +kr-yi +ko-aq +dj-yw +ke-gw +fa-qy +sj-ku +ts-sd +lu-rq +cu-io +bn-xm +cm-zw +uq-hy +ej-ak +ql-xq +qt-io +fx-qf +pz-wo +op-ah +wv-cd +mq-gc +mi-ab +ka-br +kj-qs +rp-ik +vg-ln +kj-mp +hk-os +ye-sy +eh-kp +qb-sj +xw-ay +ve-ul +dv-it +zm-ql +lc-lz +nx-jt +jh-zm +mo-ed +sk-cs +nu-fe +im-sv +qo-pw +gr-sf +dx-kd +jy-lw +nl-ul +vf-tl +dc-fo +ln-ga +ng-rn +hg-rd +ks-so +cr-gt +nh-je +vm-cu +sf-xj +tr-bg +gf-dk +gx-os +go-zl +ea-uj +ju-mh +ro-ry +ur-cm +cw-qi +ey-vj +xm-cg +gs-tj +wx-zq +gn-tn +hc-rc +mg-vk +lh-qe +ti-cu +pg-yc +gg-gl +eg-fe +te-mk +vr-uv +qv-yw +we-my +au-gd +ui-we +og-pv +xf-oe +xn-dc +pq-hp +ze-cy +at-tl +bw-sz +kr-qr +jd-pa +hq-ix +ra-oo +oz-pv +xy-sy +sr-yn +if-cr +ef-ic +ob-ic +jb-bd +oa-su +bg-ed +ec-zt +df-id +jn-mr +dr-pc +fk-hy +re-nf +ke-pn +qm-hy +ch-uc +qc-pj +ao-jl +mr-si +lz-ug +bh-qy +qy-an +za-lv +wf-tt +ry-iv +mq-ll +qo-xs +nn-yr +ax-zn +zo-qr +uk-mh +si-rw +nw-oq +hi-mj +wx-cb +jc-qs +yt-ko +qy-dn +tg-bh +gr-zl +cx-qi +fa-an +ak-yp +yk-fo +ul-sd +mr-ib +nr-kg +cb-xw +gg-dy +cf-vi +qs-pa +lu-tb +sh-su +sv-kn +at-wn +fe-pn +ch-ce +ri-zk +ts-zk +gg-td +xh-ww +jf-zl +qo-ci +td-uf +eu-kx +jl-tv +ju-uk +jz-jl +hl-ik +cj-eg +ia-ku +rp-xw +ue-od +pb-fv +xw-kx +fg-mg +hl-zq +ab-vh +if-gz +mx-rf +gn-cm +gz-as +tt-dr +cb-xj +oe-dz +fg-zz +vt-wn +aj-fn +mp-ry +ft-hp +ev-dv +uy-ki +zb-ei +lz-bi +um-ip +jg-gf +ar-ea +bq-lw +vc-yt +cn-az +aj-ct +pw-ci +ot-pp +vz-dh +cl-mr +ng-za +qw-lr +ma-oj +ah-mq +qi-rq +ri-sd +sb-mg +bi-sq +kg-pw +df-oj +ag-dv +lo-nz +it-ag +dj-pj +dx-dc +uh-gf +yh-ip +au-mp +pg-ek +pp-va +xn-kd +me-gs +zw-ax +iy-hn +ef-lt +zc-yz +ev-fr +ak-cc +ot-ix +lr-cf +fg-yr +dt-br +dg-mq +hg-mk +ru-mx +et-af +xe-xc +tg-og +jq-sr +wu-az +pq-qe +xw-zq +yk-hk +cg-il +gg-mi +ob-ql +sr-dw +gc-dg +os-dx +zs-dc +qe-mt +ah-gc +tv-oj +ro-as +wp-mc +fm-qs +qi-vb +by-tx +zb-id +de-bp +nx-kk +ks-ql +cw-vb +jm-ak +fh-mb +ji-vr +qi-pd +ru-rm +rh-xw +gc-et +vc-mi +dj-na +dy-ob +ry-gd +za-md +hc-bd +td-aq +ug-bb +ja-mp +gc-op +pj-tx +wd-tt +vd-jc +vf-gy +tr-zp +xm-wu +gr-mc +zm-bt +al-qk +fg-nn +hv-ao +uf-ko +ha-ve +nh-mq +qi-qq +xc-fk +fh-at +fr-eh +oo-od +ia-jo +py-ld +fq-wj +lh-hr +og-vz +yr-zf +zh-sk +vx-zz +mg-ru +fl-ks +re-sk +yb-ha +bg-wd +mh-rj +md-cl +ks-bt +nn-dp +ej-yp +kk-oa +uz-dc +oe-af +bi-lc +wx-xw +ui-vd +zr-og +dj-ju +og-xr +lt-ic +kd-uz +hp-lh +kh-gz +lt-ks +sy-uy +ha-kb +vj-fs +sn-im +by-qc +fm-rv +xy-gj +mo-wf +fu-ze +qe-ci +gs-ih +yf-kz +ju-rj +au-gz +hq-rl +nx-it +ye-jw +jf-je +sw-ud +lr-nw +jp-kt +tl-sm +dp-sb +hz-cn +ug-se +zq-cb +yk-uz +py-pp +tv-iz +zw-kl +yk-gx +oo-pn +lb-rl +wz-fh +zj-ia +ft-bo +mq-et +fh-wi +uv-ho +se-lz +bo-lh +uz-dx +fu-pz +uc-dt +nx-xh +rt-oa +rw-hs +ha-ri +ij-fs +ww-zh +gt-od +rh-ik +xv-nm +fk-zo +mz-lc +uv-eu +my-br +ri-jw +vx-vp +ay-rh +rj-uk +ly-vf +ej-ty +tc-wn +qv-ep +rm-dp +ws-sf +ry-au +hq-pr +zb-oj +jd-xt +uc-ce +za-zz +gv-sg +uz-fo +fl-kc +ar-bj +jl-iz +ih-tj +ei-df +ul-ye +sv-gf +vh-vc +aj-no +ua-bg +ru-wb +qb-xk +zj-eg +qt-ti +ep-qc +dt-nk +fa-dh +wc-eh +bh-ba +vb-wm +ln-lq +cg-la +ok-bw +ea-ms +xm-ym +fq-zq +yn-dw +fn-zz +rk-fw +lt-jh +jo-sj +qd-jb +jr-ds +hn-uh +gd-cr +kd-fo +qy-vz +xp-yf +yk-ur +xt-us +bb-jb +nr-ft +aq-yt +ht-bj +qj-ka +wb-tb +lh-kg +ey-ij +ax-cp +hz-xm +wv-gf +vd-lk +na-tx +yf-cf +jw-ha +ym-il +lk-pa +eu-lm +qj-bx +iz-hv +li-ny +cu-pb +jr-eu +ne-im +zk-jw +my-lk +rl-ix +xs-ci +ub-cc +yr-yw +um-ec +cn-la +nn-mg +dx-bk +ht-dg +cc-ty +oe-op +oc-pr +iv-mp +vm-sz +ti-ib +hs-ri +ab-gl +uc-bx +yq-zn +cv-ds +zp-jt +rw-fw +jp-ce +eh-rr +hd-vd +tu-cs +rm-fg +ef-fl +la-hz +jq-cp +pn-er +vp-lv +ns-tg +hz-uo +bp-uy +vh-uf +mo-wd +np-cf +kd-bk +jz-tv +en-tp +ey-nm +zw-yn +vu-ia +bj-uj +wq-ll +ep-zx +uj-ht +gr-wp +ko-gg +yz-na +cj-ue +tt-ys +sq-xb +hi-qh +lv-rn +dn-tg +xw-wj +gf-pv +gs-wn +tj-jw +xp-km +fv-qt +uv-ds +ht-ux +uz-hk +hr-ci +os-ai +ln-ea +kt-ce +ka-dt +za-vx +jr-aq +qy-xr +uq-xe +ax-vi +ho-on +so-av +de-co +wt-lv +nn-vk +hh-fp +zs-yk +et-ax +mo-pc +hc-zl +wj-hl +vf-gs +pr-av +bn-cg +gt-ke +ju-rd +ig-oe +xc-qr +bq-xk +co-it +kp-rr +fa-vz +yg-rc +nz-wd +fp-xt +ia-do +by-pj +ox-ua +vr-sg +gn-zh +rc-go +ui-rv +ba-ns +qb-do +vk-ru +ug-bd +lt-ob +jq-zn +jb-gj +fo-xn +rd-te +io-tu +mj-rw +dc-gx +uj-ms +hv-tv +zo-xe +no-ct +yp-cc +zf-yn +ac-br +pc-ed +cx-lu +ab-uf +iz-jz +ro-mp +zb-ao +ys-wf +ur-sk +qm-zo +jr-ys +do-ku +cp-fc +kt-br +ch-dy +ef-ql +er-gw +xy-de +jh-ks +sm-tj +vg-ar +fa-bh +sk-cm +vc-ko +wn-gy +kt-bx +vc-ab +eq-le +al-lm +kt-qj +jb-mz +dw-kl +bd-lz +jb-lz +uv-on +gw-od +pc-wd +eg-nu +yg-es +eu-cv +vp-zz +cf-mt +wt-fn +zf-rf +tx-ep +ua-nz +ow-ub +yh-rr +br-bx +it-yc +lm-on +vq-oa +rk-hs +vo-lb +pr-cp +cw-qx +pb-ti +ms-bj +op-af +gg-yt +ii-oq +cs-zh +fb-le +se-bi +zl-wp +wu-ym +wu-cg +rx-mi +cp-kl +xc-uq +dt-ce +ei-oj +xo-va +wo-rj +kd-gx +zo-kr +ed-ox +ew-fr +fk-yi +xg-xw +sv-oz +ty-jm +qc-yz +sm-me +nm-zt +bx-dt +ej-lb +zw-dw +jc-lk +pv-sv +hr-qe +lv-zz +td-vc +yf-np +nl-zk +xg-hx +pd-wm +ek-dv +se-mz +ai-dx +cy-wo +yq-dw +uq-yi +ka-dr +ii-kz +iz-ao +et-je +zn-dw +nk-kt +db-vo +ah-dz +qb-vu +fa-xr +yt-kk +fh-bp +lq-ux +hu-ii +jp-ch +ny-io +ts-eq +tb-rq +ba-an +vi-cp +tb-wm +se-bb +qx-ui +by-kv +lu-wb +pr-va +ub-ty +bw-ny +mj-oq +jt-vq +wo-fu +vz-dn +wf-ua +jh-ef +do-sj +jw-ul +dv-uu +xc-wq +by-zc +ld-ci +xj-zl +ib-mj +lz-ss +qx-fm +bp-wz +rx-td +ho-kx +tu-ur +hk-ai +my-ui +td-gl +at-gs +ey-fp +vh-ja +mc-ws +ne-kn +lc-ug +zr-fa +fc-ap +mh-wo +pb-qt +xh-zp +cs-sc +wm-cx +jm-vo +zk-mf +sv-gw +rh-hl +jw-nl +mf-nl +re-tn +er-ue +af-dz +cs-nf +rw-uk +zc-yw +db-qf +cr-ni +oo-nu +ym-cn +mh-mk +ay-cb +cm-nf +fi-co +da-ln +fl-bt +jf-gr +ye-ve +fk-kr +pz-rj +ch-kt +dz-dg +um-fb +at-tj +lt-so +ic-xq +xp-nw +hp-nr +sn-bg +pq-qo +ht-da +qd-lc +kn-jg +fq-ay +wp-ds +fs-us +gx-zs +nk-ce +ze-uk +hp-ci +ur-zh +so-xq +qd-mz +ko-ab +we-vd +gn-al +ec-nm +xn-yk +lk-we +kk-vq +bw-cu +se-nl +ul-ts +xt-vj +og-dh +de-sw +qt-sz +jy-jo +ul-yb +dg-xf +mc-zl +rd-pz +us-fp +aj-vx +pr-rl +ru-zf +ms-dh +fq-rh +ow-vo +mh-cy +yq-fc +dk-sv +vk-gi +tp-cg +ns-dn +ss-dp +ns-bh +bk-uz +cc-qf +ag-oe +cv-ho +kr-iy +lb-db +eq-fr +jb-xb +ux-ea +mo-tt +bn-wu +ns-og +gl-vh +sf-rc +nh-dz +nh-af +vu-bq +ku-bq +ab-ja +mz-xb +hn-vs +fp-ec +ns-fa +bx-ka +lw-ku +op-mq +qb-qg +ke-oo +rd-uk +av-xo +cm-tu +eu-sg +np-km +jw-ts +dx-fo +ll-yi +ws-go +ze-pz +kl-jq +kv-yz +qs-qx +yq-vi +lz-us +me-at +tr-su +xl-sv +ry-if +ym-tp +kx-ds +zq-rp +tv-vq +ev-ek +ko-rx +ob-jh +ac-bx +zk-ye +ms-ar +ql-lt +dn-an +ro-iv +pg-fi +uh-co +mo-ua +zk-nk +pp-av +kn-sn +hu-km +us-ey +de-ud +xv-ey +cy-te +me-tl +ow-ty +py-rl +vp-ke +gl-vt +wa-kp +us-hh +wj-ay +ne-wv +kz-lr +yn-vi +my-fj +mi-aq +iy-ll +fn-ng +uu-vs +mj-md +ev-fi +pq-hr +rf-pz +fr-wc +xh-jt +gx-xn +wu-xh +dk-wv +qf-lb +lr-mt +ug-qd +nz-pc +wx-rh +rk-mr +yb-zq +ih-tc +xp-hu +ac-nk +go-sf +mx-yr +kc-cn +cx-cw +oz-dk +au-iv +wo-ze +nw-wo +zz-aj +vt-tl +ep-by +ao-jz +jk-qt +hz-en +jy-sj +lm-ds +zm-ss +fo-hk +ts-hb +wa-yh +vq-rt +ys-dr +rv-we +wf-dr +df-ao +zo-uq +ai-bk +sv-wv +qw-kz +ox-dr +jp-dy +rn-vp +ni-iv +od-me +iv-cr +jg-dk +ra-od +ym-bn +vd-rv +yc-vs +ln-bj +es-rc +av-ix +ax-yq +ek-ag +xn-xp +pg-ev +td-mi +ox-ys +nz-wf +lo-pc +vb-wb +tc-tj +zm-lw +hd-fq +wv-gl +le-rr +ds-vr +uy-qj +on-ji +qw-hu +ar-lq +sh-oa +uv-jr +ew-fb +li-qt +xf-ja +li-fv +vv-fn +zn-cp +kt-ka +ik-wj +ox-wf +yg-gr +tu-re +ju-te +vm-pb +ju-fu +go-mc +kr-wq +fh-sw +rf-rm +ao-tv +zc-na +cy-ju +xp-lr +xj-ws +ma-tv +fu-rj +hy-xc +nr-hr +cb-wj +jo-zj +jp-qj +vv-no +jd-xv +kg-hp +vu-zj +vm-ti +qd-er +mt-hu +xb-bb +rl-mv +ki-sy +ai-zs +ej-vo +yn-zn +fr-le +kz-cf +cc-fx +vg-ga +ao-id +wi-mb +sc-sk +rp-ij +jt-su +nl-ri +kl-ax +hc-yg +sb-vk +ac-uc +xq-fl +pr-ot +km-mt +ng-vp +wd-ua +nk-ch +cy-pz +nu-ch +ku-xk +ra-gt +at-sm +ce-sm +mb-bp +co-ag +nu-ke +sc-zh +zn-td +fg-mx +gf-kn +ok-ti +gf-cd +az-il +lr-ii +md-fw +av-ld +hi-fw +ap-zw +pa-jc +ho-ds +il-bn +vf-sm +xj-mc +hd-we +qf-yp +re-vb +yp-fx +me-tj +iz-ma +wp-ws +so-bt +uz-gx +vf-at +ny-pb +dk-ne +pb-sz +ij-zt +dy-qj +ey-fs +jy-zj +qm-qr +eu-gv +dn-ba +bo-hr +db-fx +ob-bt +tr-oa +ha-ul +cs-gn +qw-cf +fi-vs +dk-pv +ik-ay +sz-ok +xg-cb +qi-yq +ea-bj +fp-jd +zb-jl +tr-sh +us-jd +fp-sw +fr-yh +rd-ze +uu-uh +hz-wu +ox-tt +uu-rh +ly-tj +hx-fq +vp-ct +af-ah +zz-ng +mr-hs +sn-dk +gm-qq +sq-se +vw-iz +ih-wn +li-sz +oo-ue +me-vf +sj-bb +yp-jm +ly-me +lr-km +rs-qq +pg-dv +qw-yf +ev-yc +jn-hs +qv-na +fl-ql +ss-ug +ma-zb +gn-ur +zp-sh +py-oc +hu-tu +op-dz +ew-ga +zw-jq +je-op +qx-vd +ku-qb +hq-by +iv-ng +ho-ji +qs-fj +jp-ac +zh-tn +gr-vg +iv-gz +zt-xt +kk-su +vx-ct +bw-zs +ep-kv +yq-jq +vo-ak +si-hs +ih-sm +mb-sy +dh-bh +ud-xy +jk-pb +ql-kc +oo-gw +mp-kh +vp-aj +wo-rd +sc-re +os-xn +ko-ao +rt-xh +xf-dz +um-yh +ti-sz +le-wa +dy-ka +nw-km +jk-sz +gd-ac +ai-uz +af-dg +fi-dv +eq-kp +kg-bo +ix-py +zx-zc +kx-lm +gy-at +qd-bi +at-vt +fl-jh +ua-lo +vx-no +le-ew +hh-fi +bx-ak +xj-yg +zc-kv +dz-ig +vn-nx +km-cf +um-rr +df-vw +dv-yc +rk-dw +ts-mf +vc-zo +sw-ki +an-dh +yr-mg +cl-sk +yh-le +dn-og +cb-rp +bq-ia +dx-xn +pq-nr +rd-rj +nz-ys +wc-um +xg-rp +cl-mj +ze-rj +gg-aq +iy-fk +ec-us +zm-ic +py-pr +jo-vu +nh-xf +vw-id +dh-qy +xg-zq +fx-ty +id-iz +vn-tr +ui-fj +vr-eu +hq-xo +ak-ty +ny-fv +ki-wi +uj-vg +bb-sq +ea-kb +te-fu +et-xf +az-la +rk-hi +fo-os +ft-ci +cl-hi +ib-md +qv-pj +gg-vh +yi-wq +lt-xq +qg-zj +qh-cl +zp-kk +ih-me +il-uo +cj-gw +gr-xj +oe-ah +xt-xv +zs-hk +ku-oa +hb-nl +jg-tp +fh-gj +pr-mv +nn-gi +wp-yg +jp-ka +lq-kb +ru-gi +ij-nm +cx-tb +ho-eu +qv-by +xq-kc +ld-pp +bh-vd +sz-zc +ek-uu +eh-ip +uv-dv +sk-gn +jw-sd +ba-tg +lq-ms +rr-ew +je-af +jr-kx +ag-yc +si-md +lz-xb +ro-kj +pz-uk +dy-nk +md-hs +bk-xn +tv-id +kl-zn +ud-ki +ja-uf +jk-fv +qk-sk +jh-so +qq-rq +nk-qj +fv-jq +iy-xe +io-vm +km-xl +vm-li +jo-bq +ux-da +zc-tx +fa-jf +wd-ed +eg-pn +ob-so +cv-sh +xv-vj +tx-qc +gm-wm +ld-rl +kz-hu +vn-xh +gz-ik +yw-zx +ch-br +jz-vw +sn-gf +hq-ld +it-hn +ip-wc +fh-de +df-jz +aq-rx +mg-zf +sc-qk +tv-vw +cs-tn +pg-uh +wb-qi +cr-sm +jq-yn +km-oq +ho-vr +bg-lo +um-le +bw-rs +sw-mb +qx-rv +oz-kn +tl-wn +sn-sv +eh-wa +yc-hn +bw-fv +mi-az +wi-uy +pr-pp +ko-vh +sd-nl +sz-fv +ns-pg +we-pa +es-jf +yc-fi +hi-jn +ji-ds +wj-rp +pa-vd +jm-lb +ey-jd +ed-nz +yn-cp +qo-lh +aj-ep +jh-bt +pr-ld +nf-gn +rw-rk +lq-da +ip-wa +oq-hu +gd-if +hg-cy +qv-yz +cr-kh +rs-rq +lc-xb +ux-kb +oq-np +bq-ud +uo-en +np-nw +jn-si +yi-xc +yt-rx +cn-tp +ig-et +qw-xp +bg-mo +sn-jg +gg-ab +cw-pd +dt-ch +pg-co +bk-hk +es-sf +yw-qc +qg-vu +la-tp +jt-kk +mv-oc +zr-vn +hb-xv +qm-xc +vj-fp +jd-fs +mp-gd +fj-rv +bj-kb +rw-jn +my-fm +cc-jm +wm-rq +yr-vk +dr-ua +wo-mk +ne-xl +hh-ec +vo-ub +pc-tt +vq-ww +jf-ws +fb-wc +jt-tr +bk-gx +ot-py +wc-rr +ny-cu +hd-rv +ra-cj +hk-gx +gc-nh +af-lo +iy-uq +aj-za +da-uj +ea-ht +rc-mc +za-wt +ws-zl +uy-wz +hs-cl +dg-et +na-jl +dh-zr +uo-az +av-rl +ga-uj +nf-sk +cd-dk +fw-jn +ji-uv +qe-qo +ev-hn +im-oz +zp-nx +gy-tc +lv-ct +gy-vt +co-dv +il-wu +ij-jd +gv-ji +si-hi +uy-mb +ip-kp +rt-nx +vj-ij +ll-kr +lm-vr +gs-tl +cc-vo +hu-nw +me-vt +gw-ue +hx-rp +kp-wc +it-uh +it-uu +ms-ga +oc-av +bd-xb +mk-qq +bh-zr +lb-ty +va-mv +eh-ew +qb-bq +vn-su +ub-cs +hx-zq +us-zt +gw-ra +gi-mx +cf-nw +ue-pn +kb-ar +va-ok +ks-zm +mq-ig +rw-md +ni-eh +nw-kz +jg-pv +gz-kj +ii-xp +wq-qm +uy-ud +vh-yt +rq-gm +fb-eh +jc-my +jp-uc +se-ss +xp-np +im-da +nu-pn +cc-te +le-eh +se-jb +sh-xh +xt-hh +ik-xg +ft-kg +oq-cf +as-bi +zb-jz +zp-vn +oe-je +pg-ag +vx-lv +dj-qc +mh-ot +ec-ey +ri-ul +fc-vi +gg-rx +vt-tc +gf-im +pc-ua +fc-sr +wd-lo +ei-qy +at-ih +re-qk +vk-rf +sb-rm +lh-pw +vo-ty +vq-vn +qt-ok +vh-aq +cd-jh +jd-ec +rw-cl +xn-zs +sw-wz +bn-cn +ny-qt +qf-ow +ye-yb +ur-qk +jl-oj +ri-yb +sr-zn +cm-tn +np-hu +hh-zt +sc-qo +mk-fu +op-ig +sg-kx +np-mt +pq-xs +uv-sg +yn-yq +jk-vm +kz-xp +fw-ib +vr-on +ms-ux +yc-ek +ub-ej +ix-xo +id-hv +jc-fm +dv-uh +ai-dc +hx-ar +jo-ku +md-jn +yb-hb +bh-vz +pj-zc +jw-yb +ms-ht +eu-et +pw-qe +io-fv +sb-ii +gc-dz +hv-oj +sj-qg +hh-jd +io-jk +im-kn +ji-sg +ww-nx diff --git a/day23/example.txt b/day23/example.txt new file mode 100644 index 0000000..cbed247 --- /dev/null +++ b/day23/example.txt @@ -0,0 +1,32 @@ +kh-tc +qp-kh +de-cg +ka-co +yn-aq +qp-ub +cg-tb +vc-aq +tb-ka +wh-tc +yn-cg +kh-ub +ta-co +de-co +tc-td +tb-wq +wh-td +ta-ka +td-qp +aq-cg +wq-ub +ub-vc +de-ta +wq-aq +wq-vc +wh-yn +ka-de +kh-ta +co-tc +wh-qp +tb-vc +td-yn diff --git a/day23/go.mod b/day23/go.mod new file mode 100644 index 0000000..157b1b6 --- /dev/null +++ b/day23/go.mod @@ -0,0 +1,3 @@ +module stevenlr.com/aoc2024/day23 + +go 1.23.3 diff --git a/day23/main.go b/day23/main.go new file mode 100644 index 0000000..81cc6a0 --- /dev/null +++ b/day23/main.go @@ -0,0 +1,144 @@ +package main + +import ( + "bufio" + "fmt" + "os" + "sort" + "strings" +) + +func main() { + fmt.Println(part1(readData("example.txt")), 7) + fmt.Println(part1(readData("data.txt")), 1043) + fmt.Println("co,de,ka,ta") + fmt.Println(part2(readData("example.txt"))) + fmt.Println("ai,bk,dc,dx,fo,gx,hk,kd,os,uz,xn,yk,zs") + fmt.Println(part2(readData("data.txt"))) +} + +const SIZE = 26 * 26 + +func buildAdjacency(pairs [][2]int) [][]bool { + matrix := make([][]bool, SIZE) + for a := range matrix { + matrix[a] = make([]bool, SIZE) + } + + for _, p := range pairs { + matrix[p[0]][p[1]] = true + matrix[p[1]][p[0]] = true + } + + return matrix +} + +func part1(pairs [][2]int) (count int) { + matrix := buildAdjacency(pairs) + triples := make(map[[3]int]bool) + + for a := range SIZE { + connectedToA := make([]int, 0) + for b := a + 1; b < SIZE; b++ { + if matrix[a][b] { + connectedToA = append(connectedToA, b) + } + } + for ib, b := range connectedToA { + for ic := ib + 1; ic < len(connectedToA); ic++ { + c := connectedToA[ic] + if matrix[b][c] { + sortTriple(&a, &b, &c) + triples[[3]int{a, b, c}] = true + } + } + } + } + + for t := range triples { + if containsT(t[0]) || containsT(t[1]) || containsT(t[2]) { + count++ + } + } + + return count +} + +func part2(pairs [][2]int) string { + matrix := buildAdjacency(pairs) + sets := [][]int{} + + for a := range SIZE { + isInAnySet := false + for i, set := range sets { + connectedToAll := true + for _, other := range set { + if !matrix[a][other] { + connectedToAll = false + break + } + } + if connectedToAll { + sets[i] = append(set, a) + isInAnySet = true + } + } + if !isInAnySet { + sets = append(sets, []int{a}) + } + } + + maxSet := []int{} + for _, set := range sets { + if len(set) > len(maxSet) { + maxSet = set + } + } + + ids := make([]string, 0, len(maxSet)) + for _, id := range maxSet { + ids = append(ids, numToId(id)) + } + + sort.Sort(sort.StringSlice(ids)) + return strings.Join(ids, ",") +} + +func containsT(x int) bool { + const MIN = int('t'-'a') * 26 + const MAX = MIN + 25 + return x >= MIN && x <= MAX +} + +func sortTriple(a, b, c *int) { + maybeSwap := func(a, b *int) { + if *a > *b { + *a, *b = *b, *a + } + } + maybeSwap(a, b) + maybeSwap(b, c) + maybeSwap(a, b) + maybeSwap(b, c) +} + +func idToNum(s string) int { + return int(s[0]-'a')*26 + int(s[1]-'a') +} + +func numToId(id int) string { + return string([]byte{byte(id/26 + 'a'), byte(id%26 + 'a')}) +} + +func readData(fileName string) (pairs [][2]int) { + fp, _ := os.Open(fileName) + scanner := bufio.NewScanner(fp) + + for scanner.Scan() { + line := scanner.Text() + pair := [2]int{idToNum(line[0:2]), idToNum(line[3:5])} + pairs = append(pairs, pair) + } + + return +} diff --git a/go.work b/go.work index 22aeaf2..fbd6ea8 100644 --- a/go.work +++ b/go.work @@ -15,6 +15,7 @@ use ( ./day20 ./day21 ./day22 + ./day23 ./day2 ./day3 ./day4 -- cgit