diff --git a/2022/go/01/answer.go b/2022/go/01/answer.go new file mode 100644 index 0000000..8769e18 --- /dev/null +++ b/2022/go/01/answer.go @@ -0,0 +1,93 @@ +package main + +import ( + "bufio" + "fmt" + "os" + "sort" + "strconv" + + log "github.com/sirupsen/logrus" +) + +type Input struct { + calories [][]int +} + +func input(filename string) *Input { + file, err := os.Open(filename) + check(err, fmt.Sprintf("Couldn't open %q", filename)) + defer file.Close() + + input := &Input{} + input.calories = append(input.calories, make([]int, 0)) + + scanner := bufio.NewScanner(file) + + scanner.Split(bufio.ScanLines) + + for scanner.Scan() { + var line string = scanner.Text() + if len(line) == 0 { + input.calories = append(input.calories, make([]int, 0)) + } else { + cal, err := strconv.Atoi(line) + check(err, fmt.Sprintf("Couldn't convert %q to int", line)) + input.calories[len(input.calories)-1] = append(input.calories[len(input.calories)-1], cal) + } + } + + return input +} + +func map_slice[S, T any](ss []S, mapper func(S) T) []T { + var ret []T = make([]T, 0, len(ss)) + for _, s := range ss { + ret = append(ret, mapper(s)) + } + return ret +} + +func max(arr []int) int { + var max int = 0 + for _, e := range arr { + if e > max { + max = e + } + } + return max +} + +func sum(arr []int) int { + res := 0 + for _, e := range arr { + res += e + } + return res +} + +func result(inp *Input, part int8) string { + var res string + if part == 1 { + var max int = max( + map_slice(inp.calories, func(s []int) int { return sum(s) }), + ) + res = fmt.Sprint(max) + } else { + sums := map_slice(inp.calories, func(s []int) int { return sum(s) }) + sort.Ints(sums) + res = fmt.Sprint(sum(sums[len(sums)-3:])) + } + return res +} + +func check(e error, message string) { + if e != nil { + log.Error(message) + panic(e) + } +} + +func main() { + fmt.Println(result(input("sample1"), 1)) +} diff --git a/2022/go/01/answer_test.go b/2022/go/01/answer_test.go new file mode 100644 index 0000000..ed64029 --- /dev/null +++ b/2022/go/01/answer_test.go @@ -0,0 +1,44 @@ +package main + +import ( + "reflect" + "testing" +) + +func TestInputSample1(t *testing.T) { + filename := "sample1" + expected := &Input{ + calories: [][]int{ + {1000, 2000, 3000}, + {4000}, + {5000, 6000}, + {7000, 8000, 9000}, + {10000}, + }, + } + var got *Input = input(filename) + + if !reflect.DeepEqual(*got, *expected) { + t.Errorf("input(%q) = %v, want %v", filename, got, expected) + } +} + +func TestResult(t *testing.T) { + tests := []struct { + part int8 + filename string + expected string + }{ + {1, "sample1", "24000"}, + {1, "input", "71924"}, + {2, "sample1", "45000"}, + {2, "input", "210406"}, + } + for _, test := range tests { + var got string = result(input(test.filename), test.part) + + if got != test.expected { + t.Errorf("result = %q, want %q", got, test.expected) + } + } +} diff --git a/2022/go/01/go.mod b/2022/go/01/go.mod new file mode 100644 index 0000000..f383b96 --- /dev/null +++ b/2022/go/01/go.mod @@ -0,0 +1,7 @@ +module aoc/1 + +go 1.20 + +require github.com/sirupsen/logrus v1.9.3 + +require golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8 // indirect diff --git a/2022/go/01/go.sum b/2022/go/01/go.sum new file mode 100644 index 0000000..21f9bfb --- /dev/null +++ b/2022/go/01/go.sum @@ -0,0 +1,15 @@ +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= +github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8 h1:0A+M6Uqn+Eje4kHMK80dtF3JCXC4ykBgQG4Fe06QRhQ= +golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/2022/go/01/input b/2022/go/01/input new file mode 100644 index 0000000..f42822f --- /dev/null +++ b/2022/go/01/input @@ -0,0 +1,2251 @@ +18313 +2404 +10479 + +7011 +10279 +1496 +10342 +8918 +3162 +4525 +4368 + +17242 + +10920 +14072 +9754 +4435 +9396 + +5915 +2602 +4032 +3303 +2685 +1856 +1334 +4865 +6385 +1733 +5328 + +8899 +5482 +3195 +7837 +8986 +13794 + +25121 +22211 +21257 + +6360 +4007 +5124 +2266 +6943 +6966 +3887 +3427 +1255 +5266 +6119 +2841 + +6167 +3883 +2776 +5894 +2013 +6930 +6613 +4637 +5259 +2347 +3550 +5639 +5117 + +4530 +5961 +5956 +2503 +5060 +4770 +5240 +4123 +4089 +6794 +3333 +5244 +4415 + +1733 +1209 +4458 +1223 +3859 +7728 +9793 +8350 + +2278 +3241 +4668 +1836 +3669 +2996 +1772 +5016 +6294 +6367 +1080 +5964 +5547 + +4793 +13744 +9478 +7979 +1490 +12490 + +6770 +7282 +2059 +5242 +13237 +9365 + +2230 +6498 +1352 +3846 +3863 +6205 +5803 +2646 +4188 +4431 +6380 +1526 +2620 +4438 + +24331 +23578 + +4199 +5126 +5725 +1123 +2415 +5427 +5789 +4856 +2610 +4833 +3398 +4239 +1432 +5122 + +5013 +4939 +11760 +8419 +5706 +3765 +10182 + +11795 +9688 +1712 +2091 +9651 +13022 + +10393 +11862 +1672 +5431 +6812 +1866 +5599 + +2036 +6561 +4097 +3467 +4739 +7656 +3252 +4322 +5068 +2345 +4155 + +3090 +1228 +1270 +8407 +8118 +4996 +7157 +3944 +6230 +2728 + +5669 +2113 +3076 +1290 +7673 +1022 +5805 +5128 +7912 +7862 +4955 + +20640 + +4131 +4874 +5220 +9947 +9739 +1662 +9418 +9684 + +4875 +3073 +1151 +11911 +10310 +10793 +10307 + +6979 +4265 +8322 +3518 +1855 +4912 +5481 +7124 +4664 + +19975 +16112 +19450 +7231 + +3909 +4743 +3794 +4448 +3200 +3447 +3331 +7011 +3345 +3935 +6750 + +3900 +14850 +4890 +9625 +4832 + +23682 +1375 + +7463 +8112 +10624 +1105 +6625 +5157 +5839 +1019 + +19089 +36719 + +5372 +7085 +8536 +8717 +6255 +5961 +3198 +7729 +3055 + +4406 +2263 +6686 +1458 +2377 +2740 +1284 +3045 +7121 +3070 + +19161 +10515 +1027 + +7782 +1703 +1864 +3611 +1039 +2394 +3472 +6964 +5824 +8011 +3341 + +56690 + +5107 +1876 +4973 +5485 +4325 +6079 +3187 +3565 +2875 +7137 +3887 +6763 + +2633 +2151 +1105 +2400 +5338 +3382 +1330 +3945 +6556 +1670 +5526 +4281 +2168 + +5382 +2347 +4225 +1905 +4672 +6706 +5747 +5808 +1159 +4878 +5923 + +11148 +8722 +3896 +15697 +3499 + +46749 + +13315 +20966 + +1625 +6338 +7882 +1505 +4226 +9948 +6438 +6012 + +1003 +10033 +5066 +7756 +10151 +10719 +5299 +5629 + +4466 +6290 +7220 +3657 +8261 +7348 +8525 +4531 +4892 +7833 + +24723 +7817 + +4234 +4428 +5810 +2091 +4301 +1378 +2342 +3872 +1167 +2073 +6867 +7026 + +7005 +10018 +3954 +4497 +4951 +1283 +5383 + +4152 +4390 +8731 +8521 +5415 +1029 +8200 +3769 + +7224 +12281 +8337 +8969 +13938 +9651 + +10923 +14358 +8896 +8401 +7073 + +3934 +4424 +4538 +4371 +2335 +6363 +1264 +4331 +5107 +2270 +3109 +2547 +2304 +5911 + +4600 +5674 +2620 +1846 +3804 +2387 +4094 +3648 +4241 +5593 +2974 +2101 +1621 +3939 + +7429 +9425 +9653 +5835 + +13414 +4517 +15783 +3867 + +2287 +1019 +11604 +11910 +2591 +2468 +10543 + +13050 +1396 +13959 +6883 + +6303 +2889 +4047 +3954 +2245 +6672 +4574 +5731 +5879 +2837 +5859 +4812 +6785 + +10290 +10131 +5605 +3321 +2122 +6331 +9107 +7937 + +1786 +1362 +7409 +2093 +3901 +1306 +2089 +1558 +4163 +6118 +6270 +1929 + +4224 +3864 +3922 +3609 +2496 +2246 +5397 +1535 +5499 +4932 +3684 +1348 +3437 +3665 + +2973 +4506 +3971 +2511 +4563 +3168 +2687 +6249 +2593 +6470 +4100 +6309 +1316 +4362 + +14966 +2940 +11485 + +6675 +16873 +5695 +14706 + +3953 + +5620 +1678 +3630 +5015 +3277 +4957 +5288 +5555 +2860 +1750 +2795 +6170 +6308 + +3671 +1354 +4018 +4730 +4070 +1685 +4478 +1918 +5532 +3970 +3751 +4890 +4277 +2737 +5535 + +14799 +8129 + +5254 +2065 +1282 +2407 +5174 +4549 +4326 +1201 +3372 +3906 +6234 +4937 +4234 +2149 + +5194 +2519 +3555 +6929 +4367 +4547 + +1024 +37240 + +3693 +6526 +2679 +5434 +7924 +2974 +1754 +4287 +4744 +4187 +1348 + +6598 +5963 +6035 +5404 +3270 +1250 +5947 +3037 +3927 +3702 +5255 +1640 +6476 + +4499 +5207 +1991 +4613 +3088 +5024 +4737 +5160 +2450 +3582 +2605 +2573 +1100 +3732 + +1633 +5663 +2415 +4039 +4957 +2697 +5428 +5050 +3979 +3428 +4563 +3770 +3635 +4012 +4773 + +7377 +6189 +10812 +6905 +11196 +5394 +10135 + +10008 +2868 +2630 +8542 +8897 +2718 +5831 +4460 + +1303 +4771 +1574 +2960 +5070 +1596 +5530 +4177 +4210 +6465 +4179 +1000 +4460 +6173 + +6654 +1378 +2148 +8704 +6875 +4511 +7540 +6078 +5585 +4030 + +4333 +5953 +5095 +4782 +3651 +4673 +3267 +6389 +2358 +2120 +3684 +3034 +3420 +1322 + +8922 +9535 +16357 +16552 + +1378 +1039 +1262 +2067 +6491 +2776 +1352 +4914 +5832 +1369 +6105 +1384 +2474 +1704 + +6256 +2538 +4701 +4090 +4077 +5333 +2777 +4082 +4640 +2542 +6356 +3065 +4855 +2535 + +6510 +3709 +4197 +4344 +5906 +6852 +7398 +3578 +3308 +1239 +3817 +5676 + +5441 +3368 +1752 +2629 +1923 +4711 +1667 +3701 +1350 +4764 +6439 +2341 +4052 + +6407 +5327 +1229 +4834 +6008 +1302 +5595 +5260 +3680 +3220 +3154 +3353 +1942 +1740 + +2356 +1908 +3058 +4668 +3641 +1663 +4199 +2190 +6067 +3923 +3288 +1978 +6110 +5330 + +7020 +2487 +6521 +1084 +6582 +1784 +7861 +2759 +8077 +2961 + +68314 + +2160 +15170 +2267 +3867 +6851 + +8543 +4118 +22260 + +5313 +3525 +1483 +3613 +5798 +1472 +4020 +5607 +4391 +2502 +5512 +5535 +3755 +5590 +3668 + +25502 +7623 +15508 + +2138 +1227 +11355 +1288 +7062 +5391 +3994 + +7738 +3667 +5000 +1691 +7322 +8054 +4540 +2353 +6870 +8475 + +4289 +6415 +1251 +4933 +7224 +2608 +2320 +4432 +4637 +1395 +6575 +5581 + +6841 +1161 +5617 +12505 +6274 +9171 + +13548 +20154 +20682 + +2843 +7363 +5967 +15256 +16032 + +7940 +6992 +3940 +3100 +1334 +1389 +5182 +6666 +4030 +6116 +3036 + +35234 +19273 + +7268 +10689 + +1846 +4211 +1504 +3780 +3789 +2017 +6279 +5001 +2341 +6350 +5169 +1966 +2640 +5574 + +2125 +8432 +8339 +8130 +3506 +6115 +4684 +9548 +3300 + +6848 +1274 +6463 +12007 +10719 +10590 +5616 + +4471 +1304 +1635 +5960 +3702 +1747 +3658 +2446 +4724 +5675 +1739 +3170 +3556 + +9134 +12963 +6987 + +5728 +7877 +6499 +5909 +1119 +3090 +5033 +4884 +3151 + +10675 +8053 +9237 +14206 +11710 + +49154 + +5999 +3861 +1836 +3451 +3673 +5193 +2680 +6068 +1743 +5600 +4793 +6211 +2967 +1021 + +24720 + +8749 +11674 +4039 +5341 +14256 + +4553 +3893 +1528 +5490 +2417 +2392 +4023 +2430 +4649 +3163 +3673 +1378 +1957 +1055 + +10777 +4742 +16291 +16430 +12295 + +6502 +6052 +2944 +8166 +7567 +3580 +5957 +4691 +1623 +3269 + +1013 +5809 +16958 +4994 + +36633 + +8535 +13662 +24448 + +6651 +7911 + +19793 +2436 + +4671 +4420 +5322 +1215 +4952 +1193 +2387 +2799 +2748 +1343 +4123 +1715 +2978 +2148 +6050 + +2036 +4670 +5444 +4584 +4220 +6061 +2834 +2319 +1370 +4572 +4249 +4144 +3236 +3812 +3487 + +55521 + +3845 +1473 +6794 +4597 +5566 +2735 +2660 +6402 +2515 +3439 + +3772 +12809 +5790 +10817 +9729 + +1788 +2476 +4333 +2940 +7232 +3582 +8604 +3742 +7644 +4823 + +6128 +6737 +5712 +4168 +4465 +2183 +1217 +2257 +6326 +5966 +5699 +2985 +2290 + +5190 +4155 +10754 +9830 +4507 +2165 +7208 +4409 + +4256 +4158 +1941 +3124 +5852 +3376 +6411 +5508 +5072 +2374 +4189 +4032 +4957 +2050 + +2737 +6772 +4468 +2072 +1214 +6231 +7077 +6100 +6990 +5676 + +7474 +4524 +8778 +7129 +8151 +7975 +7277 +8672 +8097 +3847 + +29172 +7125 + +50466 + +14169 +22037 + +4483 +1801 +4863 +1920 +2776 +1407 +3998 +1142 +2664 +3920 +5708 +5481 +5701 +5159 +3654 + +1960 +4419 +5933 +4941 +4511 +1120 +5179 +3447 +5285 +3675 +1333 +1418 +4595 +4140 +2353 + +1995 +5588 +1443 +5681 +3439 +6178 +5795 +5144 +2788 +6232 +2620 +4665 +5624 + +37076 +7362 + +3885 +8268 +10947 +9084 +3016 +10383 +9594 + +16223 +16281 +5352 +11764 +10192 + +5248 +3151 +7341 +8125 +10671 +13510 + +1759 +7635 +7021 +3620 +7640 +4967 +3662 +3840 +7613 +3948 +1820 + +4010 +3936 +7375 +8060 +12396 +8236 + +5033 +2739 +4296 +5564 +6502 +3501 +5637 +5826 +5862 +5579 +6416 +2277 +2471 + +4325 +2621 +1600 +4290 +15494 + +6834 +15459 +10418 +12560 +6382 + +8598 +1089 +11386 +9538 +6933 +3943 + +14268 +7172 +7680 +15936 + +5695 + +69893 + +7293 +4968 +7862 +3210 +1924 +4742 +3519 +1095 +5922 +6335 +2405 + +4233 +3819 +7282 +10018 +3820 +5380 +9377 +8889 + +13183 +9964 +4473 +12469 +9862 +6567 + +4903 +1198 +5238 +1582 +1820 +6080 +10178 + +4554 +6315 +2818 +5956 +2491 +5291 +5056 +3699 +2843 +1243 +5430 +2175 + +31126 + +5392 +1590 +3738 +2507 +2817 +6963 +6140 +4606 +2814 +7044 +1282 + +12230 +1430 +4283 +11385 +2557 +6868 + +3871 +2558 +1957 +4058 +1935 +5738 +1513 +5744 +4130 +3321 +3760 +4155 +1063 +3694 + +67474 + +2215 +8962 +5442 +7390 +6223 +3648 +2390 +5464 + +5125 +3842 +2131 +3414 +6085 +3353 +3660 +1593 +4395 +2664 +4987 +2352 +5693 +1391 +1661 + +6017 +5013 +5243 +3734 +3116 +1541 +6456 +2806 +6143 +1344 +5977 +5422 +2326 +2164 + +33377 + +5950 +5168 +1348 +3144 +5760 +6974 +8537 +6664 +1248 + +9040 +4510 +5642 +8547 +9407 +5058 +6158 +7726 +6731 + +4182 +5246 +2686 +4196 +3809 +3253 +3260 +3162 +2703 +6373 +6136 +2904 +6356 +5038 + +3368 +11040 +5793 +13747 +10478 +5166 + +11697 +10072 +8434 +5732 + +5244 +6374 +1877 +2902 +4263 +4835 +2283 +2086 +6044 +6343 +6232 +2849 +3694 +6392 + +13062 +12405 +12869 +16366 +1652 + +8036 +1720 +7759 +13661 +1370 +3505 + +5885 +1708 +10440 +7438 +11480 +4904 +8387 + +4788 +10326 +6143 +11063 +9649 +9384 + +5849 +1935 +7411 +4694 +4435 +1321 +5301 +2096 +2422 +5484 +6560 +3070 + +5008 +5405 +9444 +6355 +13150 +12686 + +1618 +5831 +1957 +1288 +1382 +2946 +1926 +1828 +1646 +4823 +3637 +1309 +5727 +4450 + +66234 + +4016 +4075 +4551 +5869 +2866 +2461 +1055 +4712 +7220 +1973 +4650 + +2387 +1102 +4558 +2290 +1969 +3624 +2383 +4059 +4877 +3439 +6891 +3819 +5824 + +3440 +11447 +5522 +16700 + +8373 +1356 +7249 +8484 +6767 +7990 +8778 +2235 +5995 +8511 + +5466 +6088 +2583 +5235 +6093 +3089 +1570 +6112 +3668 +2187 +5582 +1380 +4800 +5529 +2987 + +12323 +4775 +11105 +3805 +7671 +6737 + +3197 +1256 +4539 +6383 +1476 +2134 +6785 +7337 +1229 +4965 +5055 + +13128 +8149 +4426 +8087 +2873 + +1695 +8214 +7147 +7216 +1070 +2801 +5033 +8103 +7750 +5749 + +4082 +1630 +1958 +6113 +4486 +2111 +1486 +6451 +5630 +5682 +4558 + +10475 +30751 + +5397 +5067 +1178 +2106 +5557 +4847 +1661 +3469 +4908 +2590 +4686 +2118 +4495 +2994 + +12590 +12902 +8742 +15433 +2777 + +7451 +8722 +7302 +2269 +9592 +6162 + +1907 +6741 +4442 +6526 +8289 +7479 +9481 +1642 +4982 + +2001 +12803 +7255 +13545 +10713 + +14621 +25826 +20771 + +1055 +8331 +7422 +8400 +2208 +6688 +8425 +6883 +4192 +4725 + +9970 +10127 +2777 +3933 +9274 +3791 +9906 + +2779 +1118 +2823 +1563 +9917 +6065 +1863 +1885 + +5053 +1922 +5356 +8266 +7335 +4260 +8730 +7307 +3140 + +4340 +1080 +2120 +5498 +6769 +6170 +2944 +4677 +1155 +4676 +2420 +4945 +5941 + +14838 +3844 +19712 +16283 + +1906 +3672 +4274 +6550 +6072 +5299 +4493 +3348 +2804 +3747 +3208 +5359 + +59156 + +6128 +5959 +12262 +12166 +4945 +9635 + +8095 +1757 +13656 +7215 +2545 +6298 + +7873 +6515 +6407 +4182 +4911 +3966 +1942 +7281 +5082 +7446 +5545 + +3876 +5618 +4226 +4445 +3915 +1250 +5469 +3872 +5157 +5539 +2894 +1357 +1419 +4214 +3009 + +3364 +6618 +1432 +7583 +6192 +2529 +2076 +6231 +7333 + +5028 +2989 +3801 +1895 +2367 +5747 +2724 +1304 +3085 +2524 +1295 +1022 +2613 +4239 +4413 + +3418 +23885 + +3895 +3302 +1097 +3150 +1379 +1815 +1484 +2074 +2616 +3395 +6100 +5488 +1006 +3046 + +1951 +8238 +6010 +3652 +6640 +7990 +3900 +8191 + +6978 +3025 +1966 +7152 +5963 +7326 +1866 +2507 +4764 +1434 +3194 +3326 + +3081 +6828 +6495 +3257 +4236 +4938 +7090 +2826 +6614 +1341 +7098 +6771 + +18885 +3826 +13103 +1193 + +16653 +13676 +19294 +13878 + +7460 +4327 +7335 +4898 +6259 +7941 +5940 +5603 +3095 +5674 +2886 + +8680 +4662 +8044 +8210 +5886 +9057 +7917 +3258 +5995 + +2800 + +31568 + +5423 +33845 + +8988 +13780 +9059 +14650 +9824 + +10327 +13747 +10937 +4594 +6882 + +2696 +2860 +1070 +1662 +6098 +2369 +2821 +3603 +3593 +5347 +4871 +4967 +2211 +3330 +5226 + +8520 +1896 +1906 +5172 +6845 +1565 +6366 +5509 +5068 + +4047 +4661 +2384 +1904 +4705 +5402 +6650 +6120 +4834 +5897 +6492 +6200 +5868 + +4130 +1530 +9654 +9306 +8529 +2508 +8918 +4040 +3717 + +3245 +4195 +11698 +10053 +6635 +4749 + +12283 +11894 +8168 + +6418 +7151 +4827 +2391 +8643 +2315 +8664 +3547 +6900 +4418 + +65083 + +5164 +1748 +8739 +4945 +2604 +5493 +5310 +3763 +6011 +4091 + +4342 +2566 +6021 +4067 +1385 +2486 +4444 +1713 +3380 +4253 +4720 +1602 +4814 +3234 +1739 + +13603 +22634 + +7845 + +4139 +8832 +7441 +1967 +6707 +7981 +3416 +10633 + +4808 +9206 +6975 +4257 +6024 +5176 + +10639 +9329 +5010 +7215 +4522 +8168 +9936 +9792 + +4326 +4601 +6508 +2501 +3866 +3060 +2188 +6429 +1014 +1383 +6937 +5313 +4392 + +8977 +2420 +1013 +4267 +9689 +2955 +5583 +2947 +5570 + +5067 +1139 +4531 +3001 +7698 +2028 +8025 +1424 +6837 +1357 +2186 + +5433 +19739 +5321 + +5019 +4714 +2688 +5290 +1593 +1320 +1703 +2978 +1476 +3034 +3538 +2825 +5819 +5547 + +6441 +1104 +3128 +7940 +5977 +8434 +4493 +2139 +1617 +4933 + +3219 +3273 +12383 +6076 +11222 +5523 + +8875 +1005 +4958 +3234 +3196 +5527 +9875 +7306 + +1591 +6031 +2124 +1224 +7008 +2559 +4540 +7670 + +5927 +4323 +5630 +1067 +5482 +1939 +5428 +3416 +3494 +2469 +4287 +5538 +1190 +4234 +1734 + +10808 +15234 +14069 +10497 +7697 diff --git a/2022/go/01/sample1 b/2022/go/01/sample1 new file mode 100644 index 0000000..444e241 --- /dev/null +++ b/2022/go/01/sample1 @@ -0,0 +1,14 @@ +1000 +2000 +3000 + +4000 + +5000 +6000 + +7000 +8000 +9000 + +10000 \ No newline at end of file diff --git a/2022/go/02/answer.go b/2022/go/02/answer.go new file mode 100644 index 0000000..0c8d49b --- /dev/null +++ b/2022/go/02/answer.go @@ -0,0 +1,91 @@ +package main + +import ( + "bufio" + "fmt" + "log" + "os" + "strings" +) + +const ( + ROCK int = iota + PAPER + SCISSOR +) + +const ( + LOSS int = 3 * iota + DRAW + WIN +) + +type Turn struct { + them int + me int +} +type Input struct { + turns []Turn +} + +var str_to_RPS = map[string]int{ + "A": ROCK, + "B": PAPER, + "C": SCISSOR, + + "X": ROCK, + "Y": PAPER, + "Z": SCISSOR, +} + +func input(filename string) *Input { + file, err := os.Open(filename) + check(err) + defer file.Close() + + input := &Input{ + turns: []Turn{}, + } + + scanner := bufio.NewScanner(file) + + scanner.Split(bufio.ScanLines) + + for scanner.Scan() { + line := scanner.Text() + hands := strings.Split(line, " ") + input.turns = append(input.turns, Turn{str_to_RPS[hands[0]], str_to_RPS[hands[1]]}) + } + + return input +} + +func result(inp *Input, part int8) string { + var res string + score := 0 + for _, turn := range inp.turns { + score += turn.me + 1 + if turn.me == (turn.them+1)%3 { + score += WIN + } else if turn.me == turn.them { + score += DRAW + } + } + res = fmt.Sprint(score) + + return res +} + +func check(e error) { + if e != nil { + panic(e) + } +} + +func main() { + result := result(input("sample1"), 1) + log.SetFlags(log.Lshortfile) + + log.Println(result) + fmt.Println(result) +} diff --git a/2022/go/02/answer_test.go b/2022/go/02/answer_test.go new file mode 100644 index 0000000..9a294d2 --- /dev/null +++ b/2022/go/02/answer_test.go @@ -0,0 +1,44 @@ +package main + +import ( + "reflect" + "testing" +) + +func TestInputSample1(t *testing.T) { + filename := "sample1" + expected := &Input{ + turns: []Turn{ + {ROCK, PAPER}, + {PAPER, ROCK}, + {SCISSOR, SCISSOR}, + }, + } + var got *Input = input(filename) + + if !reflect.DeepEqual(expected, got) { + t.Errorf("input(%q) = %v, want %v", filename, got, expected) + } +} + +func TestResult(t *testing.T) { + tests := []struct { + part int8 + filename string + expected string + }{ + {1, "sample1", "15"}, + {1, "input", "12855"}, + + // {2, "sample1", ""}, + // {2, "input", ""}, + } + + for _, test := range tests { + var got string = result(input(test.filename), test.part) + + if got != test.expected { + t.Errorf("result = %q, want %q", got, test.expected) + } + } +} diff --git a/2022/go/02/go.mod b/2022/go/02/go.mod new file mode 100644 index 0000000..3fe35ea --- /dev/null +++ b/2022/go/02/go.mod @@ -0,0 +1,3 @@ +module aoc/2 + +go 1.20 diff --git a/2022/go/02/go.sum b/2022/go/02/go.sum new file mode 100644 index 0000000..e69de29 diff --git a/2022/go/02/input b/2022/go/02/input new file mode 100644 index 0000000..e49a6c4 --- /dev/null +++ b/2022/go/02/input @@ -0,0 +1,2500 @@ +A Z +A Z +C Y +A X +A X +A Z +C X +A X +C Y +A Z +B Y +B Y +C X +C Y +C X +B Y +A Y +C Y +B Y +B Z +B Y +C X +A Z +C Y +B Y +B Y +A Z +B Y +B Y +B Y +B Z +B Y +A Z +B Y +C Y +B Y +B Z +C X +B Z +A X +B Y +B Z +C Y +A Z +C Y +A Z +B Y +C Y +A Z +A Z +B Y +C Y +C X +A Z +B Z +A Z +B Y +C X +B Y +B Y +B Y +A Y +B Z +C Y +C X +A Z +B Y +B Y +B X +A Z +C X +B Y +B Y +A Z +A Z +A X +A X +B Y +C X +A X +A Z +A Z +B Y +C Y +B Z +A X +B Z +A Z +B Y +A Z +C Y +A Z +A X +B Y +C Y +B Y +A X +B Z +C Y +B Y +B Y +A Z +A X +A X +B Y +C Y +B X +B Z +C X +B Y +A Y +B Y +B Y +B Y +A X +C Y +A Z +C Y +C Y +B Z +B Y +A Z +A Z +A Z +B Y +C Y +B Z +C X +C Y +B Z +A X +A Z +C Y +B Y +C Y +C Y +C Y +B Y +B X +B Y +B Y +C Y +A X +B Z +B X +C X +B X +C Y +B Z +B Y +A X +C Y +C Y +C X +B Z +B Y +A Y +B Z +A Z +B Y +B Y +B Z +B Z +C Y +A Z +A X +A X +C Y +B Y +A Z +B Z +A X +A Z +B Z +C Y +C Z +A X +A Y +B Y +C Y +B Y +C Y +B Z +B Y +A Z +C Y +B Z +B Y +A Z +A Y +B Y +B Y +C Y +A Z +C Y +B Y +B Y +A X +A Z +A Z +B Y +B Y +B Z +C Y +C X +B Z +A Y +B Z +A X +C X +A Y +B Z +B Z +A X +C X +C X +A Z +C Y +A X +A X +C X +A X +B Z +C Z +B Z +B Y +B Y +A Z +A Z +B Y +A Z +C Y +C X +B Y +A X +A X +B Z +C Y +C Y +A X +B Z +A X +C X +C X +B Z +C X +B Z +A X +A Y +A X +A Z +A X +B Y +C Y +A X +C Y +A Z +B Z +A Z +C Y +A X +A Z +B Y +A Z +B Z +B Z +A Z +B Z +A X +B Y +B Z +C X +B Y +B Y +B Y +B Y +A X +B Z +B Z +A Z +A Z +C Y +B Y +C X +A X +B Y +B Y +C X +B Y +A X +C Y +A Z +B Y +A Y +B Z +B Y +A Z +A X +B Z +C Y +A Z +C Y +C X +B Y +B Z +C X +A Y +B Z +A Y +B Z +B Z +B Y +B Z +C X +B Y +A X +B Z +A Z +B Y +A Z +C Y +C Y +C X +C X +A X +C X +A X +A X +B Z +B Y +B Y +B Y +B Y +C X +C X +A Z +A Z +C X +C X +C Y +C Y +C Y +B Y +A Z +C Y +B Z +B Z +B Y +C X +C X +C Y +C Y +C X +B Z +B Z +B Y +C Y +B Y +A Z +C Y +A X +B Y +C Y +C Y +C Y +B Y +A Z +B Y +A X +B Z +C X +A Z +C X +A Z +B Z +C Y +C Y +C Y +C X +B Z +C X +B Y +B Z +C X +B X +A Z +B Z +B Y +C Y +B Z +C Y +A X +B Z +C Y +C Y +B Z +B Y +C Y +B Z +C Y +A Z +C X +C X +C Y +A Z +C Z +C Y +B Y +C Y +B Y +B Y +B Z +C X +C X +B Z +B Z +B Z +A Z +B Y +B Y +A X +B Y +C Y +B Y +C X +C X +B Y +B Y +A Y +B Z +B Y +B Y +C Y +A Z +C X +A Y +B Y +B Z +B Y +A Y +C Y +A Y +A Z +B Y +A Z +C Y +C Y +B Y +A Z +B Y +B Y +A Z +B Z +B Y +C X +C Y +B Z +B Y +B Y +A Z +C Z +A Z +A X +C X +B Z +B Z +C X +C Y +B Y +B X +A X +C Y +B Z +B Y +C X +B Y +A Z +A Z +A X +C Y +B Z +B Y +C X +C X +B Y +A Z +C Z +B Y +A Z +C Y +B Y +C X +A Z +A Z +A X +C X +A X +C X +C X +A Z +C X +B Y +A Z +B Y +B Y +C Y +C X +A Z +B Z +B Y +B Y +A Y +A Z +B Y +A Z +B Z +B Y +C Y +A Z +B Y +B Y +B Y +C Y +C X +A X +A Z +B Z +B Y +C Y +B Z +C X +B Y +C X +A Z +B Y +B X +B Y +A Y +A X +A X +C X +C X +B Y +B X +C Y +A Z +B Z +C Y +C Y +B Y +A Z +C X +A Z +C Y +B Z +B X +C X +B X +C X +B Y +C Y +C Y +B Z +B Y +B Z +B Z +A Z +B Y +A Y +B Z +C X +C Y +C X +A Z +B Z +C Y +B Y +B Z +C X +B Y +A Y +A X +A X +C Y +B X +C X +B Z +A Z +A Y +B Z +C X +C X +B Y +A X +B Z +C Y +B X +B Z +C Y +B Y +C Y +B Z +B Y +B Z +B Y +C X +B Y +C X +B Z +B Z +C X +B Z +A X +B X +B Y +A X +B Z +C X +B Z +B Y +B Y +C X +A Y +B Z +B Z +B Y +B Y +B Z +C Y +B Z +C Y +C X +A Z +C X +A X +C Y +B Y +C X +A Z +B Y +A Z +A Z +B X +C Y +B Z +C Y +B Y +B Z +A X +B Z +A X +C X +B Z +B Y +C X +C Y +C Y +B X +C X +C X +B Z +C Y +B Z +B Y +B Z +C Y +B Y +C Y +C X +B Y +B Y +B Z +A Z +C X +A Z +B Y +B Z +A Z +C Y +A Z +B Y +A Z +A Z +C Y +A Y +B Y +A Y +C X +B Y +C X +B Z +C Y +A Z +C X +C X +B Z +C Z +C Z +B Y +B Y +C Y +C Y +A Z +C Y +C Y +C Y +A Z +B Z +C Y +B Y +C Y +C X +C X +B X +B Y +C Y +A Y +B Y +B Z +B Y +A Y +B Y +B X +C X +C Z +C Y +C Y +C Y +B Z +B X +C Y +B Z +C X +C Y +A Z +A Y +B Y +C X +A Z +B Y +C Y +B Z +A Z +A Z +B Y +A Z +C Y +A X +C Y +B Z +B Z +B Z +B Y +B Y +A Z +A Z +B Y +C X +A Z +C Y +B Y +A Z +C Y +A Z +B Z +B Z +A Y +B Y +B Y +B Z +C Z +B Y +B X +B Y +C X +B Z +C Y +B Z +A Y +B Z +A Z +A X +A Z +C X +C X +B Y +C X +C Y +A Z +B Z +B Y +A Z +B Z +B Z +B Z +C Y +B Y +A X +C Y +C Y +C X +A X +C Y +B Y +C X +B Z +A Y +B X +B Y +A Z +B Y +B Y +B Y +B Z +C X +B Z +B Z +C X +B Y +A Y +B Y +C Y +A Z +C Z +B Y +B Z +B Z +C Y +A Z +C Y +C X +C Y +B Y +A X +A X +B Z +C Y +B Z +B Y +A Y +C X +A Z +B Z +C Y +C Z +C X +B Y +C X +A Y +A Y +B Z +C X +B X +C X +B Y +B Z +B Z +B Y +C Y +B Y +B Y +A Z +B Z +B Y +C X +B Z +B Y +B Y +C Y +C Z +C X +B Y +A X +C Y +C X +B Z +C Y +A X +B Y +A Y +B Y +C X +C Y +C X +A X +B Z +C X +B Y +A Z +C X +B Y +A Z +B Y +B Y +B Y +A Z +A X +C X +C Y +C Y +B Y +B Y +B Z +A Y +C X +C X +B Y +B Y +B Z +A X +C X +C X +B X +A X +B Z +B Y +C X +A X +B Y +C Y +A X +B Y +C X +B Z +C Z +B X +C Y +B Y +C Y +A Z +C Y +B Z +C X +B Z +C X +C Y +C X +C Y +C Z +C X +C X +B Y +C Y +C X +C X +B Z +B Z +A X +C Y +C Z +B Y +C Z +C Y +C X +C X +B Y +C Y +A Y +B Y +A Y +B Y +B Y +B Y +C Y +C Z +B Y +C X +C X +B Z +B Y +B Z +C Y +B Z +C X +B Z +B Y +B Y +A Z +A X +B X +A X +C X +C Y +B Y +A X +B Z +B Y +B Y +A X +C X +C X +B Y +B Y +C Y +C Y +B Z +B Y +B Y +B Y +C Y +A X +B Y +C Y +B Z +B Y +B Y +B Z +B Y +B Y +B Z +B Y +B Y +C Y +A Z +B Z +A Y +B Y +C Y +B Z +B Y +B Y +C X +A X +C Z +C X +B Y +B Z +C Y +C X +B Z +A Z +A Z +C Y +A Z +B Y +B Y +B Z +B Y +C Y +B Z +C Y +B Z +B Z +B Y +C X +B Y +B Z +A X +C X +C X +B Z +B Z +C X +B Y +A Z +B Y +B Z +C Y +B Y +A Z +B Z +B Y +B Y +B Y +C X +C Y +A Z +B Y +B Y +A Z +A Z +A Z +A X +B X +A Z +C Y +C X +A X +B Z +A X +C X +B Z +B Y +B Y +C X +A Z +C Y +C X +A Y +C X +A Z +B Z +B Z +B Y +C Y +B Z +A Z +A Z +C Y +B Y +B Z +A Z +A Z +B Z +B Y +A Z +C Y +A Z +A Z +B Y +B Z +B Z +A X +A X +B Y +B Z +B Z +C X +B Z +C Z +B Y +B Y +B Y +B Z +A X +A Z +B Y +A X +B Y +B Y +C X +C X +C Y +C Y +A Z +A X +B Y +A Z +B Z +B Y +C X +B Y +B X +C X +A X +A Z +C Y +C X +C Y +B Y +B Y +A X +A Y +B Y +A Y +C Y +C X +B Y +B Y +B Z +C X +C X +B Y +C X +B Z +C Y +A X +A Z +A Z +B Y +A Y +C Y +C X +C Y +C Y +B Y +B Y +A Z +C X +A X +B Y +B Y +B Y +B Z +A Z +B Y +B Y +A Z +B Y +A Z +C X +B Z +C Y +B Y +B Y +A X +B Y +A X +B Y +B Z +C X +B Z +B Y +C X +C Y +C Y +A X +A X +B Z +B Z +B Y +C X +A Z +C Y +C Y +C Y +B Z +B Z +B Y +A Z +C Y +A X +A Z +C Y +B Z +B Y +B Y +A Z +B Y +A Z +C X +A X +B Z +B Y +B Y +B Z +A Z +C X +B Y +C X +B Z +C X +A Z +B Y +A Z +A Z +B Y +C Y +C X +C Y +A X +C Y +B Y +B Z +C X +C Y +A X +B Z +B Y +C Y +A X +B Z +A Y +B Z +B Y +B Z +A X +A Z +A X +B Z +C Y +B Y +A Y +B Z +A Z +C Y +C X +B Z +B Y +C Y +B Z +C X +C Y +A X +B Z +B Z +B Z +B Z +B Y +C X +B Y +C X +A Z +A Z +C Y +A Y +B Y +C X +A Z +B Z +C X +C X +A X +B Y +C X +A Z +B Y +B Y +B Y +B Y +C X +C Y +C Y +B Y +A Z +B Y +B Z +B Z +B Y +A X +B Z +B Z +C X +C X +C Y +B Y +C Y +B Y +B Y +B Z +B X +C X +C Y +A Z +B Z +B Y +A X +B Z +A Z +B Z +B Y +B Y +A Z +C Y +B Y +C Y +B Z +B Y +C X +B Z +B Z +C Y +C Y +B Y +C Y +C X +B X +B Y +C Y +B Y +B X +C X +B Y +A Y +A Z +A Y +B Z +A Z +A Z +A Z +B Y +A Z +A Z +C Y +B Z +A Z +A X +B Y +C Y +C X +C X +A Z +B Z +B X +B Z +C X +B Z +C Y +C X +C Z +C X +B Z +B Z +B Z +B Z +A Z +A Z +C Y +C Z +C Y +A X +B Y +B Y +B Y +A Z +A Z +B Z +C Y +C X +B Y +C X +B Z +B Y +B Y +B Y +B Y +B Y +B X +A Z +A X +A Y +C X +B Z +B Y +B Z +C Y +A Z +B Z +B Z +C Y +B Z +B Z +C X +B Y +C X +B Z +C X +C Y +C Y +C X +A Z +A Z +B Z +B Y +C X +C X +A Y +A Z +C X +A X +A X +A Z +C Y +B Z +B Y +A Z +B Y +B Y +B Z +B Y +C Y +B Z +A X +B Y +A X +B Z +A Z +C X +A X +C Z +A Z +C Y +A X +B Y +B Z +B Z +A X +C Y +A Z +C X +A Y +C X +B Y +B Z +A X +B Y +B Y +A Y +A X +B Y +C X +A Y +B Y +B Y +C Y +A Z +B Z +A Z +B Y +A Z +C Y +C X +B Z +B Y +B Z +A X +C Y +C Z +A X +A X +C Y +C Y +A Z +C Y +C X +A Y +C Y +B Y +B X +B Y +A Z +C X +C X +B Y +A Z +A X +B Z +C X +B Y +B Y +C Z +A X +A X +B Z +C X +C Y +B Z +C Z +B Y +A Y +A Z +A Y +C Y +C Y +C Y +B Z +B Z +B Y +B Y +B Y +B Z +B Z +C X +A X +C X +B Y +B Y +B Y +C Y +B Y +B Y +C X +A Y +B Z +C X +B Z +B Y +A X +C Y +B Y +C Y +B Z +B Y +C Y +C Z +C Y +A Y +B Z +A X +B Z +A Z +A Z +A Z +B Y +A X +C Y +B Y +B Y +B Y +C X +B Y +A X +C X +B Y +C X +A Z +B Z +B Z +B Y +C Y +B Y +A Z +B Y +C Y +B Z +C X +B Y +B Y +B Z +C X +C Y +B Z +B Z +C Y +C X +C X +B Y +B Z +A X +C X +A Z +A Y +B Z +B Y +B Y +C Y +C X +B Y +B Z +C Y +C Y +C X +C X +B Z +A Z +B Z +B Y +C X +A X +C X +A Z +C X +B Z +C Z +B Y +C Y +B Y +C Z +A Z +B Y +C Z +A X +B Z +B X +C Y +C X +B Z +A Z +B Y +A X +B X +A Z +C Y +A Y +A Z +A X +C X +A Y +C X +B X +B Y +C Z +A Z +C X +B Y +C X +C X +B X +B Y +A Y +B Y +B Y +A Z +B Y +C Y +C X +B Y +B Y +B Z +C Y +B Z +A Z +A Z +A X +B Y +C Y +B Y +C Y +C Y +B Z +A X +C Y +B Z +C Y +A Y +B Y +B Y +B Y +C Y +A Z +A Z +B Z +A Z +C Y +C Y +B Y +C X +B Y +A Z +B Z +A X +B Z +B Y +B Z +A X +A X +C Y +A Z +B Z +C Y +B Z +C X +B Z +A X +B Z +B Z +C Y +B Y +B Y +C Y +B Y +A X +B Y +C Y +A Z +B Y +C X +A Z +B Z +A Z +B Z +C Y +B Y +B Y +B Y +C Y +B Y +B Y +A Z +B Y +B Z +C X +B Z +C X +C X +A X +B Z +C Z +B Z +A Y +C X +C X +A Z +A X +A Y +A X +B Y +B Y +C X +C Z +A Y +C Y +B Y +B Y +C X +C X +B Z +B Z +B Y +C Y +A Z +B Y +C X +C X +A X +A X +A Y +B Y +C X +A Z +C Z +C Y +C Y +C Y +B Y +C Y +A Y +A X +B X +B Y +B Y +B Y +B Y +A Z +B Z +B Y +B Y +C Y +A X +A Z +A Z +A Z +B Y +A X +C Y +C Y +B Y +B Y +C Y +A Z +C Y +A X +C X +B Z +B Y +C X +B Y +A X +A Z +C X +C Y +C Y +C X +C X +B Z +B Y +A Z +B Y +B Z +B Z +B Y +B Y +A X +C X +C Y +C X +A Z +B Z +B Y +B Y +C Y +A X +A X +C Y +C X +B Z +A Y +B Y +B Z +B Y +A X +C Y +B Y +A X +C X +B Y +B Y +A Z +A Z +A Z +B Y +B Y +C X +B Z +A Z +B Z +A Z +C X +B Y +C X +B Y +C X +C X +B Y +B Y +A Y +C Y +C Y +B Z +C X +B Y +B Y +A X +A Z +B Y +C Y +B Y +C Y +A X +C Y +C Y +B Z +C Y +A X +C X +A Z +C Y +A Z +C X +B Z +B Y +B Z +C Y +B X +A Z +C Y +C X +B Y +C X +B Z +A X +A Z +C X +B Z +C X +B Y +A Z +B Y +C Y +B Y +C X +C Y +B X +B X +B Y +B Y +B Y +B Z +B Y +C X +A Z +A Z +C X +B Y +B Y +B Y +A Y +C Y +B Z +C X +C Y +A X +C Y +B Z +C Y +B Y +B Y +B Z +A Z +A Z +B Y +A Y +B Z +A X +C Y +B Y +A X +C X +B Y +C Y +B Z +B Y +C X +A Z +C Y +A Z +B Y +C Y +B Y +C X +A Z +C Y +C Y +A Y +B Z +C X +C X +A Z +C Z +C X +B Y +C X +A X +C Y +C X +C X +A X +A Y +A X +C X +A X +A X +B X +B Y +C Y +A X +B Z +C X +C Y +B Y +B Z +C Y +B Z +B Y +C X +A X +B Y +B Z +C Y +A Z +C X +C Z +A X +A Z +A Z +B Z +A Z +B Y +C Y +C Y +B Z +C Y +C Y +C Y +C X +A X +B Y +A X +C X +C Z +B Y +A Z +B Y +C Y +C Y +B Z +C Y +C X +B Z +C Y +B Y +B Z +A Z +B Z +B Z +B Y +A Z +A Y +C X +B Y +A Z +C Y +B Z +A Z +B Y +B Y +C Y +B Y +B Y +B Y +C Y +B X +B Y +A X +A X +B Z +A X +C Y +A Z +B Y +B Y +B Z +A Z +C Y +C X +B Y +A Z +A X +B Y +C X +B Z +A X +C X +B Z +B Z +B Z +B X +A X +C Z +C X +C Z +B X +A Z +C X +B Y +C X +C Y +C Y +B Y +B Z +B Y +C Y +C X +A Z +C Y +C Y +C Y +B Z +A Z +A Y +C X +C Y +B Y +C Y +C Y +B Z +C Y +B Y +B Y +C X +B Z +B Y +A X +B Y +A Z +B Y +C X +B Y +C X +B Y +A Z +C X +B Y +C X +B Z +C X +B Y +A X +C X +C X +A X +C Y +A Z +C Y +B Z +A Z +A X +C X +A X +C Y +A X +A X +B Z +C X +C Y +A Y +B Z +B Y +C Y +B Y +A Y +C Y +C Y +B Y +B Y +B Z +B Z +C X +B Y +C X +A X +A Z +C Y +B Z +C Y +B Y +C X +C X +A Z +B Z +A Z +C X +B Y +B Z +C Y +B Y +A X +A X +B Y +B Y +B Y +A X +B Y +B Z +A Z +A X +A X +B Z +B Y +A X +B Z +A Z +B Y +B Z +B Z +B Z +C Y +C Y +A Z +B Y +C Y +A Z +C X +B Z +A X +B X +B Y +B Y +C Y +C Y +B Z +B Y +A Z +B Y +A X +B Z +B Y +C Z +B Y +B Y +C Y +B Y +B Y +A Y +C Y +A Z +A Y +B Z +C X +B Z +A X +A Z +A X +C Y +A Z +B Y +B Z +B Z +C Y +C Y +C Y +B X +B Y +B Z +A X +B Y +C Y +A X +A X +B Y +C Y +A Y +B Z +B Z +B Z +A Z +B Y +C X +A Z +C Y +C Y +B Y +C Y +C Y +C Y +C Y +B Y +B Z +A Z +B X +C Y +C X +C X +C Y +A Z +C Y +C X +B Z +B Y +A Y +C Z +B Y +B Y +B Y +B Y +C Y +B Y +C Y +A Z +B Y +C X +C Y +B Z +A X +C Y +B Y +B Y +B Y +A Z +A X +A X +C X +C Z +B Z +A X +A Z +A X +A Y +C Y +C Y +A Z +C X +C X +B X +B Y +A X +A Z +A X +C Y +B X +A X +A X +C X +A Y +B Z +A Z +B Y +A X +A Z +B Y +A Z +C Y +B Z +A Z +C Y +C X +B Z +C Y +B Y +C X +A Z +B Z +A X +A X +C Z +A X +C X +B Y +B Z +A X +A X +C Y +A Z +C Y +C X +C Y +B Z +B Y +C X +C X +B Z +B Z +C Y +A X +B X +C X +C Y +A X +A Z +B Y +C X +A Y +C X +C Y +A Z +B Y +B Z +B Y +C X +C Y +C X +C X +B Y +C X +C X +B Y +C Z +C Y +C Y +B Z +B Z +B Y +A X +B Y +A Z +A Y +B Y +C Y +B Z +B Z +A X +B Y +A X +B Y +A Z +B Y +C X +A Z +B Z +C Y +B Y +A Y +A X +C X +A X +B Y +B Z +B Z +C Y +A X +B Y +B Z +B Y +B X +C Z +B Z +C X +C Y +C X +B Z +C Y +A X +A X +C X +B Y +B X +B Y +A X +C Y +A Z +B Y +B Y +B Y +B Z +B Y +C X +A Z +C Y +A Z +B Z +C X +C Y +C X +C Y +A Y +B Z +B Y +B Z +C Y +A X +B Y +A X +C X +B X +C X +A Z +B Z +B Z +C Y +B Z diff --git a/2022/go/02/sample1 b/2022/go/02/sample1 new file mode 100644 index 0000000..25097e8 --- /dev/null +++ b/2022/go/02/sample1 @@ -0,0 +1,3 @@ +A Y +B X +C Z \ No newline at end of file diff --git a/2022/go/03/answer.go b/2022/go/03/answer.go new file mode 100644 index 0000000..4ca201a --- /dev/null +++ b/2022/go/03/answer.go @@ -0,0 +1,95 @@ +package main + +import ( + "bufio" + "fmt" + "log" + "os" + "strings" +) + +type Sack struct { + first string + second string +} +type Input struct { + sacks []Sack +} + +func input(filename string) *Input { + file, err := os.Open(filename) + check(err) + defer file.Close() + + input := &Input{ + sacks: []Sack{}, + } + + scanner := bufio.NewScanner(file) + + scanner.Split(bufio.ScanLines) + + for scanner.Scan() { + line := strings.Trim(scanner.Text(), "\n") + input.sacks = append(input.sacks, Sack{ + line[:len(line)/2], + line[len(line)/2:], + }) + } + + return input +} + +func priority(c rune) int { + score := 0 + if c >= 'a' && c <= 'z' { + score += int(c-'a') + 1 + } else if c >= 'A' && c <= 'Z' { + score += int(c-'A') + 27 + } + return score +} + +func result(inp *Input, part int8) string { + var res string + + score := 0 + if part == 1 { + for _, sack := range inp.sacks { + for _, char := range sack.first { + if strings.Contains(sack.second, string(char)) { + score += priority(char) + break + } + } + } + } else { + for i := 0; i < len(inp.sacks); i += 3 { + sack := inp.sacks[i] + for _, char := range sack.first + sack.second { + if strings.Contains(inp.sacks[i+1].first+inp.sacks[i+1].second, string(char)) && + strings.Contains(inp.sacks[i+2].first+inp.sacks[i+2].second, string(char)) { + score += priority(char) + break + } + } + } + } + + res = fmt.Sprint(score) + + return res +} + +func check(e error) { + if e != nil { + panic(e) + } +} + +func main() { + result := result(input("sample1"), 1) + + log.Println(result) + fmt.Println(result) +} diff --git a/2022/go/03/answer_test.go b/2022/go/03/answer_test.go new file mode 100644 index 0000000..ad119ef --- /dev/null +++ b/2022/go/03/answer_test.go @@ -0,0 +1,71 @@ +package main + +import ( + "reflect" + "testing" +) + +func TestPriority(t *testing.T) { + tests := []struct { + c rune + expected int + }{ + {'a', 1}, + {'b', 2}, + {'p', 16}, + {'L', 38}, + {'P', 42}, + {'v', 22}, + {'t', 20}, + {'s', 19}, + } + + for _, test := range tests { + var got int = priority(test.c) + + if got != test.expected { + t.Errorf("priority(%q) = %v, want %v", test.c, got, test.expected) + } + } +} + +func TestInputSample1(t *testing.T) { + filename := "sample1" + expected := &Input{ + sacks: []Sack{ + {"vJrwpWtwJgWr", "hcsFMMfFFhFp"}, + {"jqHRNqRjqzjGDLGL", "rsFMfFZSrLrFZsSL"}, + {"PmmdzqPrV", "vPwwTWBwg"}, + {"wMqvLMZHhHMvwLH", "jbvcjnnSBnvTQFn"}, + {"ttgJtRGJ", "QctTZtZT"}, + {"CrZsJsPPZsGz", "wwsLwLmpwMDw"}, + }, + } + var got *Input = input(filename) + + if !reflect.DeepEqual(expected, got) { + t.Errorf("input(%q) = %v, want %v", filename, got, expected) + } +} + +func TestResult(t *testing.T) { + tests := []struct { + part int8 + filename string + expected string + }{ + {1, "sample1", "157"}, + {1, "input", "7727"}, + + {2, "sample1", "70"}, + {2, "input", "2609"}, + } + + for _, test := range tests { + var got string = result(input(test.filename), test.part) + + if got != test.expected { + t.Errorf("result = %q, want %q", got, test.expected) + } + } +} diff --git a/2022/go/03/go.mod b/2022/go/03/go.mod new file mode 100644 index 0000000..c7da3b0 --- /dev/null +++ b/2022/go/03/go.mod @@ -0,0 +1,3 @@ +module aoc/3 + +go 1.20 diff --git a/2022/go/03/input b/2022/go/03/input new file mode 100644 index 0000000..fa87bf9 --- /dev/null +++ b/2022/go/03/input @@ -0,0 +1,300 @@ +wgqJtbJMqZVTwWPZZT +LHcTGHQhzrTzBsZFPHFZWFFs +RnLRClzGzRGLGLGCNRjTMjJfgmffSffMqNgp +WPLgsfLmLgqZvZgSRR +RbwHdbDdQFFFMvvMjbhqhZZS +lzTdldBDszfGcRsr +ZjnhJjMjnbdnbHdFLmmfFLmnCCWFFl +PpNwtRsNsZSsRwCfzQQBfQszCBsC +PpwcqqVZRtbggggjcgJJ +ntczBcVcgnHzgBHnVntcBBFhgsmmmssqWNWNWqLvNhsqTN +bSSGdSDZbGSGdDmLmGTvTGmLFFhm +PlFbDpJDPbPdPbZQZDZlSCDBfMVRwBzBtBQzfzRHVMVRtH +fDVrmmrvcmCcVpfcfGlswpPwsttMpjJMPPjjtP +RgSTdndFLbJqqPssWWjPWjPjHS +FqgzQnTqJRRQqLLhTCDhDCDmcmlvvlhcVm +nnqVtHbfVHZVmtlvmHtZtrFSFTRRFhRccTbrLsLSGr +cCNJQJPJQgjjMQdDrGGsRhTFGFRFSpMS +gzdCwWdjNPgzcJgjwdZtVlHHmvvmZlvffHnz +FFgsgwNwWvggQsMWDwvQQvQcccdcJZDtJGBtVGGGtcVlzt +rjfTrbjpjRSRTbTpzldjjHBtJGBdltJG +RbrPTfpCfmbpmnfRRCvMvQWNBwFFgMsgBL +zzLHgjjjdFHWbGBjjzcbgQRmSvqsSpmRsRSQSmRMWv +ZfJVrwPhZhZlhQQqBSQSNSqM +tnCfrDCltfPzHFFLBgngHz +DCpwrrMhwCrCMVCpGFqpVDnWWTWBtnTWvWfvbbTdFWRv +lmhhcsQPmTtTnnPBTB +QmcjNJsJzHNljZsNqDCGGhwqCqhgDDZV +hLfRnSLfhcndCCPfJJjzJfzt +pHNWwDpGGNJBZjjNNj +gmgwwHpWTpmGDmDTggqHmmDSsnnhvcqScdVVSVcjLrRcnq +CdlTJgnQJVCllNVWTPZBmPPGhGRmghPRGs +wHDrSwtHbmhRvHVZ +DzzwrtVFjLNnMTCTLCWW +SppdsnGpNVnZZZLPMlMPGq +mdcfvTTbBddLJgZJLlcFqJ +fzTvfwjjfzzCbvvjvQjWvNHVNNVWrRtdnVNppNprDp +lmlCGTmNbZlbSFlbNGfnzWfWzCdWWfVdwRCf +jDHtHHvLjQtqrsqpjBBLprRzwfwJfzzhRnczhWQVwzVR +rqpPtpPjDqpqDLtLrPGGFSFgPlNZZSGMPnMZ +pSHShqgSMzVpphFnJMFMBtssdjRJ +PZDbZfmCDgDfDNQPwCflCQNJsjRBRBFsdBWBsJRjsbsFJF +DQvCwwZrPPlffDmQCDwZQPmPhqVTcGhSHSLTpSGhLHzpGghr +gPqgqqmmmPgsqvGmsMCCnfZZfvBpWZhVrrZdHBvH +TSlcttTjRTDlDDTRhZVdrHHpWVnfVrtd +SFJzFzcJjcRJwGGqJMMCwW +gzWNLSjRLzlNqqQMLhvQccGGmcQm +fFrttPdTFTrpVwGpbdVQQp +HnTBGfHTGzWWqCqngn +SddrLdVpjjVSgRBszFswzwlV +mtPMbMqPMvqHHHDTTglBvsFshFFg +bmBHbtPctMtbMNMtbPtPqHmMjpdZdcJGrjSWWZGjJZnjndWj +nljWJHRHGrDcMBbDLZHV +wdvwmhghhbtBMcLtwZ +gvQvvghTfPSmpmQljGFRjQbFGCsJbC +BmphBWmDBBQfpVgQZpjg +rqqGrrrqlnqqHqjNnVDSSSgQQffj +FqLrbsLFsbLbLqHlMrmwwPDcCmMMmJBwDJcC +wZccfslqZPFFjrFbFfQQ +vvTvVWCJJZVBWCSvnVJJrhjQVMjVjzbgMQbjpphh +BBmNWBvZRvSqwsGwssPcmc +LGpnfcnzfzQdNFNHqHJptq +RBNNvZSBRbRCCDJqHrDZqHFZtw +SRNhRsNhWSNWsRRvgjngQnnMTnTgQjGMff +twtZmwqBHtmqnnmlGLfcfvQQ +dgMSPSMdQGclRRdF +pVMrDgThDDlPWPWbBZtZqqttBqjqjT +PPSWCGSzpCCQwNsNPFhTNVbB +vqcgJngqLLcZLvBhNTVlbsvdFF +DDmHgRjHZhHtGfWpQH +sBLbwWWBvsBsqLqStRjcGGRnggjGcntJDn +NCMQPMQPMQNzGGRRgRJRGzcG +dHQNfPCFTQfFfVVNvwwJvSWSqWqrSqdS +prDBnnDpFDprnDPBDQBvpBZttcSqSZSZcScFJSHcZJtz +VhMVdLsjdqVWJSWZZZcHst +hLVdGLfqjGjlfhCfCLjTTmrlpQBPBmvnrgDgpp +SSSTJmmgbGwtmRZHCCZRCH +FWcPQrrWqflzSWpRHZCZHRSt +PSQzzdcQTghdndDJ +cLlrNPvljRhRgTlM +VmDBGnVdmJDnDBndnnVwDRvMgRsTbTzMMsgZghzzsB +SpHvmGnSDJnwvDQqfrCPLpPLCfpF +PppbRCCgpzzQCgCSgZTlNNTWnNNDNlRnGl +hwMhLtBcBdjjNzWzlclcNGTs +FjJFHJwhfwLHMLJLwPmqfQPgVCmQgCmCzC +jTtMqFjMBqBmTntTztBTnTZBRZRLpLJgDgJNhghJrNNhhLJh +DCDdvdGsVDVsflVdQSsfSwhRJlgppgpRpbWLgJbJpgbR +wfSHSsdSVvQSwfwQPQPqHtFDcMzmtjBntqMTqn +HQhQWLCSHCSCjnjQdSJdCSQgTTmZPTVZmqnTpPtnpmRmpp +vDrzhvGzfchvlGvMFMrqVqPgZVVtZtVRgZgm +bcvMfwvDsDfbvfwDbbdhCShWCBLLJWjHsHjj +zLSsJNCjsjLCNLCgGcwBPPdwBwqwqz +WMFZprZDbrddWRVRRDvlPPBcPhhlBqqHPGPhhffg +VdbFvZWWWZZDFTLtCmNntjTnLSnn +JLVhhwRbhVwcLFJFhhJcccqwsvpRlllvpWvZSBSSSRsNWpzl +jgzfPffgZNspgZQS +fjCmDCGnfmTfFqrFnhqbFzqt +SfMRRNHSNNLfRfHcRRsqwdCCsssTqBCvgBLv +llDDWQnFGtQnmtGQDWQFsgdHVBddndHsgqTsCTsg +GzGjpWmWbmQmbpGGmGjHSrZcMfZSRPJPfcMRcb +PDdMdRTRrLDSwzJvfSvJ +FnjQnsqsFTnStvplhhzzFS +TBHHCsgVRRcMHbLR +GcLdGBJvBvLJHccJBvqHpGzDFfzwfzjwhDwrSFpfpDSn +mZZrTTQVmQmlsMPVblZQVZmfCwjzzjChzCCbDSzhFjfnSb +gZlRlZNPlmlgTTPmNRvJWcqrNLdvHWLBcHtH +jWWbBwgwWwwtvvSCtHvgWsMFmscHzTGMmcssGFTTGz +ZrLtpLnlfQJqnfJtpLnZlrqdNNGqcDNNFFTNDzzMMTMsMNMs +LJQrnZnfLZnlrZflJJRVRQbbwBgCtCVjWgjBjjgbPjBB +fqQVfRqSqmpnlLnm +jFcjMJTjhwwggjFtgzCHmCzCmGzGlzpn +wstMFFjWDfQRvmDPSB +PgTFGPgcBZPcHPFBZRjGPgwCnmwCsmSdQdThmMMMQCQS +JbpvWtvfHblWDHJDzmndSdMQnSwCdhMdQD +rfvWlLlbtfJvvLJpqWbbqZRRGPVFNHVFgZNVFBgH +TRMrrGBLMLPtbssTGtBHwZmdQQbdNzzZZNZZdwjd +CVlVhCnclvhWSFFfQrWNrjmpNfwmjZ +rlqFlclChhCvnlDvgVvRRtPtqTGJHRMBRTPPqM +gZzCrQGQdrQvZHPTHWDbTgWPJM +nSpLlcnnVjsSVLLnLSnhLSsJPTTWFsqfbPMFMqJDbfqM +VwwnpwLnlPdQCwPPCC +lRlrnlrsrMlhVsRnVhGPvCFNcPBDBvccrCGr +RZQTzWTRdDNvBDdNcC +TqjZbWRHmlMJgnmsng +scQmLfQBQQvvZfLsmmvDJwpgSNSDDdcJSSwTGD +PHlMbtzCCnlbztMRzlPNNdNwGpDpwgwptNLGpw +rRHnLbhCzbbCHnHjMbzzjzFZmfQqWZQqvmhmfVZmqFBW +fLTQWTMQtjcCGCJCbf +gGsmsVSzmjCFHJCJgg +SPRsSwSvBsPRPsqzwSVqzmhVWtLWhTDNLlTDtLTWGpNMtDLt +mbzRbchRRQzzssLdhLggLddJ +DCqDNNNWvDvjcPLsJcLLdv +cpFCVNnVBHtbfFRtMRFf +PFRcCCPtsDDDtjVspgwmgTNpTgTpspsw +BqqqdJdHdMgSfMmZpZND +vDHJGdLbLzBJdGnDdrBqVtCzWPPhthtPFzzPCFtV +HvhvHdFdvJDfHdZdpfhrmGPljPRrGPPVDGrWWC +NMMsRBMzcRRMMBSzcnbmNGrCVCWrCqPClmPqlG +zLBbwMzQnRSQMThtZFLvpdgHtJfF +DpcJcJPmMcLSHHZCfpnH +BsBFvvqTFlbhgdbBBblfZLCLzfHWfjnjLCnCrh +dTsNgqFvNgsGlZJRtVtMPmtDmG +LdGQqzPGCCjJTJdTLJQJtFcFRSctcrFNFltPFtcc +HphMMbbMdBMHbBhhgHMnhvwFFvtrlSNRNgcRllcvcc +spHMhBnHnnsmWdnsnMBMdVGGmzjzLmZLDQCCCCZjqjTD +DDZMzcTRgDMLzqCffhfWfcWnfj +NsHVVJmswwSSwNPPNjnhqhnCCnhNvjfTnv +rSSddrGSGrlMrpTpQT +bbbfCfrLHMMMWVWC +SqsvNZqQvvqcjNvqZsMMwgFgFplTHQVRFgWH +BSZWWqBZBjmPGJGLbBtf +RNCNfzfRHmzHwSdRdGfzRJPqFcFcDFGccZZqtLtGLtgl +pjhVMhvhbjvPcDJvcZqt +bsQMTsjppmSdTnHSJH +PtLwpSwdSJwQnGvvqtvMhZ +TlFcHlTjVjsDTQnCQhbZGCVVnb +cjljTslTrlzzHDNRfNgLSNBJfBwNfG +HvsZZqqqwWZswWHTmHsvvfhSfBfDffjchfBbhD +MCpnCVpQClRNnlNQVQClfDhScmjBfLhmLDGbBNbS +gmtpJpQQllJnWdZWwJWFwJJT +TzBvBwwdhgRPGHlRHh +NLWttJsrLWttppLpsGlsmVbVGRljGDRgjV +MlllnNFnnQqCdzqq +vptzrJhMMGGMptJPhJGJPvdFTFcSsTBVsczBScTSFFfn +gbRjWgRjCqjZnfHCHnTSVBHF +mRwqNbmqlbbjqRNlLbNrDJntNDGtDhNpGMrpvJ +GPWZLgWqLHHGbgbbGPPmqHqfcjjRHJJBDRBRjBBjMHjwvwQc +dhpFSpzVSSMSlDBvMQ +TndsVNztVTspnsdpshtmZLPCGGNPfgqbWWfDGb +CbqDjjCdClqgrfJvrv +NGNPtGGzzHztPWWnlgJvfBnWBFgp +hGzNHhsmGccwHPHZHcwdCCdbTVRTvSmTCjbLCb +sqnqsHGpJbqnrbshpshHmmmCWZZmWwfTjTjHmfLZ +dPggRgSDDttMFgctgdDtDcDcRWJBmjTWwmRLBLfmwBBjZWTB +PFcVPlJPglbqhhrnnlNz +wZdDNDdPPfhqwWqbsF +VTngRzpnzMLvzTCLlhvDfltqqDttqFqs +mggTVpCDDSNjBmPZrd +cSdqJSTTTJcSJpCdQbqTCPPdjdDtGzwzjDwjwwwwzD +rVvsBBVgsVBhHhfljtgbPgGtWjPtwt +fvHsVZHVnRHpSJJRmbbSLT +lDDPRRjwLGlvVRDRPlwwwPvmpSfhVWSzhqfzqpHpVpVHfqSH +qBnqBNsBBChhCSfZ +nTQbQnNNQJTLvlmTPLqqmG +TTCJhDrmDpRVhvhHfffwzwfz +dmmdmglWcqvHvWsHzB +gdQMZbtlgQlZcMSttCNmVVrLSTTJ +PLZLqhZZzZLBjjjGrrPjMH +CcQcCcfRlWDjdrMrBrHC +WlWFMcFpcRFmsWFcmflqSJzTqzwLvshggsZJwz +LgqRDDDHHGTpgpJrQrQhhhCqrwPw +ZSBWjjFshCFlQDrJ +SjWnnbWtWnsztgGDDbDTGgHHGp +llfvMlvzjzGzGRfvMSGRfSdStrCtQNCZrrFdJJLnNtLZ +shhhshPHsTTqsBHTVTwTwZZnCtQrQnJtQCCJBCCZdZ +TPHTPTHmDnljplfpGfGm +qcNTmvvSvTNrWhRrTdthzW +bDVJphpMMJwJpMHtrrttWsgwtzRW +bFpGJbllPfplVQmnhvvcSmCFqq +GTPJGMQTPQMqZjHTBmnndBVddHrrzNrz +bbcRFgDpptRbffwmzmrvLmcZvmLmLv +WCwgWbpgwtgfpfMlQGPhSPZWTZPl +DsPCswsMPBMwPDCVJPnTPPWFGJNJmbJW +RvvddfvftdtvNzghGSbFnWTntJSttGbG +LNgRddgRlgzcgCDjjjHjcBCwcM +gnVtgBnpwBgShBgcwhJJhjCMMMDmLRjDRMjrDMMMDMqMRF +slsblHPNHlbTNbsPvszHQWbzqrZLMRmFMFmdFmrtDFdMLNZD +bPzfvbfsvvlHtlzPHllHGTlTppCJpgcngcpwnwCGGJnnShwV +cgQRgtzDbHPcgHzQWpTjTLdjjNNpNLsDss +nwccZBmwcJqmJnjsTvmlTSsdlTNs +CCGFCBVrBwwGBhqVnZBrqWMMQzHfQcHzzzPtfztGfg +lhnwnhlbgbngbcfDgJLJQqDdVd +FSrvtMFZVJJJVtcq +jZNNNNjmjSPjFTJmGGzswwzHwHpBsbPblhhW +tnDWHntzDtzQBZLMLzNLDDcRFFjhJBmcFRCTjRchcRvT +sqwsPlbGfSbPGSVbJfpjjhcTFmCRjjvmTTvRdw +lJqSqPVbgGSGrVSqJqflbWZQNDMLHnrQQWNDMtQMQz +lpltwwJqsWVLPtVt +DGHsDdZQzHLSLZcFRrFS +BGsGCnHmMlMwCfwT +nrRNzRMPrrPnNwNzTSFSTNtqZdtMttvQqQmjdjvZpgjZ +GWVhGcGhHhGcffbZGDmmtttQvpdtbpppdj +HGlHBhHGJfJJhCfZzLTTNnNrTnCNwT +jBpCZStjBwWrQCMrhw +TvcHBzHdPPzdvFTzzJlvzdQfThrhhrhfQTWMQfWMqfwf +bzGJJBJcJvdvBPFzddGgjZSbZZngRZNNnnsjRs +dqPqbpPFJfsFfMcNQNNtNmzrNQJn +VVBDWvwZWDLwGlDhLGWWVcmQtSNmLmtSdSSTmrcQQm +lZlhwDCdhhHllvWvjMHbgMpgffMggpPb +SWSFLLFWDSWDNFzmmLMfGlfsdfnJMBfwMGVnBf +vPtgZcctcTQQZRRcgCtZwRfqBVGqnVTBGVnqlsdBJnqV +RcjgwbbgNSbFbhDb +JrRZLrHvjQFPLnnBPQ +DhwbtHbzpcpFTgtQ +zlDwlHlzWSwDqhMMbSJVZVvrCrCZJZNZdJ +fgNCZSDtDfDZTrTfqWghQGzGQshgpGGFQg +RFvLnvFjnVjmLQGPQWLmWh +MdwwVMFbMdRHFbccbCZJtbDJrqqJZNJZCZ +fdZVBMMdfdfBCzhTzMdMCgCrGGrpQJmSmGJGmpJQVpLmqV +RbFnhNsvlDsFHttllGmqGpPLvJpmPJSqLL +tjNsDnNwbNjttNNZTzhMWzcZcMTwMd +DjSSMShjRjPCbDFCdCSDbpBBswfNWZBZZrBVBPNfVmVf +zltLjLqqGlzQntqqGztqcgncZrVrmNfNwWBVrVmrgwrfswsW +qcTqHLlnJzGznLJtHGhMbhjFhMMpFbpbThpp +ZVFZcctFQzsCtbZFnPPHqmqpwmvPmp +NrjGfMgcLLcfdLqpmRwRRqJJmdPw +LMNDgMBGlgGDLMNDGljctVbVWZTTCWChhTttsl +RMGRRhhgzgZMtHdGTtvDwDJFCDvvwdvwqFFv +rfrrjLNmmSnSjVSmNNPPbJVbqvqsqvhvFqCq +flrpnSlrSNfjrNjSphNSWlHRGzTgtQGHQtttBTRBRQHW +tplDDprhbvprvrJDprCpbsvHRfzSzTtzmRqSTznRRBRnSfFF +MVwWjVNVQGfcMnTmRnBm +VQwGLNLjWNWPGjZbsDBppBZhhDvBlZ +RVVrGVVchRZsnzRzBWZb +FQHWWCHwQmWmlqfCHSwJnsbNJnNsvttntBtb +QQSFgqgqLMLPPdWdMVhWDT +cZrMjncTdfJpPJbr +WHNqnQwwCwvlqHtCtHNslNlvLLPDfSVdVPVDVSfVSbftffVf +NCwwwQwllwnvgsvZzgzFZzBzjGGGMM +MvHpfzcTcZzpphhbsDSTStsltqSDtS +PRmnwCrWnWQrmNMRNnlNGbqlbDltdlbDtNtD +CRJnmRVWJfgMLvcz +HPFbHrrwLdVdgbDZqcphCqSZBhLZ +tQRfRRGtvTNNSGTMjjmDCRhmqpBChqhsRDZh +vjSfMzGQNQQnMtNTTWNNjgblFdFHwgdJJHHPwddgnr +BggPRVBPPgfCBmJTjTTqpTNpZBwMbr +lclLLllsQLFlsbMqNrMwTpwpcM +SvbDzSDbWFJfWPPgdnfR +GbpSSbGDNbSSJbDZNZbDppGtMntHLHvHCTLCJMHnRCMLTT +cdwddjBfPsmPPQqQqscnHgRMtngvtjjgCCTMzM +WvwPvWvflBwdQPlNVVhbDGpFhNGhbl +WZRGmRvpCRFTZMQQQMCdddDDcD +lqgqsgvjVtbMDzzbtcDQ +NsNNgjNNjsNhnSvRmnpGRmSTSG +nTgFtDTDDLrFBStdGdcHcbvGSc +QPzfPCMzWCjfMPJhWGlRbRWRWrRRdVVH +zhCrCQCjPrpNNBsNspNnwq +zTJpqFzbTzsWsVbbfLGfSSCDNSBCHfMLHG +rZcvtmhctrvmlPPmmmrhhmBLCHDCCLLDlqMlGMNDMwDC +rRhRhnnQPZhtZcZtdttZgqFWWVjssqQpppWpFpJW +NWPhdWJPWVzVqQrqmSsPbrPP +cZDRjGsffGsCDfffgjGgRQSrTcTmSlTrbnqmSSrlln +fFGCjGCjLDLFRgfDHZvzLVWtvsWWBtzJNWMB +qMVbtnmMMTpCppsR +NffHGrWzWWgDBfTRhChCnSCWcnjT +QrlQBPBrlPHrrQlrHFLqPnLvVvbVmVVJtq +MVMpHMZLVCpMrfWjvWnfrJ +hlblzDDzwlSlGtRhRlSdrfGGWnWWfFPjJjnfqWGF +lmlhBRlDhhhDRRhwDmBpHJmsNCHmCgNHJCJLsc +jvsLgmqLgHvbPPVbNjSCjC +pwTcRpRWLRMLJJFwBBGWcFWNVlDDCSTVttNPblZZCVVDlP +GcdhccpcpRpGRhGmfsHHzLQQHrmsnh +FMmSRgtMltMnVgnmNvlrsJrsZWjspvsZJp +QbdhqwqbNqdHbTdcbcpsrpvjfWfLJLfwJrWp +DQBBQqQGccdTPGqqBNtFGRSMRSFGtnVSnnmM +fPjGrfFrrprprdrbQPZwlcZwZmlJwH +qvNnvWnvWDvSvqNtWSLWStqbcJBQwQJwQZHLBZbcmJbblb +DMtvqSvvDtntCRfwzGCgdzzFjG +TfdZgtmfDgqgvlLFFsFHvcvZ +pphWQMVjQVVBWWjRlHlHnlcLDDhcnF +JQwwWVPBwMJpJwpWwGBWNzrDzSSzfgTPqTSTTtSPgt diff --git a/2022/go/03/sample1 b/2022/go/03/sample1 new file mode 100644 index 0000000..9919ffa --- /dev/null +++ b/2022/go/03/sample1 @@ -0,0 +1,6 @@ +vJrwpWtwJgWrhcsFMMfFFhFp +jqHRNqRjqzjGDLGLrsFMfFZSrLrFZsSL +PmmdzqPrVvPwwTWBwg +wMqvLMZHhHMvwLHjbvcjnnSBnvTQFn +ttgJtRGJQctTZtZT +CrZsJsPPZsGzwwsLwLmpwMDw \ No newline at end of file diff --git a/2022/go/04/answer.go b/2022/go/04/answer.go new file mode 100644 index 0000000..40a3afd --- /dev/null +++ b/2022/go/04/answer.go @@ -0,0 +1,90 @@ +package main + +import ( + "bufio" + "fmt" + "log" + "os" + "strconv" + "strings" +) + +type Range struct { + low, high int +} + +func (r *Range) contians(other *Range) bool { + return r.low <= other.low && other.high <= r.high +} + +func (r *Range) overlaps(other *Range) bool { + return (r.low <= other.low && other.low <= r.high) || + (r.low <= other.high && other.high <= r.high) +} + +func fromString(s string) Range { + parts := strings.Split(s, "-") + low, err := strconv.Atoi(parts[0]) + check(err, "Can't convert %q to int", parts[0]) + high, err := strconv.Atoi(parts[1]) + check(err, "Can't convert %q to int", parts[1]) + return Range{low, high} +} + +type Input struct { + ranges []struct{ a, b Range } +} + +func input(filename string) *Input { + file, err := os.Open(filename) + check(err, "Couldn't open %q", filename) + defer file.Close() + + input := &Input{} + + scanner := bufio.NewScanner(file) + + scanner.Split(bufio.ScanLines) + + for scanner.Scan() { + line := scanner.Text() + sets := strings.Split(line, ",") + input.ranges = append(input.ranges, struct{ a, b Range }{fromString(sets[0]), fromString(sets[1])}) + } + + return input +} + +func result(inp *Input, part int8) string { + var res string + score := 0 + + for _, pair := range inp.ranges { + if part == 1 { + if pair.a.contians(&pair.b) || pair.b.contians(&pair.a) { + score++ + } + } else { + if pair.a.overlaps(&pair.b) || pair.b.overlaps(&pair.a) { + score++ + } + } + } + + res = fmt.Sprint(score) + return res +} + +func check(e error, msg string, vals ...any) { + if e != nil { + log.Printf("ERROR: "+msg, vals) + panic(e) + } +} + +func main() { + result := result(input("sample1"), 1) + + log.Println(result) + fmt.Println(result) +} diff --git a/2022/go/04/answer_test.go b/2022/go/04/answer_test.go new file mode 100644 index 0000000..08cc3e5 --- /dev/null +++ b/2022/go/04/answer_test.go @@ -0,0 +1,47 @@ +package main + +import ( + "reflect" + "testing" +) + +func TestInputSample1(t *testing.T) { + filename := "sample1" + expected := &Input{ + ranges: []struct{ a, b Range }{ + {Range{2, 4}, Range{6, 8}}, + {Range{2, 3}, Range{4, 5}}, + {Range{5, 7}, Range{7, 9}}, + {Range{2, 8}, Range{3, 7}}, + {Range{6, 6}, Range{4, 6}}, + {Range{2, 6}, Range{4, 8}}, + }, + } + var got *Input = input(filename) + + if !reflect.DeepEqual(expected, got) { + t.Errorf("input(%q) = %v, want %v", filename, got, expected) + } +} + +func TestResult(t *testing.T) { + tests := []struct { + part int8 + filename string + expected string + }{ + {1, "sample1", "2"}, + {1, "input", "530"}, + + {2, "sample1", "4"}, + {2, "input", "903"}, + } + + for _, test := range tests { + var got string = result(input(test.filename), test.part) + + if got != test.expected { + t.Errorf("result = %q, want %q", got, test.expected) + } + } +} diff --git a/2022/go/04/go.mod b/2022/go/04/go.mod new file mode 100644 index 0000000..6c7de90 --- /dev/null +++ b/2022/go/04/go.mod @@ -0,0 +1,3 @@ +module aoc/4 + +go 1.20 diff --git a/2022/go/04/input b/2022/go/04/input new file mode 100644 index 0000000..c7fb3fc --- /dev/null +++ b/2022/go/04/input @@ -0,0 +1,1000 @@ +48-50,48-49 +5-89,5-5 +17-57,55-96 +24-67,23-25 +89-99,11-89 +34-71,35-71 +13-17,16-95 +13-93,5-12 +11-91,1-11 +4-81,2-11 +53-82,52-53 +5-98,4-97 +4-78,3-3 +20-81,21-80 +79-83,77-82 +76-87,43-87 +14-93,12-62 +13-94,15-95 +22-75,14-53 +67-90,67-79 +1-82,1-82 +5-80,83-96 +28-57,56-56 +53-91,52-54 +21-97,2-36 +8-18,10-98 +7-91,12-91 +11-88,19-95 +22-88,21-88 +31-69,9-48 +2-3,3-43 +5-95,2-6 +5-85,5-79 +51-91,51-69 +41-91,41-64 +23-37,24-95 +1-28,3-94 +6-93,6-98 +8-65,34-66 +2-8,9-38 +3-75,2-4 +40-77,37-76 +51-51,11-51 +95-95,3-94 +90-90,81-90 +26-61,26-61 +1-96,97-98 +41-84,90-91 +94-94,1-94 +52-89,74-90 +9-11,10-74 +57-67,56-62 +29-98,30-78 +20-88,18-54 +11-81,10-82 +85-87,26-86 +8-45,46-78 +16-33,20-49 +73-93,16-93 +35-36,29-36 +4-98,98-98 +24-30,30-80 +64-99,72-97 +8-33,8-47 +88-96,93-99 +23-46,35-49 +41-60,40-41 +5-83,4-6 +76-76,15-76 +37-70,69-71 +11-77,11-12 +57-65,65-97 +20-46,46-62 +76-84,8-77 +10-29,29-53 +16-50,6-17 +20-99,19-19 +11-12,12-72 +24-91,77-92 +37-73,72-73 +50-52,73-89 +37-99,25-76 +1-88,1-2 +18-64,17-63 +19-52,17-52 +5-86,6-87 +13-87,14-87 +23-82,19-92 +56-79,57-79 +25-68,26-67 +5-95,94-96 +38-50,38-39 +32-75,32-75 +23-69,23-69 +25-54,18-25 +33-79,34-67 +38-62,38-65 +62-75,69-78 +2-17,3-17 +12-20,19-96 +7-7,4-8 +1-92,2-93 +29-70,69-77 +7-54,2-54 +9-34,16-34 +4-20,7-31 +4-89,4-47 +12-91,9-96 +8-79,9-80 +32-91,31-91 +1-4,5-55 +85-94,84-95 +73-74,6-74 +51-70,52-70 +21-75,7-27 +13-38,37-39 +42-97,42-98 +33-45,28-45 +12-14,13-98 +91-92,90-91 +66-83,57-83 +8-79,9-67 +59-72,71-72 +33-71,3-33 +13-38,12-38 +18-93,18-52 +28-80,12-26 +87-88,2-88 +7-89,7-85 +26-27,27-27 +12-97,12-97 +36-95,32-91 +25-33,25-32 +4-39,5-75 +40-58,41-58 +8-60,8-93 +9-69,70-70 +19-34,35-68 +47-47,38-47 +1-70,1-70 +39-82,38-83 +17-98,17-99 +56-86,37-56 +2-2,4-96 +5-97,97-97 +52-93,52-77 +39-66,38-66 +9-99,4-99 +25-37,24-37 +2-99,1-98 +13-15,15-15 +10-51,5-9 +38-99,19-96 +6-38,37-78 +94-98,95-99 +8-89,29-89 +2-98,1-98 +13-99,99-99 +1-76,1-25 +8-97,8-97 +9-90,89-93 +24-52,7-49 +30-97,45-99 +26-62,26-59 +15-27,21-30 +80-81,64-80 +65-76,2-76 +9-9,10-99 +3-6,4-82 +78-79,20-79 +11-50,49-49 +10-12,11-68 +1-5,4-85 +8-10,9-95 +16-86,16-87 +11-81,10-11 +36-87,75-87 +55-92,54-99 +3-18,18-84 +4-73,1-2 +16-66,5-76 +29-73,29-79 +60-91,67-91 +82-82,47-82 +31-38,31-37 +44-44,21-44 +93-94,65-94 +13-79,2-12 +4-97,5-97 +40-78,40-41 +69-99,1-69 +8-97,8-96 +27-27,26-79 +60-96,71-88 +24-57,18-25 +1-26,2-27 +53-81,69-81 +3-96,2-96 +9-99,9-97 +45-48,46-56 +6-36,5-30 +45-73,46-73 +28-41,27-42 +4-91,90-94 +6-39,20-44 +3-3,5-65 +17-98,18-65 +15-98,15-96 +29-88,65-90 +10-61,60-62 +26-91,27-91 +78-96,95-95 +6-22,6-17 +40-56,40-57 +4-5,6-98 +78-83,51-83 +8-78,8-78 +26-87,26-86 +4-94,3-4 +5-55,2-6 +40-50,19-56 +55-68,2-94 +39-41,9-40 +68-76,68-69 +51-60,50-59 +9-48,2-10 +13-96,13-63 +1-90,4-91 +1-7,6-99 +25-67,25-66 +13-94,14-93 +27-28,28-70 +39-41,25-40 +8-53,9-53 +56-89,57-88 +4-56,50-56 +22-76,15-17 +7-98,69-76 +12-46,11-46 +1-41,3-72 +43-55,44-76 +9-81,9-81 +45-95,45-94 +12-68,12-69 +90-96,74-85 +67-68,68-68 +50-73,2-73 +6-17,6-97 +70-76,71-99 +9-43,9-43 +9-76,8-75 +66-90,65-66 +13-99,12-14 +1-2,3-91 +53-86,52-53 +3-57,3-96 +81-92,80-92 +6-18,17-88 +70-94,69-69 +17-17,18-88 +4-92,4-93 +41-61,47-61 +25-52,25-73 +78-97,12-97 +39-54,38-46 +39-52,39-58 +8-99,8-51 +52-58,51-52 +5-45,6-46 +3-99,98-98 +84-87,84-98 +58-87,86-88 +6-72,71-73 +41-42,41-86 +27-42,27-77 +14-15,14-74 +43-43,40-43 +17-95,17-93 +44-66,65-70 +4-99,5-99 +43-43,44-86 +64-75,63-71 +4-99,5-99 +6-29,6-99 +19-84,18-83 +72-72,10-72 +9-14,13-88 +3-98,98-98 +9-81,10-81 +13-69,13-70 +3-87,1-87 +22-61,10-62 +75-90,75-90 +69-99,68-87 +94-94,91-95 +2-3,3-96 +5-93,48-93 +43-45,33-49 +85-87,2-86 +51-52,52-62 +50-91,40-49 +1-81,21-81 +51-56,51-56 +22-23,23-37 +25-27,26-67 +58-59,23-58 +37-85,84-85 +12-97,12-96 +14-38,2-13 +33-81,32-44 +34-65,46-60 +3-28,27-28 +11-54,11-55 +2-93,1-93 +28-28,28-50 +10-82,81-83 +77-82,77-82 +33-63,49-63 +2-84,89-91 +37-90,36-91 +46-85,45-85 +97-97,14-97 +5-18,6-19 +7-94,6-95 +17-87,12-86 +11-85,39-85 +7-94,7-93 +9-98,9-96 +18-18,19-96 +62-62,34-62 +24-36,24-91 +72-91,4-91 +7-84,7-83 +9-93,9-87 +22-99,21-99 +32-46,31-32 +32-70,69-97 +13-89,12-88 +10-10,11-89 +46-46,47-64 +51-51,24-52 +5-51,3-3 +46-90,99-99 +6-96,5-95 +50-96,50-97 +96-96,4-70 +13-36,12-35 +19-90,13-20 +12-43,42-95 +1-83,1-84 +3-5,4-70 +24-97,25-98 +27-40,1-50 +37-82,36-83 +47-95,47-94 +2-80,2-58 +64-83,63-87 +42-52,41-44 +26-97,1-97 +35-45,35-78 +6-45,28-82 +11-17,11-16 +67-67,44-67 +2-95,2-94 +22-95,22-94 +20-43,21-92 +33-60,59-76 +6-75,7-75 +3-90,96-99 +38-76,41-76 +18-98,6-19 +2-65,64-77 +3-88,2-88 +14-94,13-93 +40-89,71-99 +44-93,44-72 +48-62,48-61 +6-27,6-26 +43-53,43-54 +4-97,36-98 +8-13,12-83 +15-96,7-96 +18-91,17-18 +11-13,12-55 +31-92,19-94 +44-87,14-45 +18-51,17-18 +23-24,27-27 +23-46,24-88 +12-90,13-90 +37-70,34-70 +1-98,88-98 +2-93,6-95 +73-99,74-98 +4-46,2-46 +50-52,51-75 +45-91,46-90 +11-85,58-94 +26-43,26-44 +56-95,55-94 +10-93,11-92 +1-99,1-99 +8-95,7-7 +19-69,9-18 +18-90,9-60 +74-93,13-73 +62-90,61-72 +7-53,52-95 +44-82,4-44 +17-88,17-88 +26-27,26-89 +1-9,1-62 +13-40,39-62 +2-93,1-92 +91-91,17-91 +57-58,58-85 +23-98,97-99 +16-48,16-48 +25-61,61-87 +14-47,13-84 +46-96,47-94 +8-98,7-99 +3-5,4-97 +38-83,28-82 +7-99,6-34 +23-91,38-84 +33-35,34-63 +14-55,55-55 +34-50,11-35 +3-69,4-69 +67-99,99-99 +38-94,2-59 +2-98,2-97 +77-79,42-78 +6-45,44-45 +39-79,61-93 +5-92,5-97 +4-61,3-64 +47-48,48-67 +11-23,10-23 +2-99,9-99 +31-99,30-81 +28-87,29-88 +8-31,2-13 +3-17,16-83 +29-58,57-59 +4-75,15-35 +49-94,48-93 +23-85,84-84 +7-92,7-97 +53-91,91-97 +26-95,1-95 +9-22,7-9 +13-63,62-95 +54-55,54-97 +80-88,79-88 +1-44,2-44 +3-83,1-4 +95-95,26-95 +23-26,23-26 +19-35,19-34 +17-34,34-34 +39-89,75-97 +42-84,84-84 +60-95,61-94 +6-88,5-88 +2-68,1-68 +16-76,15-16 +30-93,9-96 +10-91,11-91 +36-88,35-36 +24-67,45-66 +41-58,16-96 +84-85,83-85 +10-59,18-59 +33-70,69-69 +58-69,57-58 +4-6,68-85 +3-91,91-91 +99-99,2-98 +33-94,93-95 +68-69,27-68 +4-4,5-14 +98-98,2-97 +5-91,90-92 +2-91,2-90 +37-81,80-80 +9-51,54-69 +45-59,46-59 +8-69,7-69 +20-21,21-29 +45-83,88-91 +22-87,20-21 +4-77,3-76 +50-81,49-49 +47-59,58-78 +22-85,21-84 +3-86,7-91 +63-83,62-63 +10-58,7-57 +14-88,14-88 +18-67,16-28 +39-50,39-42 +9-85,8-85 +7-28,7-8 +72-72,19-73 +25-27,25-56 +40-43,40-43 +10-26,25-25 +29-99,30-99 +9-14,13-92 +9-17,10-56 +93-94,1-94 +31-67,30-68 +15-84,84-84 +45-46,8-46 +10-93,10-94 +31-48,5-94 +49-93,92-92 +45-80,40-67 +63-94,7-93 +2-94,1-66 +26-44,41-53 +51-94,1-94 +5-93,4-92 +14-86,85-86 +9-52,8-10 +24-61,23-62 +1-78,77-79 +6-97,17-96 +43-65,19-43 +45-99,35-99 +58-58,20-57 +22-89,64-85 +12-22,21-80 +6-36,36-36 +1-92,87-92 +26-99,26-97 +7-85,1-85 +20-98,20-98 +2-51,2-54 +73-95,74-95 +16-54,15-17 +4-95,4-96 +11-98,11-98 +67-79,66-80 +61-61,62-63 +50-62,12-50 +9-80,9-81 +1-1,3-87 +16-61,15-23 +31-35,34-40 +13-89,12-90 +89-91,90-95 +20-60,12-81 +2-65,1-66 +38-96,56-96 +23-23,12-22 +96-96,11-95 +8-37,36-97 +2-26,1-26 +30-71,37-73 +71-87,70-70 +31-99,31-82 +6-39,2-7 +1-99,3-99 +29-73,32-81 +33-37,33-36 +15-41,14-40 +32-33,33-90 +23-85,22-24 +26-93,26-86 +3-97,2-98 +10-92,92-94 +29-55,30-55 +9-75,29-96 +6-94,93-97 +63-63,52-63 +24-78,5-5 +38-67,37-67 +14-32,13-32 +35-94,36-94 +23-92,24-92 +9-36,8-36 +63-95,62-62 +37-78,3-78 +34-51,17-37 +84-85,13-84 +1-95,1-98 +18-56,18-19 +17-78,13-16 +6-52,15-44 +13-33,14-33 +10-88,11-89 +61-80,61-79 +6-98,98-98 +1-91,1-85 +60-86,10-87 +3-96,95-98 +34-99,33-98 +19-21,20-91 +7-96,8-96 +2-90,2-90 +36-96,36-96 +76-96,60-75 +8-44,7-44 +9-28,10-28 +10-95,7-95 +56-68,29-82 +10-97,18-99 +68-97,45-97 +19-92,2-92 +6-97,5-97 +74-74,73-73 +20-70,20-70 +18-66,19-67 +91-94,7-92 +4-47,4-47 +11-93,12-93 +33-54,32-53 +54-64,55-63 +20-99,20-21 +39-82,56-68 +4-36,36-47 +30-41,25-31 +65-69,69-69 +20-71,71-74 +16-36,24-54 +2-96,95-98 +11-70,10-12 +5-36,35-95 +36-92,36-37 +37-78,32-87 +28-89,15-88 +9-63,62-62 +2-94,4-94 +85-85,72-85 +30-73,7-31 +10-36,10-36 +75-97,47-95 +23-23,4-24 +49-88,36-87 +25-25,26-42 +33-86,26-86 +13-76,76-76 +60-60,60-60 +3-23,24-24 +4-85,10-85 +7-38,8-37 +40-85,41-84 +46-86,47-87 +8-38,7-38 +76-78,9-77 +80-94,57-94 +86-96,86-97 +35-89,10-67 +45-94,35-81 +8-93,7-8 +22-48,23-47 +21-94,20-94 +63-72,60-73 +89-89,57-90 +34-41,41-78 +5-5,2-6 +1-79,1-80 +79-82,80-83 +37-37,38-53 +65-93,64-96 +33-85,33-33 +7-98,44-57 +2-5,4-69 +19-69,18-68 +80-81,7-81 +19-99,20-99 +5-34,4-14 +4-88,88-89 +51-91,59-93 +33-60,33-58 +32-67,27-94 +8-98,7-8 +34-43,44-69 +10-80,10-11 +7-73,11-73 +23-69,24-69 +68-83,6-68 +2-35,5-35 +1-4,3-90 +88-89,30-89 +57-99,14-63 +16-29,17-28 +67-82,62-77 +20-65,19-66 +37-69,61-63 +58-94,94-94 +1-72,72-72 +7-11,10-47 +18-59,59-59 +57-57,37-58 +60-81,54-72 +2-86,1-87 +7-78,7-77 +59-69,59-65 +15-16,15-73 +15-82,16-92 +8-88,57-88 +36-92,36-88 +59-60,24-59 +4-22,1-3 +44-60,45-60 +90-95,35-89 +21-30,20-30 +4-83,83-83 +16-99,7-17 +11-18,19-95 +45-94,44-94 +3-11,3-12 +9-70,8-10 +1-8,8-78 +1-5,4-97 +30-55,29-31 +7-89,8-89 +47-47,46-48 +66-96,38-84 +33-34,33-73 +2-23,1-22 +52-64,53-91 +9-34,19-61 +25-57,25-57 +1-98,97-98 +79-89,76-80 +28-80,28-80 +13-77,76-78 +3-88,2-88 +69-72,70-72 +91-91,22-91 +77-95,76-94 +84-92,84-91 +55-99,56-99 +1-91,2-91 +33-36,27-36 +79-84,62-74 +52-54,18-53 +26-37,25-27 +55-85,40-85 +58-74,10-59 +6-53,6-53 +42-49,42-47 +47-79,80-97 +11-24,25-91 +83-87,86-87 +1-88,1-96 +55-63,54-62 +76-76,8-76 +3-78,78-99 +1-86,8-96 +44-70,43-70 +25-27,26-91 +65-98,97-97 +14-64,15-65 +9-36,8-35 +78-84,77-85 +42-58,41-59 +60-92,59-60 +95-97,14-86 +8-82,7-83 +5-58,5-59 +5-99,6-99 +4-13,1-4 +57-86,43-58 +11-82,11-11 +4-87,1-5 +6-7,7-11 +6-22,2-7 +15-49,14-49 +39-97,99-99 +12-49,13-90 +70-80,71-80 +46-95,66-94 +94-98,13-94 +3-11,11-11 +13-23,12-23 +11-98,11-98 +20-99,8-20 +28-87,27-87 +16-21,21-61 +2-91,7-56 +7-7,8-71 +74-74,67-74 +23-88,1-74 +1-99,2-98 +34-85,40-86 +6-85,6-68 +28-31,31-49 +13-40,13-40 +55-56,56-56 +70-72,26-71 +93-94,34-93 +45-75,44-75 +4-10,10-50 +65-74,65-77 +39-87,6-59 +11-85,3-85 +8-46,12-46 +9-9,10-95 +30-41,27-92 +13-97,9-96 +21-62,22-63 +54-69,52-53 +17-99,18-99 +75-92,7-76 +38-39,38-90 +50-69,49-50 +65-87,65-99 +6-98,6-96 +34-62,40-90 +33-47,34-48 +33-95,34-95 +42-99,43-98 +70-85,1-71 +37-63,38-63 +12-17,17-72 +28-31,29-92 +18-69,8-17 +41-96,40-95 +7-86,7-86 +68-78,67-73 +4-6,7-99 +8-86,86-87 +5-6,6-37 +88-94,89-95 +33-74,33-74 +86-87,86-87 +29-55,62-78 +23-38,13-38 +9-44,10-89 +18-67,19-97 +3-83,1-66 +55-81,55-81 +6-72,7-71 +5-55,6-55 +14-99,14-97 +39-83,16-40 +11-73,55-73 +4-68,5-67 +66-73,26-73 +3-92,3-91 +36-59,33-35 +72-73,4-73 +1-83,2-83 +25-88,25-43 +45-71,45-73 +9-96,95-95 +4-5,7-23 +48-50,4-49 +45-96,44-96 +50-87,49-50 +98-99,27-96 +4-40,40-78 +3-94,94-94 +7-34,25-26 +72-79,23-72 +2-84,3-83 +78-96,25-78 +77-94,73-94 +63-66,62-65 +25-80,24-80 +10-33,78-90 +25-55,24-54 +58-62,23-64 +61-62,62-84 +83-83,46-84 +23-30,31-92 +8-95,94-99 +35-65,34-64 +12-19,12-18 +21-25,24-43 +54-79,54-84 +37-56,37-57 +77-77,15-77 +57-88,55-88 +7-93,8-93 +5-89,3-66 +33-63,32-33 +9-52,51-96 +7-97,6-66 +3-58,1-3 +26-85,25-84 +11-63,10-12 +52-54,53-54 +23-68,22-22 +14-96,14-95 +4-41,3-21 +4-6,5-83 +97-98,1-97 +13-90,73-88 +11-15,7-10 +65-80,24-81 +48-82,48-83 +81-87,4-81 +40-47,40-47 +15-87,14-75 +30-50,29-30 +26-65,64-64 +37-37,7-37 +51-51,49-51 +5-71,7-70 +18-54,53-54 +47-48,48-60 +26-98,25-97 +5-6,5-81 +3-98,3-99 +9-22,21-22 +4-97,1-1 +36-36,37-77 +22-35,4-23 +18-95,19-96 +14-94,14-96 +43-46,47-50 +80-91,81-91 +20-67,5-81 +8-87,9-86 +30-69,23-30 +96-99,2-96 +59-75,74-76 +20-66,19-66 +10-85,10-65 +9-82,8-38 +32-66,54-66 +23-64,63-65 +1-89,1-90 +1-95,1-94 +12-82,7-64 +55-66,60-66 +3-93,3-42 +45-87,15-88 +3-50,3-76 +7-86,8-79 +39-39,40-85 +57-86,52-52 +17-84,16-18 +63-99,64-99 +83-94,83-94 +12-85,11-86 +18-89,17-17 +12-25,13-87 +9-12,10-15 +62-92,85-88 +26-97,26-94 +16-94,94-94 +47-83,47-83 +25-86,85-88 +1-99,1-98 +47-87,87-99 +9-99,9-97 +8-73,2-73 +45-47,46-85 +18-95,18-96 +41-41,40-41 +1-4,4-61 +4-95,5-96 +8-79,78-80 +6-81,9-81 +7-90,1-7 +6-22,6-22 +32-82,15-59 +19-93,13-93 +43-48,12-99 +45-45,46-59 +27-69,1-28 +78-78,59-79 +12-57,57-57 +4-39,4-77 +55-91,91-91 +27-87,92-95 +83-87,87-98 +22-84,22-31 +3-91,3-22 +45-86,57-62 +68-82,55-82 +96-98,3-97 +12-32,1-32 +37-71,37-71 +31-59,31-59 +86-88,79-88 +4-92,3-3 +40-91,17-91 +51-52,52-74 +2-97,1-98 +50-83,82-83 +34-34,35-41 +6-47,5-5 +5-65,5-47 +32-77,33-85 +21-68,22-67 +12-45,46-95 +45-48,38-46 +39-84,35-40 +4-60,3-4 +67-83,68-84 +24-92,25-93 diff --git a/2022/go/04/sample1 b/2022/go/04/sample1 new file mode 100644 index 0000000..99a66c5 --- /dev/null +++ b/2022/go/04/sample1 @@ -0,0 +1,6 @@ +2-4,6-8 +2-3,4-5 +5-7,7-9 +2-8,3-7 +6-6,4-6 +2-6,4-8 \ No newline at end of file diff --git a/2022/go/Makefile b/2022/go/Makefile new file mode 100644 index 0000000..b582cdc --- /dev/null +++ b/2022/go/Makefile @@ -0,0 +1,31 @@ +COOKIE = 53616c7465645f5fb99dda36ae761920e1f0d561f3761dbaab58f2dcfe046a477f89881d95a683f92a0ac924a6e42c9ab614591a5716915c5de56fe977aa0881 + +.ONESHELL: + +.PHONY = new create init get_input get_sample +NUMBER := $$(($(shell ls -D | grep "^[0-2][0-9]$$" | wc -l) + 1)) +NUMBER_DIR := $(shell printf "%02d" $(NUMBER)) +# NUMBER := $(shell ls -D | wc -l) + +# https://adventofcode.com/2022/day/1/input + +new: create init get_input get_sample + +create: + @echo "Creating $(NUMBER)..." + @cp -r template/ $(NUMBER_DIR)/ + +init: + @echo "Initiliazing go module..." + @cd $(NUMBER_DIR) + @rm go.mod + @go mod init aoc/$(NUMBER) + @go mod tidy + +get_input: + @echo "Getting input..." + @wget -q -O $(NUMBER_DIR)/input --header "Cookie: session=$(COOKIE)" https://adventofcode.com/2022/day/$(NUMBER)/input + +get_sample: + @echo "Getting sample... Is it in your clipboard? I surely hope so..." + @xclip -o > $(NUMBER_DIR)/sample1 diff --git a/2022/go/template/answer.go b/2022/go/template/answer.go new file mode 100644 index 0000000..cd84e86 --- /dev/null +++ b/2022/go/template/answer.go @@ -0,0 +1,52 @@ +package main + +import ( + "bufio" + "fmt" + "log" + "os" +) + +type Input struct{} + +func input(filename string) *Input { + file, err := os.Open(filename) + check(err, "Couldn't open %q", filename) + defer file.Close() + + input := &Input{} + + scanner := bufio.NewScanner(file) + + scanner.Split(bufio.ScanLines) + + for scanner.Scan() { + line := scanner.Text() + } + + return input +} + +func result(inp *Input, part int8) string { + var res string + + if part == 1 { + } else { + } + + return res +} + +func check(e error, msg string, vals ...any) { + if e != nil { + log.Printf("ERROR: "+msg, vals) + panic(e) + } +} + +func main() { + result := result(input("sample1"), 1) + + log.Println(result) + fmt.Println(result) +} diff --git a/2022/go/template/answer_test.go b/2022/go/template/answer_test.go new file mode 100644 index 0000000..3c000f7 --- /dev/null +++ b/2022/go/template/answer_test.go @@ -0,0 +1,38 @@ +package main + +import ( + "reflect" + "testing" +) + +func TestInputSample1(t *testing.T) { + filename := "sample1" + expected := &Input{} + var got *Input = input(filename) + + if !reflect.DeepEqual(expected, got) { + t.Errorf("input(%q) = %v, want %v", filename, got, expected) + } +} + +func TestResult(t *testing.T) { + tests := []struct { + part int8 + filename string + expected string + }{ + {1, "sample1", ""}, + {1, "input", ""}, + + // {2, "sample1", ""}, + // {2, "input", ""}, + } + + for _, test := range tests { + var got string = result(input(test.filename), test.part) + + if got != test.expected { + t.Errorf("result = %q, want %q", got, test.expected) + } + } +} diff --git a/2022/go/template/go.mod b/2022/go/template/go.mod new file mode 100644 index 0000000..7c96e70 --- /dev/null +++ b/2022/go/template/go.mod @@ -0,0 +1,3 @@ +module aoc/template + +go 1.20