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 @@ - - + + + + + @@ -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") +}