From 9833eeb598f420a814d0226a7d600a4f59b666f5 Mon Sep 17 00:00:00 2001
From: Steven Le Rouzic <steven.lerouzic@gmail.com>
Date: Sun, 1 Dec 2024 17:59:49 +0100
Subject: Day 1

---
 day1/data.txt    | 1000 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 day1/example.txt |    6 +
 day1/go.mod      |    3 +
 day1/main.go     |   89 +++++
 4 files changed, 1098 insertions(+)
 create mode 100644 day1/data.txt
 create mode 100644 day1/example.txt
 create mode 100644 day1/go.mod
 create mode 100644 day1/main.go

(limited to 'day1')

diff --git a/day1/data.txt b/day1/data.txt
new file mode 100644
index 0000000..2ee941e
--- /dev/null
+++ b/day1/data.txt
@@ -0,0 +1,1000 @@
+76569   66648
+38663   66530
+60350   60777
+35330   13469
+88681   66648
+30057   83262
+55455   13469
+48398   40350
+60451   61801
+23979   80612
+20498   47207
+18170   73737
+27928   35371
+45219   20896
+13289   77147
+24458   32690
+33053   45373
+30998   96652
+63320   53803
+18321   62925
+47393   64433
+71112   96929
+21392   87748
+60110   75803
+45686   82976
+43026   50513
+23080   25876
+81346   96652
+45701   27282
+67858   52482
+61483   98326
+52308   60692
+98286   78044
+99386   28829
+31064   24022
+90518   76616
+86055   77147
+77548   78368
+67600   59182
+13410   10920
+14441   94982
+73737   70248
+61602   67267
+88419   40092
+31757   26048
+51810   97947
+37775   64433
+42112   31426
+82029   97947
+84902   75016
+77147   72913
+55928   74888
+30168   26337
+35206   62925
+76009   87748
+51573   21184
+54931   74888
+23466   65978
+34344   62436
+56118   89076
+57495   27190
+20063   84666
+50850   60277
+94982   65172
+82710   50401
+54893   97947
+17029   13015
+31042   27282
+77274   21521
+36836   66530
+64993   32013
+36429   67456
+14228   60117
+93810   77235
+82201   55336
+11071   59405
+62119   76671
+74858   78380
+16332   64287
+41635   61870
+26392   19133
+30081   79653
+46852   54621
+61987   40810
+45439   13469
+16638   72913
+46884   64433
+78775   41746
+28266   21471
+50240   21359
+36216   18921
+63061   80604
+55186   48458
+33521   67895
+88738   32324
+17872   27128
+42966   67895
+74894   66648
+68870   72913
+32631   89974
+22114   32324
+54345   94982
+79241   40092
+75791   30915
+89775   64433
+36196   62925
+97340   64433
+70717   66530
+97532   74017
+17841   85558
+64433   96652
+57281   77235
+60158   68395
+38601   31426
+95768   67206
+74339   96114
+72283   66153
+66648   88997
+77312   64433
+24237   65172
+34725   80360
+81905   45373
+49368   66530
+70080   74811
+36941   56793
+25380   65172
+75150   40092
+95428   65463
+65063   75803
+95286   97947
+76555   67896
+69305   72913
+46692   19873
+60637   79234
+70348   40092
+63575   87748
+18822   86165
+10053   45373
+32355   92574
+33467   59368
+78154   27282
+21154   67895
+34321   62925
+63763   31426
+41970   57327
+95379   32324
+29009   75157
+57863   27282
+93891   71556
+55942   26584
+51505   97947
+57349   56723
+18516   26076
+47757   26741
+88631   64859
+82224   66648
+94668   97947
+37537   63594
+84583   67896
+62925   31426
+83652   21593
+48631   78044
+34328   70839
+17959   12466
+92497   79654
+74945   52837
+30957   96669
+20808   74035
+68043   78044
+92100   27282
+83140   67895
+50451   54565
+99877   28626
+17414   84687
+74459   73737
+71551   10197
+48028   64325
+45144   20896
+77667   38950
+55278   33966
+50857   78698
+71058   62925
+14884   32559
+26322   35307
+19517   72482
+61263   67885
+41865   20896
+46019   74888
+84622   58250
+72924   74609
+65922   82910
+57609   97333
+96221   54856
+58965   96652
+48467   66648
+38822   30889
+89271   78044
+50233   64433
+72132   45373
+50114   87748
+92854   22607
+68597   49674
+31426   77235
+26290   64433
+46519   64433
+99530   77235
+24195   31586
+24855   21184
+12474   79094
+79857   21593
+84581   20896
+14589   92512
+27460   21340
+95913   80901
+96860   32324
+68478   48576
+61539   53107
+54264   19299
+11712   67896
+67895   47673
+21806   32758
+94924   62925
+79279   78044
+71937   39743
+38121   78795
+99405   66123
+23777   32324
+15904   78795
+57158   64433
+90077   94982
+27713   55706
+94225   35262
+26741   86365
+76579   53276
+98566   87748
+96383   31426
+34920   35972
+30857   44851
+72631   28903
+97426   75803
+90023   10480
+42078   72456
+29177   61870
+15290   92102
+30020   31426
+48828   92102
+55399   50795
+92532   96652
+84224   48473
+56107   21184
+94015   15651
+74539   66648
+46023   67896
+65289   27607
+76828   61870
+31980   70248
+29563   77235
+37156   16468
+90827   91595
+90960   19133
+52081   22332
+37539   41719
+45714   54298
+33020   61870
+65172   66530
+48114   78775
+95266   75803
+14319   86650
+15016   35732
+44772   80035
+13318   55618
+66222   52117
+52139   87748
+89430   11409
+94339   75803
+51914   62825
+49546   19721
+77235   33966
+34977   58765
+32268   94658
+32335   78795
+87797   78044
+70688   27282
+34550   65172
+48762   71542
+36225   33519
+14156   37230
+54748   33966
+60824   62925
+23664   80089
+75308   17866
+85167   27282
+31875   87748
+80274   97947
+53914   19133
+65328   87748
+15842   70248
+64679   34977
+72913   72913
+26977   50674
+18805   79402
+50403   92493
+66822   66530
+25130   78795
+43179   73939
+28529   90781
+84485   98917
+88144   64096
+19444   80359
+25094   77147
+23999   94224
+76777   66648
+80395   87748
+87765   75803
+54941   97947
+35440   50102
+47296   40092
+82072   33966
+99634   66367
+66069   67895
+38850   75803
+30653   77235
+56745   45373
+21852   74888
+19323   94982
+83540   88668
+83398   40092
+68475   35769
+32324   94982
+75842   24467
+75024   92102
+30361   31426
+23965   16174
+89063   66946
+33958   47913
+52713   92695
+79512   27282
+57978   89624
+67269   66530
+52343   94982
+68862   38090
+23827   48146
+78795   70248
+51665   94193
+22205   33442
+44361   82174
+32727   61173
+51222   83595
+69372   48212
+87748   96669
+20468   75346
+64252   31030
+85477   67895
+74888   35830
+15886   92371
+50741   63054
+91573   90762
+64501   40092
+58070   47184
+48736   52006
+86830   66648
+42764   20896
+39435   75803
+57300   23024
+27997   29297
+94682   45384
+63535   63310
+61579   69125
+76805   50707
+80476   27282
+78044   33966
+20073   65172
+60476   78795
+67653   25683
+59888   30469
+51791   62925
+69612   27282
+92872   98790
+76912   92147
+39675   87781
+18997   78044
+39931   80845
+54580   34977
+80984   66702
+28979   66122
+90883   87748
+87336   32324
+15586   20896
+54359   91784
+61884   67895
+47021   97947
+44988   45373
+81841   61262
+10463   31426
+20507   45373
+42642   31426
+45174   45373
+98791   92102
+26063   86304
+53202   61016
+68734   77235
+11240   61870
+89762   40475
+26879   43813
+35769   33966
+86763   80861
+23079   63219
+62599   77147
+90177   68212
+89027   13469
+78085   31979
+23181   23639
+60101   43169
+70182   43769
+76082   65349
+23126   44490
+94557   85732
+39903   92382
+53351   92674
+27851   12772
+55945   19133
+94512   31426
+59442   40411
+46111   72913
+33188   40092
+69496   45373
+53706   49971
+84226   51998
+84530   21593
+15619   92382
+92909   32324
+82233   92102
+32228   83737
+22622   75803
+87096   80553
+45821   64433
+53028   41007
+87359   39533
+24280   87748
+33180   45751
+29942   78775
+62815   36056
+34378   33966
+19267   59240
+41823   22936
+19487   66588
+35166   33993
+53863   96652
+37077   22763
+21593   78795
+15250   83295
+97412   75803
+41281   92126
+50748   61126
+85109   73737
+93496   78795
+89991   33966
+21350   78044
+83836   67895
+99183   87748
+83195   64433
+57577   13469
+86197   58388
+75241   48318
+28959   32286
+19106   33966
+24181   13469
+58346   27282
+64260   40092
+63855   37643
+51041   46410
+12780   85519
+39423   85172
+15750   31426
+96117   72913
+48705   66648
+60266   40092
+56098   54353
+84332   62925
+59843   21593
+47823   79304
+92701   37931
+44807   75803
+87047   77312
+12269   20353
+32926   46463
+87543   27282
+37843   19133
+89968   61047
+81630   20896
+78677   21184
+97744   32324
+42608   51250
+80685   81741
+50122   14161
+13469   64433
+46215   62925
+19736   66530
+33883   37191
+57314   73055
+97638   19870
+53667   92382
+57195   61870
+25721   33774
+26068   40724
+25422   72913
+21805   45373
+30357   19952
+84783   64433
+51674   32324
+31130   64009
+66530   87748
+56565   82436
+45075   66648
+20799   40855
+62469   18007
+29429   25209
+28582   78775
+63901   15901
+82320   62925
+13257   70997
+60804   77312
+90339   40092
+42668   65172
+24336   67895
+26868   89300
+50073   98326
+84600   30003
+65452   77235
+95481   73588
+70538   48925
+99276   77147
+92621   19133
+91369   97947
+52612   24257
+36522   17658
+70248   97947
+88603   23450
+14573   70248
+67260   89145
+51191   98661
+44550   49884
+14867   96392
+40341   77267
+36004   77312
+81443   78902
+76574   53093
+87171   17683
+75979   61667
+74276   32324
+35093   13469
+83347   62925
+61220   27315
+75436   90108
+91705   67308
+44016   21184
+77374   85349
+56171   21593
+12623   77147
+67912   22652
+62519   97947
+50408   34621
+92685   77147
+69052   76862
+90063   92382
+19924   11561
+24684   40421
+94603   65926
+93869   66530
+36287   48082
+19610   67895
+41304   70125
+80834   99853
+73110   79715
+34006   80678
+49159   50399
+94986   90400
+23162   65172
+87756   45373
+78614   92102
+48810   91710
+30686   75803
+93411   85238
+92796   62925
+33708   83052
+69230   88895
+80346   97913
+31632   31088
+49454   96652
+87503   32324
+12993   67895
+24790   16973
+27278   77235
+31393   97947
+13890   32206
+45822   65172
+76509   66648
+73570   27282
+68202   65172
+11950   62321
+86295   40092
+59431   21184
+10073   34977
+46959   43185
+38024   77147
+59467   65244
+97947   64378
+52066   33745
+78026   72913
+67778   20896
+36416   90870
+28572   20178
+43037   96652
+13183   78390
+95497   31577
+59588   31486
+87551   74948
+47751   60762
+64227   33966
+25037   96652
+69189   79055
+78690   72913
+97053   33515
+86924   74892
+21239   12234
+70294   94982
+64633   66530
+63033   77235
+20972   67896
+57094   28665
+66334   78044
+84175   45373
+69423   85516
+59629   92102
+26492   56269
+24233   88192
+42703   38887
+43484   27282
+25830   97275
+27148   32324
+70173   63820
+37962   21712
+53875   73269
+62770   30421
+84383   56860
+38809   78044
+14689   37568
+58731   40092
+69616   68542
+12184   61542
+19032   37467
+21184   40092
+81673   65172
+92102   35259
+50429   18155
+41374   87748
+62668   40678
+38465   21184
+48412   74888
+85695   66183
+85327   76099
+40141   48103
+78149   34977
+19512   75803
+90774   24724
+30680   70248
+33876   13469
+48744   87748
+41261   34680
+94345   66648
+17561   77462
+82921   13469
+22353   51441
+66005   67895
+31257   45373
+47358   70248
+89407   31426
+16602   27282
+77071   32324
+33095   94179
+92791   27577
+90001   45373
+76457   64433
+45373   82791
+26903   27282
+94655   61226
+87065   64433
+59434   26586
+31424   78044
+98326   31294
+67336   65172
+63174   57462
+91623   91717
+30997   57264
+16487   56799
+36955   67895
+41035   95689
+40808   78044
+70906   12597
+83126   68388
+27778   34977
+29362   96669
+96931   34603
+49573   77235
+17169   65172
+62241   81818
+44935   84669
+56537   31733
+70264   10099
+53581   20896
+10468   21683
+72084   96652
+10700   29942
+95034   54507
+95618   85158
+44077   18069
+62523   75803
+73000   65172
+86080   27282
+70455   55085
+86887   39416
+36257   66530
+69290   13469
+84621   45373
+28070   27127
+67896   71818
+91077   60253
+28096   58231
+82719   62925
+13753   62925
+13359   73882
+73187   56847
+46578   37833
+51474   29377
+59914   13469
+32994   29637
+47213   64433
+27705   20268
+43458   42766
+55713   70932
+88478   67896
+76437   71309
+47552   30154
+61870   14538
+82030   60684
+66782   57234
+58762   77235
+73779   66648
+39491   97947
+56237   48563
+39046   67465
+83723   75437
+15550   96669
+45705   72913
+61209   75803
+34422   62925
+48150   32431
+54683   10076
+80717   78795
+73513   62925
+17391   40092
+93794   64433
+61475   59675
+53260   77235
+28755   89046
+61345   99015
+70447   19133
+17075   95443
+38645   77312
+34399   79947
+96669   80873
+53242   81188
+73388   38294
+43262   45373
+57113   35769
+99180   23536
+71205   26741
+23208   66648
+16013   66648
+48327   33966
+54890   23799
+35094   42350
+91186   37676
+57274   87515
+75941   61870
+57396   75803
+26112   67895
+54308   77312
+16053   65172
+92418   45373
+33397   22627
+68006   13273
+71144   27282
+41560   28813
+11541   61870
+12314   20591
+84666   35769
+45896   20896
+37274   67618
+25332   12025
+47691   67895
+19593   88018
+59745   52030
+16391   21184
+48465   77312
+27282   20896
+44459   79545
+56759   21184
+31978   77312
+49713   60159
+71736   77235
+48701   94495
+58335   77312
+85731   77235
+36730   87187
+24576   61551
+16255   77312
+86861   77232
+44160   20365
+42957   77235
+37675   21184
+46289   19117
+32863   67895
+44893   63700
+19026   77147
+14203   62925
+79022   20896
+90878   64104
+28194   50591
+99094   17191
+83283   67895
+97463   94724
+21838   99767
+33966   34741
+31560   37806
+51238   77312
+87950   66471
+97414   62666
+22335   73671
+43355   21593
+33567   40218
+77568   61870
+73302   43649
+20178   94062
+41008   40771
+61032   77312
+92382   40092
+28557   74888
+66152   50621
+55335   40092
+94368   34977
+96652   64433
+39401   21593
+33854   54721
+12726   70248
+58078   40066
+86375   88605
+93905   66648
+73642   74437
+10862   96669
+69937   21184
+16483   80995
+33726   32324
+91167   68312
+49496   97947
+40092   79306
+88996   78795
+87107   33435
+95555   59150
+10341   94764
+85542   77312
+67878   23706
+23412   92102
+50765   20896
+32794   62925
+96832   97699
+83174   77235
+64070   21184
+54569   40092
+96530   96652
+17512   94982
+71376   42379
+75803   16374
+85967   31426
+34569   70248
+96867   97811
+56321   22248
+31972   98519
+11367   79119
+16755   77147
+33148   23891
+27699   92382
+58246   34977
+81416   96566
+64682   74553
+14103   31426
+97226   40092
+76494   69441
+33262   43363
+83176   63786
+44601   39137
+19627   35769
+82257   74888
+33338   40646
+65644   20178
+40304   40092
+63980   25399
+35134   33966
+78787   54216
+31147   98280
+70378   45373
+96224   50505
+75530   34977
+43443   31426
+17552   28034
+15131   86681
+59594   73729
+74481   61870
+91569   19681
+67128   78795
+63154   77235
+51586   98318
+41213   20368
+66534   98097
+49095   98255
+25436   21184
+95020   43385
+93614   82529
+46555   62461
+35898   17460
+63537   31992
+71258   91047
+92852   67895
+97125   20896
+88632   75803
+57247   96652
+20277   67895
+10269   85485
+46681   78417
+31928   44190
+12487   21184
+76196   77312
+24895   10004
+46101   87748
+26438   21593
+86041   67868
+99574   74888
+14990   20896
+42622   24596
+76205   62925
+88565   45373
+88447   65172
+11332   28176
+47458   21931
+19133   36318
+58142   35444
+77904   53938
+45223   20384
+32352   96652
+88508   81769
+35832   47885
+79827   77014
+53932   33966
+16064   92102
+73085   20896
+17739   99652
+54478   67896
+28744   57632
+87515   93313
+86271   93951
+15579   74888
+51749   62314
+46430   30608
+24869   67896
+97219   88722
+13106   21184
+22072   66530
+67674   65974
+68925   55818
+33588   21184
+95625   65172
+31443   87748
+94542   32961
+21244   20482
+38829   68138
+68255   77147
+39081   16035
+25336   16043
+31219   92382
+87477   53823
+29146   45373
+37019   65172
+94223   65172
+20896   34977
+15884   86356
+76809   13023
+56403   10503
+23533   40965
+82416   74888
+24373   20896
diff --git a/day1/example.txt b/day1/example.txt
new file mode 100644
index 0000000..c88ca55
--- /dev/null
+++ b/day1/example.txt
@@ -0,0 +1,6 @@
+3   4
+4   3
+2   5
+1   3
+3   9
+3   3
diff --git a/day1/go.mod b/day1/go.mod
new file mode 100644
index 0000000..295de4c
--- /dev/null
+++ b/day1/go.mod
@@ -0,0 +1,3 @@
+module stevenlr.com/aoc2024/day1
+
+go 1.22.2
diff --git a/day1/main.go b/day1/main.go
new file mode 100644
index 0000000..03f738f
--- /dev/null
+++ b/day1/main.go
@@ -0,0 +1,89 @@
+package main
+
+import (
+	"bufio"
+	"fmt"
+	"os"
+	"sort"
+	"strconv"
+	"strings"
+)
+
+func IntAbs(a int) int {
+	if a >= 0 {
+		return a
+	}
+	return -a
+}
+
+func main() {
+	part2(readData("data.txt"))
+}
+
+func readData(fileName string) (list1, list2 []int) {
+	fp, err := os.Open(fileName)
+	if err != nil {
+		panic(err)
+	}
+
+	scanner := bufio.NewScanner(fp)
+
+	list1 = make([]int, 0)
+	list2 = make([]int, 0)
+
+	for scanner.Scan() {
+		line := strings.TrimSpace(scanner.Text())
+		split := strings.Split(line, "   ")
+		if len(split) != 2 {
+			continue
+		}
+
+		value1, err := strconv.Atoi(split[0])
+		if err != nil {
+			continue
+		}
+
+		value2, err := strconv.Atoi(split[1])
+		if err != nil {
+			continue
+		}
+
+		list1 = append(list1, value1)
+		list2 = append(list2, value2)
+	}
+
+	return
+}
+
+func part1(list1, list2 []int) {
+	sort.Sort(sort.IntSlice(list1))
+	sort.Sort(sort.IntSlice(list2))
+
+	dist := 0
+	for i := range list1 {
+		dist += IntAbs(list1[i] - list2[i])
+	}
+
+	fmt.Println(dist)
+}
+
+func countInstances(list []int) (counts map[int]int) {
+	counts = make(map[int]int)
+	for _, n := range list {
+		counts[n] += 1
+	}
+	return
+}
+
+func part2(list1, list2 []int) {
+	counts1 := countInstances(list1)
+	counts2 := countInstances(list2)
+
+	total := 0
+	for n, c1 := range counts1 {
+		c2, _ := counts2[n]
+		total += n * c1 * c2
+	}
+
+	fmt.Println(total)
+}
-- 
cgit