diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index 160c009..ad18e18 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -11,8 +11,11 @@
-
-
+
+
+
+
+
@@ -44,7 +47,7 @@
-
+
@@ -53,7 +56,7 @@
-
+
@@ -109,7 +112,7 @@
-
+
@@ -117,12 +120,56 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -147,39 +194,39 @@
-
+
-
+
-
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
+
@@ -188,10 +235,14 @@
-
+
-
+
+
+
+
+
diff --git a/day1/day1.go b/day1/day1.go
index b96efd9..7b7e47d 100644
--- a/day1/day1.go
+++ b/day1/day1.go
@@ -19,26 +19,16 @@ func main() {
if err != nil {
fmt.Println(err)
}
- fmt.Println(day1(numbers))
+ fmt.Println(day1(numbers, 2020))
fmt.Println(day1_part2(numbers))
}
-func day1(numbers []int) int {
- goal := 2020
- sort.Ints(numbers)
- p1 := 0
- p2 := len(numbers) - 1
- for {
- if numbers[p1]+numbers[p2] < goal {
- p1++
- }
- if numbers[p1]+numbers[p2] > goal {
- p2--
- }
- if numbers[p1]+numbers[p2] == goal {
- return numbers[p1] * numbers[p2]
- }
+func day1(numbers []int, goal int) int {
+ add1, add2, err := helper.FindAddendsForSum(numbers,goal)
+ if err != nil {
+ return 0
}
+ return add1 * add2
}
func day1_part2(numbers []int) (int, error) {
diff --git a/day9/day9.go b/day9/day9.go
new file mode 100644
index 0000000..e2d1001
--- /dev/null
+++ b/day9/day9.go
@@ -0,0 +1,74 @@
+package main
+
+import (
+ "AoC2020/helper"
+ "fmt"
+ "os"
+)
+
+var pointer int
+var band []int
+
+func main() {
+ args := os.Args[1:]
+ input, err := helper.GetInput(args[0])
+ if err != nil {
+ fmt.Println(err)
+ }
+ numbers, err := helper.MapToNumber(input)
+ if err != nil {
+ fmt.Println(err)
+ }
+ fmt.Printf("%v \n",numbers)
+ band = numbers
+ breaker := part1(25)
+ fmt.Println(breaker)
+ fmt.Print(part2(breaker))
+}
+
+func part1(preambleLen int) int{
+ pointer = preambleLen
+ isValid := true
+ for isValid {
+ _,_,err := helper.FindAddendsForSum(band[pointer-preambleLen:pointer],band[pointer])
+ if err != nil {
+ return band[pointer]
+ isValid = false
+ }
+ pointer++
+ }
+ return 0
+}
+
+func part2(breaker int) int{
+ for p1 := 0; p1 < len(band); p1++ {
+ for p2 := p1 + 1; p2 < len(band); p2++ {
+ array := make([]int, len(band[p1:p2]))
+ copy(array,band[p1:p2])
+ sumArray := 0
+ for _,value := range array {
+ sumArray += value
+ }
+ if sumArray == breaker {
+ fmt.Printf("%v \n" ,array)
+ var max int
+ var min int
+ for i, val := range array {
+ if i==0 || val < min {
+ min = val
+ }
+ if i==0 || val > max {
+ max = val
+ }
+ }
+ fmt.Printf("%d , %d \n" ,min, max)
+ return min + max
+ }
+ }
+ }
+ return 0
+}
+
+func run(preambleLen int) {
+
+}
diff --git a/day9/day9Input.txt b/day9/day9Input.txt
new file mode 100644
index 0000000..83186cd
--- /dev/null
+++ b/day9/day9Input.txt
@@ -0,0 +1,1000 @@
+12
+36
+37
+31
+33
+25
+48
+39
+6
+7
+23
+41
+21
+13
+8
+14
+29
+43
+10
+17
+16
+42
+3
+11
+19
+9
+56
+12
+15
+61
+18
+58
+20
+22
+24
+25
+27
+23
+21
+13
+49
+28
+14
+26
+29
+17
+33
+63
+30
+31
+85
+32
+34
+35
+40
+46
+36
+37
+41
+38
+39
+42
+91
+27
+76
+43
+45
+82
+66
+52
+44
+65
+61
+57
+71
+100
+59
+62
+109
+112
+70
+80
+86
+68
+69
+72
+79
+84
+120
+87
+88
+102
+96
+111
+101
+103
+116
+118
+119
+129
+121
+127
+150
+137
+138
+168
+140
+156
+253
+200
+159
+180
+171
+184
+175
+189
+203
+246
+204
+217
+221
+234
+259
+248
+250
+258
+455
+275
+277
+278
+296
+299
+336
+330
+334
+376
+346
+378
+359
+379
+536
+564
+533
+829
+467
+1069
+689
+498
+609
+791
+735
+844
+552
+555
+675
+642
+680
+664
+867
+832
+1003
+705
+737
+877
+846
+1173
+1535
+1324
+965
+1313
+1050
+1441
+1107
+1273
+1194
+1583
+1197
+1870
+1260
+1306
+1797
+1344
+1678
+2127
+1442
+1997
+2320
+1614
+1723
+1811
+2301
+2159
+4098
+2015
+2586
+2470
+2304
+2367
+3607
+2811
+3501
+2457
+2566
+2604
+4117
+2786
+6568
+3056
+4281
+6703
+3773
+3337
+3629
+5372
+4319
+6418
+6276
+4382
+4581
+4671
+9070
+4908
+7173
+5023
+6839
+5513
+5061
+5170
+8011
+7067
+5842
+8245
+9142
+7948
+6966
+11582
+9841
+8210
+9579
+8900
+8963
+9732
+16911
+15121
+9694
+10865
+10231
+14864
+10574
+10683
+12808
+16974
+11012
+12909
+23491
+25986
+18105
+14914
+15176
+15929
+17110
+17173
+20597
+17863
+18594
+19646
+19426
+19925
+30772
+20268
+20805
+46583
+23820
+37770
+25597
+23921
+25926
+45686
+33039
+30090
+30843
+35278
+32024
+40193
+33102
+50269
+35767
+36457
+38668
+52748
+39072
+39694
+47741
+67860
+49417
+88085
+57023
+62993
+128278
+101661
+91416
+56016
+161317
+60933
+89963
+62867
+123440
+69559
+73295
+151078
+72224
+74435
+110892
+89111
+78766
+86813
+112284
+97158
+123926
+105433
+113039
+118883
+116949
+133157
+123800
+125575
+128240
+165579
+244049
+132426
+147730
+197221
+175924
+231922
+146659
+161335
+153201
+272227
+167877
+183971
+192246
+258732
+273082
+222382
+218472
+229988
+387961
+240749
+249375
+252040
+253815
+260666
+472671
+279085
+330630
+343801
+299860
+407846
+314536
+329212
+337172
+345447
+351848
+376217
+402443
+512706
+474422
+470737
+759694
+448460
+674431
+754291
+540609
+501415
+589212
+630490
+539751
+578945
+593621
+1253376
+614396
+629072
+643748
+651708
+681060
+1220811
+697295
+1198710
+1080360
+850903
+1711416
+945159
+919197
+949875
+1311691
+1182833
+1041166
+1738461
+1090627
+1118696
+2140008
+1133372
+1172566
+1208017
+1258144
+2223999
+2148585
+1824274
+1332768
+1796062
+1548198
+1896005
+1770100
+1800778
+1864356
+1869072
+3322841
+1960363
+2910238
+2131793
+2159862
+2174538
+2252068
+3036922
+2968628
+3072373
+3508561
+2380583
+3620336
+2590912
+5454634
+2880966
+3197124
+3318298
+3344260
+3929962
+8651758
+3730463
+3665134
+3733428
+3829435
+5042031
+4092156
+5055504
+4306331
+6515422
+4426606
+4632651
+5452956
+4971495
+8884939
+5261549
+10026999
+6078090
+6541384
+7976911
+6611429
+8971993
+10097535
+8797216
+8036794
+7395597
+7398562
+7494569
+7562863
+14958460
+8398487
+8518762
+8732937
+11582924
+12824412
+9398101
+12609562
+10233044
+12367092
+11339639
+11802933
+12619474
+12689519
+18978521
+14007026
+14009991
+16128534
+18131038
+16555556
+21128324
+14890166
+16295800
+19077493
+15961350
+20321695
+22017575
+43145899
+18965981
+19631145
+25359451
+27509640
+21572683
+28985319
+23142572
+25308993
+24422407
+26626500
+27579685
+28897192
+36027566
+29971341
+37424124
+32516906
+30851516
+31185966
+51988916
+32257150
+52939136
+34927331
+67184481
+38597126
+44053552
+40538664
+41203828
+44715255
+45995090
+59143406
+47564979
+48451565
+63019533
+51048907
+94205499
+93560069
+58868533
+74686596
+60822857
+72795814
+140200589
+73460978
+63443116
+70854276
+111807669
+73524457
+96016544
+87198918
+79135790
+85257380
+158781837
+85919083
+232306294
+159372648
+98613886
+222392181
+99500472
+119691390
+109917440
+122311649
+124265973
+181180182
+131677133
+133618671
+136904094
+136967573
+195174820
+134297392
+205151668
+329417641
+152660247
+164393170
+243528960
+165054873
+171176463
+219191862
+184532969
+198114358
+208531326
+236468045
+327463317
+209417912
+229608830
+318151640
+479997005
+466076875
+315477574
+348926139
+338770339
+271201486
+317715120
+350774605
+318830361
+548609503
+372924496
+317053417
+329448043
+455659907
+336231336
+355709432
+503363330
+382647327
+407532270
+527569552
+439026742
+480619398
+500810316
+672762849
+586679060
+666252179
+588254903
+725247390
+588916606
+1023537454
+634768537
+691940768
+635883778
+646501460
+653284753
+665679379
+905970023
+910895600
+1001910715
+1055410176
+886010657
+790179597
+675280050
+1318427870
+919646140
+1069536004
+1223685143
+1233180520
+1174933963
+1175595666
+2399280809
+1177171509
+1224800384
+1850875716
+1270652315
+1281269997
+1282385238
+1289168531
+2190298455
+2110811041
+3574876475
+1465459647
+1830541740
+1561290707
+1676190254
+1850214013
+1594926190
+1900080434
+2200916137
+1989182144
+2244469967
+2350529629
+2457319201
+3399979572
+2352767175
+2401971893
+2466340040
+2513968915
+3515122282
+2551922312
+2563655235
+2571553769
+2850459238
+3296001387
+3026750354
+3141649901
+3060385837
+4980308955
+3156216897
+4750539672
+5910845075
+4250610063
+3889262578
+4190098281
+4233652111
+4594999596
+5402381550
+4754739068
+4819107215
+5316799278
+4915940808
+5029995275
+5065891227
+5115577547
+5414114473
+7318394303
+5422013007
+5877209592
+8639802250
+6087136191
+9147522028
+6216602734
+8845609659
+7045479475
+9311275585
+8079360859
+11296089538
+12732508776
+8423750392
+8828651707
+15527878319
+9573846283
+9670679876
+9735048023
+17571272420
+9945936083
+10095886502
+13194938406
+10529692020
+14932745850
+12093812326
+13262082209
+11964345783
+12303738925
+16356755060
+20792997490
+24506592133
+15124840334
+17141365977
+16503111251
+16908012566
+17252402099
+21685832601
+27145118703
+18402497990
+19244526159
+21538192066
+33498121037
+19680984106
+22833430945
+23724630426
+38042587661
+34759253050
+22494037803
+48430866887
+24058158109
+40088330591
+24268084708
+29445104902
+31481595394
+38041303317
+31627951585
+33527338324
+36184095357
+43302684268
+34160414665
+51413203411
+38925510265
+37647024149
+43949068814
+61371654575
+41219176172
+56331551982
+42175021909
+45327468748
+79486779625
+57253290853
+46762122511
+46552195912
+58218572774
+48326242817
+68370615167
+53713189610
+60926700296
+81990372131
+65155289909
+65788366250
+67687752989
+78866200321
+80949708417
+73085924930
+81100532174
+76572534414
+79822046058
+83394198081
+86546644920
+87771372084
+151081951070
+121997067967
+91879664660
+93314318423
+94878438729
+122083804777
+102039432427
+159632569850
+133535235668
+114639889906
+118868479519
+126081990205
+130943656159
+132843042898
+133476119239
+140773677919
+154186457104
+149658459344
+168452199074
+169886852837
+171165570165
+163216244139
+169940843001
+259558109444
+179651036744
+185193983083
+209518328635
+195353750850
+188192757152
+216679322333
+240721880111
+304641689404
+233508369425
+275740449549
+273616720817
+271717334078
+257025646364
+263786699057
+492834446556
+358569994989
+290432137263
+303844916448
+312874703483
+331668443213
+341052423002
+351409001291
+512439214189
+473305027692
+364845019827
+645694112406
+373386740235
+457401202444
+383546508002
+404872079485
+581524342160
+497747526475
+490534015789
+523940506688
+530642367181
+520812345421
+714439163237
+547457783627
+742116502991
+594277053711
+603306840746
+641841138554
+986746535408
+644543146696
+993250139845
+894199085656
+1015227878789
+1351591555235
+738231760062
+769717099312
+1195632962506
+1008178920231
+1232650518780
+895406095274
+1994925455639
+988281542264
+1386659649687
+1341538600808
+1044752852109
+1238820200407
+1591588383010
+1141734837338
+2547224517741
+1197583894457
+1236118192265
+1245147979300
+1286384285250
+1382774906758
+3377700362397
+1507948859374
+1632430845718
+2349717521039
+1633637855336
+1757998641576
+3857666380413
+1883687637538
+1903585015505
+2220932061044
+2037140932612
+3516118483256
+3391636496912
+2289900831409
+2733323220348
+2636341235119
+2339318731795
+2377853029603
+2433702086722
+2442731873757
+6235519410016
+3537222870841
+2531532264550
+3817916549800
+3390429487294
+3141586714710
+3140379705092
+3266068701054
+3517325492874
+4047899472985
+4435117280055
+4173588468947
+4326419511295
+5167025307070
+4598785090647
+5430280536501
+4975659966914
+4667753861012
+6607290555669
+4717171761398
+4773020818517
+5699770787776
+4811555116325
+6281966419802
+4974264138307
+5671911969642
+8820710023795
+9873359256723
+6406448406146
+15040384563793
+6407655415764
+8492985459788
+9573049228954
+8234497254272
+13468645426702
+8985143585272
+8500007980242
+10142685273984
+11006440506411
+9266538951659
+9384925622410
+9440774679529
+14906456386388
+9490192579915
+9528726877723
+9584575934842
+10674034926083
+9785819254632
+15980704644718
+12078360375788
+12814103821910
+19113302812565
+14640945660418
+16550340689748
+14642152670036
+14900640875552
+19928504528616
+16734505234514
+17219640839544
+17766546931901
+31192493359784
+27362326113528
+18651464574069
+24172995338047
+18707313631188
+24435183264111
+27408540160597
+19276011834547
+21607087253511
+28180191451792
+49787278705303
+24427971924668
+27552366186533
+30621650305136
+54794645643183
+55627676623895
+37695051460517
+31450981565300
+29542793545588
+38826728093055
+31635146110066
+85987139002967
+43079436498737
+41392636177591
+49159453440044
+37358778205257
+37927476408616
+103954099083227
+37983325465735
+40314400884699
+40883099088058
+67722941045296
+70936051189835
+46035059178179
+51980338111201
+68993924315323
+68809759770557
+57095159732121
+60164443850724
+60993775110888
+69330197570583
+61177939655654
+63086127675366
+66901571750845
+77670205288245
+69562622518682
+112642059017419
+78751414382848
+97978258820179
+75286254613873
+75342103670992
+75910801874351
+78297726350434
+81197499972757
\ No newline at end of file
diff --git a/day9/day9Test.txt b/day9/day9Test.txt
new file mode 100644
index 0000000..cda4246
--- /dev/null
+++ b/day9/day9Test.txt
@@ -0,0 +1,20 @@
+35
+20
+15
+25
+47
+40
+62
+55
+65
+95
+102
+117
+150
+182
+127
+219
+299
+277
+309
+576
\ No newline at end of file
diff --git a/helper/readFile.go b/helper/helper.go
similarity index 59%
rename from helper/readFile.go
rename to helper/helper.go
index d94e86e..35ce7a4 100644
--- a/helper/readFile.go
+++ b/helper/helper.go
@@ -1,7 +1,9 @@
package helper
import (
+ "errors"
"io/ioutil"
+ "sort"
"strconv"
"strings"
)
@@ -34,3 +36,23 @@ func MapToNumber(strings []string) ([]int, error) {
}
return numbers, nil
}
+
+func FindAddendsForSum (possibleAddends []int, sum int) (int, int, error) {
+ var array = make([]int,len(possibleAddends))
+ copy(array,possibleAddends)
+ sort.Ints(array)
+ p1 := 0
+ p2 := len(array) - 1
+ for p1 < p2 {
+ if array[p1]+array[p2] < sum {
+ p1++
+ }
+ if array[p1]+array[p2] > sum {
+ p2--
+ }
+ if array[p1]+array[p2] == sum {
+ return array[p1] , array[p2], nil
+ }
+ }
+ return 0,0,errors.New("No fitting Addends found")
+}