From f133e157a1611d74321ac45bb3a4af7dc6981a5e Mon Sep 17 00:00:00 2001 From: Alan R Evans Date: Thu, 16 Nov 2023 10:48:53 +0000 Subject: [PATCH] re-organise repo --- .../Gareth solution Python}/1.py | 0 .../Gareth solution Python}/2.py | 0 .../Gareth solution Python}/5pt1.py | 0 .../Gareth solution Python}/5pt2.py | 0 .../Gareth solution Python}/6.py | 0 .../Gareth solution Python}/ConvertToArray.py | 0 .../Gareth solution Python}/Day3pt2.py | 0 {day1 => 2021/day1}/day1.erl | 0 {day1 => 2021/day1}/day1_p1.hs | 0 {day1 => 2021/day1}/day1_p2.hs | 0 {day1 => 2021/day1}/input.txt | 0 {day1 => 2021/day1}/test.txt | 0 {day10 => 2021/day10}/day10.erl | 0 {day10 => 2021/day10}/input.txt | 0 {day11 => 2021/day11}/day11.erl | 0 {day11 => 2021/day11}/input.txt | 0 {day12 => 2021/day12}/day12.erl | 0 {day12 => 2021/day12}/input.txt | 0 {day13 => 2021/day13}/commmands.txt | 0 {day13 => 2021/day13}/day13.erl | 0 {day13 => 2021/day13}/input.txt | 0 {day14 => 2021/day14}/day14.erl | 0 {day14 => 2021/day14}/input.txt | 0 {day15 => 2021/day15}/day15.erl | 0 {day15 => 2021/day15}/input.test | 0 {day15 => 2021/day15}/input.txt | 0 {day16 => 2021/day16}/day16.erl | 0 {day16 => 2021/day16}/input.txt | 0 {day17 => 2021/day17}/day17.erl | 0 {day17 => 2021/day17}/diagram.txt | 0 {day17 => 2021/day17}/input.txt | 0 {day18 => 2021/day18}/day18.erl | 0 {day18 => 2021/day18}/input.txt | 0 {day2 => 2021/day2}/day2.erl | 0 {day3 => 2021/day3}/day3 | Bin {day3 => 2021/day3}/day3.erl | 0 {day3 => 2021/day3}/day3.hs | 0 {day4 => 2021/day4}/boards.txt | 0 {day4 => 2021/day4}/day4.erl | 0 {day5 => 2021/day5}/day5.erl | 0 {day5 => 2021/day5}/day5.hs | 0 {day5 => 2021/day5}/input.txt | 0 {day6 => 2021/day6}/day6.erl | 0 {day6 => 2021/day6}/input.txt | 0 {day7 => 2021/day7}/day7.erl | 0 {day7 => 2021/day7}/input.txt | 0 {day8 => 2021/day8}/day8.erl | 0 {day8 => 2021/day8}/input.txt | 0 {day9 => 2021/day9}/day9.erl | 0 {day9 => 2021/day9}/input.txt | 0 2022/go/day01/day01.go | 44 + 2022/go/day01/day01_test.go | 43 + 2022/go/day01/input.txt | 2255 +++++++++++++++ 2022/go/day02/day02.go | 89 + 2022/go/day02/day02_test.go | 23 + 2022/go/day02/input.txt | 2500 +++++++++++++++++ 2022/go/day03/day03.go | 54 + 2022/go/day03/day03_test.go | 29 + 2022/go/day03/input.txt | 300 ++ 2022/go/day04/day04.go | 59 + 2022/go/day04/day04_test.go | 29 + 2022/go/day04/input.txt | 1000 +++++++ 2022/go/day05/day05.go | 93 + 2022/go/day05/day05_test.go | 17 + 2022/go/day05/input.txt | 514 ++++ 2022/go/day06/day06.go | 35 + 2022/go/day06/day06_test.go | 17 + 2022/go/day06/input.txt | 1 + 2022/go/day07/day07.go | 112 + 2022/go/day07/day07_test.go | 63 + 2022/go/day07/input.txt | 1051 +++++++ 2022/go/day08/day08.go | 89 + 2022/go/day08/day08_test.go | 27 + 2022/go/day08/input.txt | 99 + 2022/go/day09/day09.go | 119 + 2022/go/day09/day09_test.go | 25 + 2022/go/day09/input.txt | 2000 +++++++++++++ 2022/go/day10/day10.go | 77 + 2022/go/day10/day10_test.go | 314 +++ 2022/go/day10/input.txt | 140 + 2022/go/go.mod | 18 + 2022/go/go.sum | 27 + 2022/go/main.go | 122 + 2022/go/utils/grid2d/grid2d.go | 74 + 2022/go/utils/inputs/inputs.go | 45 + 2022/go/utils/sparseGrid/sparseGrid.go | 81 + 2022/go/utils/utils.go | 207 ++ 87 files changed, 11792 insertions(+) rename {Gareth solution Python => 2021/Gareth solution Python}/1.py (100%) rename {Gareth solution Python => 2021/Gareth solution Python}/2.py (100%) rename {Gareth solution Python => 2021/Gareth solution Python}/5pt1.py (100%) rename {Gareth solution Python => 2021/Gareth solution Python}/5pt2.py (100%) rename {Gareth solution Python => 2021/Gareth solution Python}/6.py (100%) rename {Gareth solution Python => 2021/Gareth solution Python}/ConvertToArray.py (100%) rename {Gareth solution Python => 2021/Gareth solution Python}/Day3pt2.py (100%) rename {day1 => 2021/day1}/day1.erl (100%) rename {day1 => 2021/day1}/day1_p1.hs (100%) rename {day1 => 2021/day1}/day1_p2.hs (100%) rename {day1 => 2021/day1}/input.txt (100%) rename {day1 => 2021/day1}/test.txt (100%) rename {day10 => 2021/day10}/day10.erl (100%) rename {day10 => 2021/day10}/input.txt (100%) rename {day11 => 2021/day11}/day11.erl (100%) rename {day11 => 2021/day11}/input.txt (100%) rename {day12 => 2021/day12}/day12.erl (100%) rename {day12 => 2021/day12}/input.txt (100%) rename {day13 => 2021/day13}/commmands.txt (100%) rename {day13 => 2021/day13}/day13.erl (100%) rename {day13 => 2021/day13}/input.txt (100%) rename {day14 => 2021/day14}/day14.erl (100%) rename {day14 => 2021/day14}/input.txt (100%) rename {day15 => 2021/day15}/day15.erl (100%) rename {day15 => 2021/day15}/input.test (100%) rename {day15 => 2021/day15}/input.txt (100%) rename {day16 => 2021/day16}/day16.erl (100%) rename {day16 => 2021/day16}/input.txt (100%) rename {day17 => 2021/day17}/day17.erl (100%) rename {day17 => 2021/day17}/diagram.txt (100%) rename {day17 => 2021/day17}/input.txt (100%) rename {day18 => 2021/day18}/day18.erl (100%) rename {day18 => 2021/day18}/input.txt (100%) rename {day2 => 2021/day2}/day2.erl (100%) rename {day3 => 2021/day3}/day3 (100%) rename {day3 => 2021/day3}/day3.erl (100%) rename {day3 => 2021/day3}/day3.hs (100%) rename {day4 => 2021/day4}/boards.txt (100%) rename {day4 => 2021/day4}/day4.erl (100%) rename {day5 => 2021/day5}/day5.erl (100%) rename {day5 => 2021/day5}/day5.hs (100%) rename {day5 => 2021/day5}/input.txt (100%) rename {day6 => 2021/day6}/day6.erl (100%) rename {day6 => 2021/day6}/input.txt (100%) rename {day7 => 2021/day7}/day7.erl (100%) rename {day7 => 2021/day7}/input.txt (100%) rename {day8 => 2021/day8}/day8.erl (100%) rename {day8 => 2021/day8}/input.txt (100%) rename {day9 => 2021/day9}/day9.erl (100%) rename {day9 => 2021/day9}/input.txt (100%) create mode 100644 2022/go/day01/day01.go create mode 100644 2022/go/day01/day01_test.go create mode 100644 2022/go/day01/input.txt create mode 100644 2022/go/day02/day02.go create mode 100644 2022/go/day02/day02_test.go create mode 100644 2022/go/day02/input.txt create mode 100644 2022/go/day03/day03.go create mode 100644 2022/go/day03/day03_test.go create mode 100644 2022/go/day03/input.txt create mode 100644 2022/go/day04/day04.go create mode 100644 2022/go/day04/day04_test.go create mode 100644 2022/go/day04/input.txt create mode 100644 2022/go/day05/day05.go create mode 100644 2022/go/day05/day05_test.go create mode 100644 2022/go/day05/input.txt create mode 100644 2022/go/day06/day06.go create mode 100644 2022/go/day06/day06_test.go create mode 100644 2022/go/day06/input.txt create mode 100644 2022/go/day07/day07.go create mode 100644 2022/go/day07/day07_test.go create mode 100644 2022/go/day07/input.txt create mode 100644 2022/go/day08/day08.go create mode 100644 2022/go/day08/day08_test.go create mode 100644 2022/go/day08/input.txt create mode 100644 2022/go/day09/day09.go create mode 100644 2022/go/day09/day09_test.go create mode 100644 2022/go/day09/input.txt create mode 100644 2022/go/day10/day10.go create mode 100644 2022/go/day10/day10_test.go create mode 100644 2022/go/day10/input.txt create mode 100644 2022/go/go.mod create mode 100644 2022/go/go.sum create mode 100644 2022/go/main.go create mode 100644 2022/go/utils/grid2d/grid2d.go create mode 100644 2022/go/utils/inputs/inputs.go create mode 100644 2022/go/utils/sparseGrid/sparseGrid.go create mode 100644 2022/go/utils/utils.go diff --git a/Gareth solution Python/1.py b/2021/Gareth solution Python/1.py similarity index 100% rename from Gareth solution Python/1.py rename to 2021/Gareth solution Python/1.py diff --git a/Gareth solution Python/2.py b/2021/Gareth solution Python/2.py similarity index 100% rename from Gareth solution Python/2.py rename to 2021/Gareth solution Python/2.py diff --git a/Gareth solution Python/5pt1.py b/2021/Gareth solution Python/5pt1.py similarity index 100% rename from Gareth solution Python/5pt1.py rename to 2021/Gareth solution Python/5pt1.py diff --git a/Gareth solution Python/5pt2.py b/2021/Gareth solution Python/5pt2.py similarity index 100% rename from Gareth solution Python/5pt2.py rename to 2021/Gareth solution Python/5pt2.py diff --git a/Gareth solution Python/6.py b/2021/Gareth solution Python/6.py similarity index 100% rename from Gareth solution Python/6.py rename to 2021/Gareth solution Python/6.py diff --git a/Gareth solution Python/ConvertToArray.py b/2021/Gareth solution Python/ConvertToArray.py similarity index 100% rename from Gareth solution Python/ConvertToArray.py rename to 2021/Gareth solution Python/ConvertToArray.py diff --git a/Gareth solution Python/Day3pt2.py b/2021/Gareth solution Python/Day3pt2.py similarity index 100% rename from Gareth solution Python/Day3pt2.py rename to 2021/Gareth solution Python/Day3pt2.py diff --git a/day1/day1.erl b/2021/day1/day1.erl similarity index 100% rename from day1/day1.erl rename to 2021/day1/day1.erl diff --git a/day1/day1_p1.hs b/2021/day1/day1_p1.hs similarity index 100% rename from day1/day1_p1.hs rename to 2021/day1/day1_p1.hs diff --git a/day1/day1_p2.hs b/2021/day1/day1_p2.hs similarity index 100% rename from day1/day1_p2.hs rename to 2021/day1/day1_p2.hs diff --git a/day1/input.txt b/2021/day1/input.txt similarity index 100% rename from day1/input.txt rename to 2021/day1/input.txt diff --git a/day1/test.txt b/2021/day1/test.txt similarity index 100% rename from day1/test.txt rename to 2021/day1/test.txt diff --git a/day10/day10.erl b/2021/day10/day10.erl similarity index 100% rename from day10/day10.erl rename to 2021/day10/day10.erl diff --git a/day10/input.txt b/2021/day10/input.txt similarity index 100% rename from day10/input.txt rename to 2021/day10/input.txt diff --git a/day11/day11.erl b/2021/day11/day11.erl similarity index 100% rename from day11/day11.erl rename to 2021/day11/day11.erl diff --git a/day11/input.txt b/2021/day11/input.txt similarity index 100% rename from day11/input.txt rename to 2021/day11/input.txt diff --git a/day12/day12.erl b/2021/day12/day12.erl similarity index 100% rename from day12/day12.erl rename to 2021/day12/day12.erl diff --git a/day12/input.txt b/2021/day12/input.txt similarity index 100% rename from day12/input.txt rename to 2021/day12/input.txt diff --git a/day13/commmands.txt b/2021/day13/commmands.txt similarity index 100% rename from day13/commmands.txt rename to 2021/day13/commmands.txt diff --git a/day13/day13.erl b/2021/day13/day13.erl similarity index 100% rename from day13/day13.erl rename to 2021/day13/day13.erl diff --git a/day13/input.txt b/2021/day13/input.txt similarity index 100% rename from day13/input.txt rename to 2021/day13/input.txt diff --git a/day14/day14.erl b/2021/day14/day14.erl similarity index 100% rename from day14/day14.erl rename to 2021/day14/day14.erl diff --git a/day14/input.txt b/2021/day14/input.txt similarity index 100% rename from day14/input.txt rename to 2021/day14/input.txt diff --git a/day15/day15.erl b/2021/day15/day15.erl similarity index 100% rename from day15/day15.erl rename to 2021/day15/day15.erl diff --git a/day15/input.test b/2021/day15/input.test similarity index 100% rename from day15/input.test rename to 2021/day15/input.test diff --git a/day15/input.txt b/2021/day15/input.txt similarity index 100% rename from day15/input.txt rename to 2021/day15/input.txt diff --git a/day16/day16.erl b/2021/day16/day16.erl similarity index 100% rename from day16/day16.erl rename to 2021/day16/day16.erl diff --git a/day16/input.txt b/2021/day16/input.txt similarity index 100% rename from day16/input.txt rename to 2021/day16/input.txt diff --git a/day17/day17.erl b/2021/day17/day17.erl similarity index 100% rename from day17/day17.erl rename to 2021/day17/day17.erl diff --git a/day17/diagram.txt b/2021/day17/diagram.txt similarity index 100% rename from day17/diagram.txt rename to 2021/day17/diagram.txt diff --git a/day17/input.txt b/2021/day17/input.txt similarity index 100% rename from day17/input.txt rename to 2021/day17/input.txt diff --git a/day18/day18.erl b/2021/day18/day18.erl similarity index 100% rename from day18/day18.erl rename to 2021/day18/day18.erl diff --git a/day18/input.txt b/2021/day18/input.txt similarity index 100% rename from day18/input.txt rename to 2021/day18/input.txt diff --git a/day2/day2.erl b/2021/day2/day2.erl similarity index 100% rename from day2/day2.erl rename to 2021/day2/day2.erl diff --git a/day3/day3 b/2021/day3/day3 similarity index 100% rename from day3/day3 rename to 2021/day3/day3 diff --git a/day3/day3.erl b/2021/day3/day3.erl similarity index 100% rename from day3/day3.erl rename to 2021/day3/day3.erl diff --git a/day3/day3.hs b/2021/day3/day3.hs similarity index 100% rename from day3/day3.hs rename to 2021/day3/day3.hs diff --git a/day4/boards.txt b/2021/day4/boards.txt similarity index 100% rename from day4/boards.txt rename to 2021/day4/boards.txt diff --git a/day4/day4.erl b/2021/day4/day4.erl similarity index 100% rename from day4/day4.erl rename to 2021/day4/day4.erl diff --git a/day5/day5.erl b/2021/day5/day5.erl similarity index 100% rename from day5/day5.erl rename to 2021/day5/day5.erl diff --git a/day5/day5.hs b/2021/day5/day5.hs similarity index 100% rename from day5/day5.hs rename to 2021/day5/day5.hs diff --git a/day5/input.txt b/2021/day5/input.txt similarity index 100% rename from day5/input.txt rename to 2021/day5/input.txt diff --git a/day6/day6.erl b/2021/day6/day6.erl similarity index 100% rename from day6/day6.erl rename to 2021/day6/day6.erl diff --git a/day6/input.txt b/2021/day6/input.txt similarity index 100% rename from day6/input.txt rename to 2021/day6/input.txt diff --git a/day7/day7.erl b/2021/day7/day7.erl similarity index 100% rename from day7/day7.erl rename to 2021/day7/day7.erl diff --git a/day7/input.txt b/2021/day7/input.txt similarity index 100% rename from day7/input.txt rename to 2021/day7/input.txt diff --git a/day8/day8.erl b/2021/day8/day8.erl similarity index 100% rename from day8/day8.erl rename to 2021/day8/day8.erl diff --git a/day8/input.txt b/2021/day8/input.txt similarity index 100% rename from day8/input.txt rename to 2021/day8/input.txt diff --git a/day9/day9.erl b/2021/day9/day9.erl similarity index 100% rename from day9/day9.erl rename to 2021/day9/day9.erl diff --git a/day9/input.txt b/2021/day9/input.txt similarity index 100% rename from day9/input.txt rename to 2021/day9/input.txt diff --git a/2022/go/day01/day01.go b/2022/go/day01/day01.go new file mode 100644 index 0000000..dac5b7c --- /dev/null +++ b/2022/go/day01/day01.go @@ -0,0 +1,44 @@ +package day01 + +import ( + "sort" + "strings" + + "adventofcode2022/utils" +) + +type elf struct { + calories int +} + +func Part1(input string) int { + elves := common(input) + return elves[0].calories +} + +func Part2(input string) int { + elves := common(input) + return elves[0].calories + elves[1].calories + elves[2].calories +} + +func common(input string) []elf { + lines := strings.Split(input, "\n") + + elves := []elf{} + e := elf{} + for _, line := range lines { + if line == "" { + elves = append(elves, e) + e = elf{} + } else { + e.calories += utils.MustAtoi(line) + } + } + elves = append(elves, e) + + sort.Slice(elves, func(i, j int) bool { + return elves[i].calories > elves[j].calories + }) + + return elves +} \ No newline at end of file diff --git a/2022/go/day01/day01_test.go b/2022/go/day01/day01_test.go new file mode 100644 index 0000000..2e45d89 --- /dev/null +++ b/2022/go/day01/day01_test.go @@ -0,0 +1,43 @@ +package day01 + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestPart1(t *testing.T) { + r := Part1(`1000 +2000 +3000 + +4000 + +5000 +6000 + +7000 +8000 +9000 + +10000`) + assert.Equal(t, 24000, r) +} + +func TestPart2(t *testing.T) { + r := Part2(`1000 +2000 +3000 + +4000 + +5000 +6000 + +7000 +8000 +9000 + +10000`) + assert.Equal(t, 45000, r) +} diff --git a/2022/go/day01/input.txt b/2022/go/day01/input.txt new file mode 100644 index 0000000..a9fff82 --- /dev/null +++ b/2022/go/day01/input.txt @@ -0,0 +1,2255 @@ +5324 +5176 +2197 +2701 +6185 +3901 +5392 +2065 +6467 +6085 +5062 +1841 +1197 +1318 + +4901 +3443 +1403 +5570 +4336 +5672 +2532 +5627 +6038 +1099 +4305 +2317 +1382 +3226 +4427 + +2612 +15638 + +4118 +4687 +2243 +3532 +2089 +3937 +1146 +5069 +5728 +2962 +3099 +5882 +5448 +6064 + +2642 +7996 +5334 +10384 +1106 +2742 + +3064 +3506 +2566 +5241 +2705 +5973 +5482 +1689 +1797 +6098 +3964 +2592 +2700 +5569 +4305 + +1307 +2204 +3618 +4795 +7853 +6103 +5248 +5989 +1451 +5524 +2572 + +7207 +5428 +8504 +3861 +1025 +3600 +2850 +3363 +4283 +3695 + +21536 +34998 + +7332 +7390 +4755 +1006 +6221 +2081 +4894 +6376 +3893 +2797 +4448 +2961 + +6544 +13080 +9331 +4452 +11569 + +8130 +7731 +4130 +2905 +5849 +3086 +1386 +8160 +4405 +4456 + +1673 +5591 +6628 +3577 +2097 +2540 +4884 +3704 +4340 +5609 +5671 +2386 + +1454 +2458 +2099 +2123 +3529 +1500 +2574 +1414 +1570 +5540 +4674 +2596 +5112 +4553 +3538 + +3089 +20620 +8662 + +7318 +6430 +3187 +4619 +7214 +7950 +5435 +1408 +4418 +6811 +6619 + +14465 +13716 +4698 +18846 + +3262 +3532 +3052 +8765 +7883 +4037 +3531 +1275 +1699 + +7331 +1567 +1820 +2593 +3537 +2140 +6760 +5755 +4144 +2073 +4602 +4128 + +6104 +8972 +19892 + +17252 +21573 +9351 + +67201 + +4294 +7766 + +19774 + +11565 +11046 +2842 +8393 + +7017 +9675 +6745 +13481 +13556 +4249 + +2107 +5225 +4963 +1119 +1573 +7933 +5257 +6803 +3414 +6156 +2593 + +3598 +2420 +2557 +2910 +6750 +2253 +5729 +6724 +6355 +1731 +4128 +4827 +6062 + +5367 +1916 +4804 +5871 +1210 +2265 +3945 +6557 +5711 +6611 +2373 + +10064 + +9038 +27653 + +2574 +6005 +11713 +2748 +10206 + +3404 +3885 +6447 +6270 +3738 +6098 +4455 +4285 +3386 +2148 +6238 +2457 +3971 +5009 + +1964 +7018 +3023 +13938 +2509 +9362 + +5570 +5928 +7596 +7327 +3867 +2127 +2473 +6631 +2514 +5685 + +17379 +5566 +7377 +11680 + +11618 +9050 +4052 +6359 +9340 +10670 +2206 + +3801 +7994 +1783 +8331 +8378 +8567 +6575 +6466 +6327 +7675 + +1727 +4854 +13316 +2277 +1002 + +11508 + +1466 +2783 +1248 +6891 +5062 +4676 +5392 + +2309 +4345 +4061 +2291 +6176 +2020 +1352 +4323 +5949 +3386 +1453 +6271 +2406 +3702 + +9874 +9051 +11016 +5825 +8846 +1554 +7739 + +23528 + +1043 +8194 +3368 +9066 +9089 +8174 + +10746 +9730 +11740 +10055 +7193 +13904 + +6215 +1885 +5229 +6669 +6959 +4974 +2120 +1298 +1430 +6121 + +14723 +32715 + +5783 +1098 +5175 +4285 +4773 +3161 +5007 +2226 +5436 +6077 +4460 +4532 +2250 +4365 +2067 + +6400 +2528 +2425 +3648 +2881 +3142 +6677 +5898 +2358 +6551 +2718 +1068 + +26003 +35903 + +5639 +2631 +5958 +5768 +1598 +2399 +2034 +5312 +5296 +2416 +4102 +5487 +4703 + +2570 +8366 +5181 +2445 +5162 +7602 +7173 +7287 +5544 + +7471 +1860 +6054 +4806 +8003 +7528 +1229 +8685 +7621 +8658 + +2772 +3368 +2152 +5375 +2609 +8107 +6980 +4483 +5277 +2887 + +5247 +2757 +5563 +2715 +1667 +1226 +5100 +5406 +3361 +1873 +1254 +1455 +5119 +6059 +5763 + +36308 + +10652 +2469 +5899 +3109 +9516 +1320 +5497 +8118 + +1633 +36728 + +15311 +15800 +2345 + +8798 +7581 +2277 +8154 +10875 +7322 +6145 + +9637 +3697 +4013 +3531 +10327 +7563 +9885 +2997 + +4043 +2569 +6039 +1967 +7443 +3359 +2323 +6144 +6260 +2931 +1316 + +4511 +10608 +16203 +5885 +5809 + +4708 +9406 +8620 +7918 +3530 +6432 +1294 +1129 + +5619 +2899 +1447 +4966 +2602 +4203 +1151 +4142 +5444 +1628 +2951 +3237 +2622 +1772 +4763 + +2587 +2284 +2831 +8008 +2176 +11829 +2512 + +13915 +13264 +10711 +5834 +8227 + +9012 +13250 +9137 +3782 +8746 +2746 + +3215 +2767 +1979 +3831 +5022 +1171 +1315 +4688 +2993 +1727 +1632 +2576 +1148 +3347 +5848 + +4528 +1066 +24591 + +1107 +5616 +6397 +3615 +1922 +7825 +4068 +2282 +4969 +4928 +1956 + +7563 +8015 +1599 +7393 +8540 +5662 +3296 +7456 +7456 +6788 + +8739 +3875 + +5167 +1477 +5247 +8143 +1505 +10220 +7960 +4732 + +16912 + +4976 +7525 +1736 +1008 +4977 +5674 +4444 +6232 +6049 +3639 +4522 + +22528 +23111 + +13556 +17076 +3627 +17255 + +1016 +1029 +3348 +5944 +5495 +2094 +4820 +2525 +4933 +5956 +2824 +3723 +5823 +6486 + +19290 +4670 +15993 +1076 + +9721 +7648 +17076 +7349 + +9628 +8035 +7244 +8595 + +29847 +31827 + +13167 +5522 +5306 +8929 +11649 +10464 + +4502 +3131 +1443 +5337 +9086 +4409 +6998 +4804 + +5638 +4221 +1322 +7392 +3318 +4711 +7797 +7945 + +5089 +2885 +1516 +6707 +4162 +2750 +3852 +4179 +4237 +1514 +3948 + +5584 +2739 +2969 +1821 +6459 +2524 +1315 +2437 +5509 +1931 +2268 +2997 + +5234 +2321 +4232 +5685 +3984 +2906 +1432 +4343 +3281 +2528 +2488 +1718 +5990 +3522 +4354 + +26195 +6781 + +5142 +4073 +5532 +7427 +7419 +1747 +3380 +6364 +6631 +3779 +4765 +5835 + +3705 +1536 +6790 +2033 +1455 +6505 +4919 +3024 +2474 +5873 +3471 +3505 +1316 + +6749 +4727 +3858 +5056 + +22223 + +17648 +4274 +12725 + +2280 +9924 + +15172 +7628 +7641 +7194 +1968 + +5982 +5614 +2452 +5362 +8434 +3174 +2176 +2698 +2412 +2189 + +13340 +12621 +14111 +14941 +13566 + +1361 +5862 +4128 +6746 +4467 +1838 +2139 +2664 +5443 +6834 +4677 +1098 +6784 + +10515 +2760 +10711 +5115 +12137 +2781 + +5049 +6241 +2530 +5856 +2433 +4728 +5363 +6403 +3327 +4275 +4158 +3801 +2371 +6359 + +29965 +8489 + +56825 + +11312 +9212 +1929 +14504 + +6465 +9629 +10359 +5838 +9425 +3058 +9753 +5888 + +5406 +13482 +3204 +2628 +9957 +10256 + +6179 +4133 +5327 +2896 +5640 +6104 +2780 +7809 +3987 +1638 +2541 + +33667 +14175 + +6110 +11612 +2695 +9999 + +5704 +6108 +2967 +1017 +1635 +3585 +6748 +1582 +6924 +1444 +3855 +1401 +2205 + +6732 +1197 +6953 +2207 +5612 +4231 +7347 +5711 +7897 + +13701 +10913 +16370 +19244 + +2674 +7112 +6486 +7851 +4414 +5481 +6726 +6598 +2871 +6893 +1811 + +1943 +3602 +4825 +11299 +14128 + +3270 +5562 +4320 +1632 +2765 +5645 +4944 +5241 +5292 +8473 + +2052 +2661 +4128 +5271 +1213 +4609 +3655 +6794 +2479 +5906 +6116 +4915 + +13118 +3888 +4049 +14650 +8187 + +7607 +7667 +4020 +2573 +3144 +10783 +3750 + +3572 +1577 +5913 +1191 +2013 +5357 +1334 +4691 +4955 +3044 +3587 +4261 +1879 +5174 + +21378 + +3856 +7070 +6705 +8507 +9457 +9742 +2451 + +2451 +6025 +10161 +10060 +11159 +4572 + +6103 +14326 +18133 +15332 + +5227 +2699 +2870 +1360 +3827 +2691 +5508 +1526 +2144 +4458 +4799 +3028 +5663 +3352 +5890 + +6639 +12924 +5358 +9307 +1789 + +4548 +8584 +2044 +1171 +8894 +7690 +2456 +2225 +6462 + +17817 +18601 +22573 + +5232 +7406 +2372 +9508 +6245 +5918 +3184 +7341 +4055 + +5583 +6410 +2211 +1752 +5614 +6256 +3575 +5114 +5707 +5439 +6576 +6152 +4253 + +1588 +4856 +1078 +9837 +10431 +3509 +2755 +2086 + +4108 +1603 +5413 +3281 +2084 +4070 +5170 +6002 +2991 +5885 +2073 +5249 +5078 +2229 + +2486 +1600 +2956 +5086 +3521 +2302 +5989 +5187 +2070 +3637 +4734 +2812 +2929 +1017 +1030 + +2302 +3395 +8743 +10214 +9177 +11084 +11280 + +3789 +5462 +5929 +2823 +5276 +5236 +1262 +1046 +6508 +5734 +5138 +5299 +3707 + +18103 +23600 +9666 + +9572 +5689 +8247 +6325 +5766 +6474 +4341 +2272 + +11951 +3817 +9665 +9371 +11456 + +18948 + +5760 +4181 +5350 +4406 +3333 +1192 +3369 +1739 +1417 +2549 +6452 +5864 +3340 +2264 + +1353 +4974 +1110 +3219 +3022 +1763 +2457 +1242 +1015 +5118 +2844 +1289 +5798 +2370 +1328 + +2420 +3955 +5165 +6471 +1506 +7366 +2845 +7015 +3494 +3631 +3366 + +5595 +1173 +5367 +2745 +5405 +3846 +4318 +4974 +1798 +5729 +2531 +3837 +4751 +1773 + +2917 +16933 +3801 +1609 + +24309 +17327 +3185 + +3608 +5934 +10329 +13659 +8898 + +13593 + +34109 +14389 + +5060 +2976 +1252 +3496 +2184 +2118 +2705 +4575 +1960 +1399 +4248 +1096 +5987 + +22148 + +6872 +3921 +6311 +6941 +5690 +5889 +5491 +2539 +6307 +6881 +6341 +4722 +6489 + +1294 +4268 +5230 +4534 +4271 +3299 +5569 +2424 +1169 +3393 +2191 +4614 +3407 +6061 + +5949 +3315 +3465 +1766 +6758 +3424 +6719 +3146 +5540 +5761 +3082 +5684 + +2622 +5651 +5396 +6061 +1771 +1924 +5686 +5660 +1867 +5316 +5457 +6073 +2739 +5972 +5036 + +6479 +4340 +4935 +1261 +3876 +1382 +3676 +7756 +6854 +1713 +2231 + +4951 +9899 +5241 +6767 +1821 +7499 +10630 +2795 + +6056 +4547 +1637 +9041 +8543 +2658 +4432 +8485 +2344 + +13655 +9543 +10307 +13701 +7088 +3037 + +11024 +13887 +13483 +9086 +3240 + +25938 +5207 +12019 + +7149 +1287 +6648 +2064 +1192 +4329 +3562 +6906 +4932 +1275 +2770 +5506 + +3937 +2237 +3689 +1612 +5617 +5771 +1582 +4790 +2307 +5041 +2624 +2838 +2795 +2206 +1635 + +17589 +8653 +17117 + +4989 +4956 +5419 +6835 +2196 +7712 +2424 +4662 +1602 +3939 +1272 + +16436 +12889 +6171 +9114 +2522 + +7624 +7560 +2198 +9091 +4732 +4600 +5329 +6004 +1019 + +5856 +1678 +1413 +1159 +2087 +1688 +2705 +2914 +4541 +6192 +3899 + +5894 +7004 +6434 +7397 +1628 +10169 +10771 +2815 + +5066 +4856 +1640 +1711 +11255 + +4073 +1430 +3137 +4448 +6758 +6601 +5361 +1551 +1172 +6521 +1984 +6439 +6856 + +9142 +5332 +6587 +6221 +7395 +3916 +3028 +6746 + +1888 +4873 +4385 +1612 +2542 +5366 +4580 +4885 +5067 +2973 +3746 +2312 + +9887 +2252 +9326 +9370 +4463 +2315 +3341 +8055 + +2044 +2280 +7734 +3207 +7745 +7176 +4730 +2999 +1333 +5779 +7820 + +2176 +5977 +6915 +5025 +2534 +5837 +5051 +2789 +2710 +3725 +4542 +5014 +6533 + +5040 +7527 +7004 +6962 +2013 +7318 +1072 +1885 +5706 +2064 +2112 + +32698 +5926 + +7743 +4843 +6126 +6327 +4515 +5568 +7777 +5099 +5645 +5375 +4282 + +10281 +7177 +8041 +9502 +4617 +6776 +5955 +9100 + +13793 +5079 +11978 +9184 +5004 +6506 + +11597 +22056 +11123 + +1966 +2459 +6579 +4048 +4820 +3866 +7306 +3019 +4028 +3280 +1280 +6118 + +2629 +6241 +5263 +4006 +7169 +6295 +1916 +7067 +5163 +7417 +7183 + +5296 +1587 +6900 +7476 +2815 +6000 +5377 +5690 +6823 +6629 + +10444 +7392 +8982 +6994 +9345 +1164 + +4648 +18356 +5229 +18479 + +37019 + +1595 +14516 +11072 +12073 +10524 + +7074 +4499 +3528 +6918 +7634 +7018 +4064 +2346 +6254 +4557 +5201 + +1304 +4826 +7327 +7594 +5661 +6148 +8777 +4703 +3436 +4898 + +69863 + +8498 +10599 +9617 +8728 +9386 +1506 +2857 + +7081 +3260 +16812 + +1978 +5986 +5234 +6330 +5033 +3496 +6263 +7934 +8236 +3702 + +1453 +2526 +5851 +2084 +3092 +6085 +6055 +3543 +2803 +1552 +1021 +5182 +4564 +3912 +3854 + +1003 +6113 +5847 +1479 +3534 +1497 +2047 +6062 +3713 +3888 +1847 +1798 +3207 +2560 +3212 + +4904 +7090 +2494 +8864 +1494 +3313 +1009 +7531 +4235 + +3024 +7888 +3711 +7637 +4804 +10269 +4739 +3124 + +10068 +9428 +5562 +2721 + +6320 +6421 +2922 +3893 +3632 +5560 +3579 +5181 +1927 +3860 +1432 +4818 +2868 +2184 + +11927 +4764 +7755 +10159 +6954 +9559 + +8985 +5396 + +5821 +15081 +12926 +16298 +11228 + +2555 +4710 +5259 +5744 +2489 +2068 +1502 +4496 +3785 +3377 +2321 +3902 + +10993 +10833 +24463 + +4011 +1089 +2087 +5185 +3488 +3736 +4926 +4891 +3448 +3271 +4634 +3751 +5303 +1994 + +5919 +3347 +4708 +1965 +5606 +6273 +2042 +1773 +3026 +4585 +2239 +2520 +4567 +4964 + +11355 +11798 +7831 +7480 +8790 +6294 +11922 + +3780 +4205 +2006 +4419 +4193 +2482 +4835 +4758 +3600 +1117 +3185 +1808 +1233 +4082 +3326 + +43241 + +5617 +1489 +5975 +5619 +2877 +1722 +4756 +5164 +3192 +2945 +5610 +6021 +4883 +2218 + +1579 +3888 +8895 +3815 +11782 +7598 + +2480 +2152 +7361 +6604 +3773 +1116 +4720 +6142 +6743 +7900 +1503 + +8257 +6224 +5073 +5153 +6286 +5930 +2198 +7322 +1244 +3028 + +9040 +9861 +11717 + +1692 +2885 +9293 +6439 +6822 +4663 + +11327 +6426 +4039 +9769 +3730 +6972 +6462 + +6202 +2857 +3687 +4333 +3206 +5999 +3844 +4236 +3496 +7349 +1637 +5892 + +21290 +13265 +16574 + +1501 +8323 +2174 +7603 +1417 +5507 +3152 +8574 +6952 +6893 + +2057 +5770 +6945 +5910 +2066 +2373 +6613 +6703 +5795 +7033 +6063 +3443 + +10064 +12696 +1625 +1604 +8552 + +4518 +3559 +4612 +4990 +6122 +1829 +8607 +2051 +6314 +2596 + +1898 +8330 +6823 +14127 +4122 + +2494 +6727 +4587 +2321 +4617 +4813 +7347 +3794 +1446 +5291 +4913 + +15290 +9852 +5973 +7334 + +5995 +4539 +8371 +9076 +12656 +12625 + +2198 +1139 +4259 +3010 +9045 +2929 +8392 +4307 +5738 + +12958 +5954 + +2276 +6600 +5912 +1305 +6350 +5827 +2640 +6856 +7562 +7882 +3944 + +7186 +4975 +9015 +12599 +13902 + +55492 + +4832 +5290 +2044 +1011 +4110 +1236 +4706 +5218 +1300 +3238 +1836 +1309 +4742 +3964 +4682 + +5611 +3648 +8179 +9855 +2938 +8541 +9237 + +6779 +7885 +7768 +7979 +1604 +2719 +3879 +2771 +1197 + +2775 +12978 +7208 + +19188 +16982 +8339 + +12742 +18586 +18256 + +15946 +28794 + +5010 +1439 +1176 +5112 +6225 +11059 +1380 + +2636 +5109 +7016 +4966 +7277 +1646 +1209 +4458 +4147 +3169 + +18833 +18515 +8638 +6254 + +7158 +2439 +12116 +2417 +6262 +9579 +6050 + +7881 +8103 +6525 +5610 +4287 +7642 +2084 +8453 +1724 + +3535 +10683 +10350 +11645 +11293 +7447 +6324 + +17973 +11656 +19267 +18227 + +5568 +3346 +5735 +5136 +5528 +5605 +3106 +4635 +2530 +3111 +2916 +1510 +2617 + +6132 +1462 +2779 +4977 +1771 +8308 +2896 +6441 +3027 +1452 + +50057 + +1733 +4620 +5879 +3456 +3043 +1039 +5811 +3572 +1371 +4420 +5788 +1722 +1173 +5371 + +4890 +4902 +5587 +5794 +4689 +6264 +3451 +6440 +5713 +4760 +4073 +6571 +5257 + +2882 +1784 +4373 +4672 +3418 +5014 +3662 +1249 +5828 +5153 +5729 +3709 +5709 +3007 + +13324 +9643 +14954 +14195 + +4739 +5997 +2183 +3111 +6721 +8025 +1373 +4982 +2199 +6187 + +6561 +6690 +9276 +7602 +7353 +7961 +1247 +6694 +6641 + +6626 +5971 +6702 +1726 +3909 +2262 +6701 +4754 +4256 +5897 +3946 +1457 +4469 \ No newline at end of file diff --git a/2022/go/day02/day02.go b/2022/go/day02/day02.go new file mode 100644 index 0000000..3a50b8c --- /dev/null +++ b/2022/go/day02/day02.go @@ -0,0 +1,89 @@ +package day02 + +import ( + "strings" +) + +func Part1(input string) int { + var sum int = 0 + + values := map[string]int{ + "Rock": 1, + "Paper": 2, + "Scissors": 3, + } + + translateMap := map[string]string{ + "X": "Rock", + "Y": "Paper", + "Z": "Scissors", + "A": "Rock", + "B": "Paper", + "C": "Scissors", + } + + winOn := map[string]string{ + "Rock": "Scissors", + "Paper": "Rock", + "Scissors": "Paper", + } + + lines := strings.Split(input, "\n") + for _, line := range lines { + objects := strings.Split(line, " ") + opponent := translateMap[objects[0]] + player := translateMap[objects[1]] + sum = sum + values[player] + if player == opponent { + sum = sum + 3 + } else if winOn[player] == opponent { + sum = sum + 6 + } + } + return sum +} + +func Part2(input string) int { + var sum int = 0 + + values := map[string]int{ + "Rock": 1, + "Paper": 2, + "Scissors": 3, + } + + translateMap := map[string]string{ + "X": "Lose", + "Y": "Draw", + "Z": "Win", + "A": "Rock", + "B": "Paper", + "C": "Scissors", + } + + winOn := map[string]string{ + "Rock": "Paper", + "Paper": "Scissors", + "Scissors": "Rock", + } + + loseOn := map[string]string{ + "Rock": "Scissors", + "Paper": "Rock", + "Scissors": "Paper", + } + + lines := strings.Split(input, "\n") + for _, line := range lines { + objects := strings.Split(line, " ") + opponent := translateMap[objects[0]] + result := translateMap[objects[1]] + if result == "Draw" { + sum = sum + 3 + values[opponent] + } else if result == "Win" { + sum = sum + 6 + values[winOn[opponent]] + } else { + sum = sum + values[loseOn[opponent]] + } + } + return sum} \ No newline at end of file diff --git a/2022/go/day02/day02_test.go b/2022/go/day02/day02_test.go new file mode 100644 index 0000000..cdb55db --- /dev/null +++ b/2022/go/day02/day02_test.go @@ -0,0 +1,23 @@ +package day02 + +import ( + "testing" + + "github.com/stretchr/testify/require" +) + +func TestPart1(t *testing.T) { + r := Part1( +`A Y +B X +C Z`) + require.Equal(t, 15, r) +} + +func TestPart2(t *testing.T) { + r := Part2( +`A Y +B X +C Z`) + require.Equal(t, 12, r) +} diff --git a/2022/go/day02/input.txt b/2022/go/day02/input.txt new file mode 100644 index 0000000..dc4057d --- /dev/null +++ b/2022/go/day02/input.txt @@ -0,0 +1,2500 @@ +A Y +B X +C X +A Z +B Y +C X +C X +C X +C X +C X +A Z +B Y +C X +A Z +A Z +B Y +A Z +B X +C Z +C X +C X +B Y +C X +A X +B Y +B Z +A Z +B Y +C X +C X +C X +A Z +B Y +C X +A Z +C X +B Y +C X +C X +B Y +A Z +A Z +C X +C X +A Y +B X +C X +B X +C X +C X +A Z +C Z +C X +A Y +B Y +B Y +B X +C X +C X +C X +A Y +A Z +C X +A Z +C X +B Y +C X +C X +C X +C X +A Z +C X +A Z +C X +C X +B Y +C X +B Y +A X +A Y +C Y +A Z +C X +C X +A X +A Z +A X +C X +C X +A X +C X +B Y +A Z +A Y +A Z +B X +C X +B X +C X +C X +A Z +C X +C Z +C X +C X +C X +C X +C X +A Z +A X +C X +A Z +C X +C X +A Z +C X +A Z +A Y +C X +C X +A Z +A Z +C X +C X +A Z +A Z +C Z +C X +A Z +A Z +C X +B Y +C X +C X +A Y +A Z +A Z +A Z +A Y +B Y +A Z +C X +A Y +A Z +A Y +A Z +C X +C X +C X +B X +B Y +A Z +A Z +A Z +C X +A Z +A X +B X +C X +C X +C X +A Z +A Z +A Z +C X +C X +A X +A Z +C Y +A Z +C X +C X +C Z +C X +A Z +A X +C Y +A X +C X +C X +C X +A X +A X +C X +A Z +A Z +A Z +A Z +A Z +A Y +C X +A Z +A Z +A Z +B Y +C X +C X +A X +B X +A Z +C X +A Z +C X +A Z +C X +A Z +A Y +C X +C X +C X +A Y +C X +C Y +C Z +C X +C X +B Y +C X +A Z +C Z +A Z +C X +A Y +B Y +C X +C X +C X +B X +A Z +C X +C X +C X +B X +A Z +A Z +C X +C X +C X +A Z +A X +B Y +C Y +C X +A Z +A Z +A Z +B Y +B X +C X +A Z +A Y +B Z +C X +C X +A Z +A X +C X +A Z +B Y +A Z +C Z +B X +A Z +C X +C X +C X +A Y +C X +C X +A Z +A X +C Z +A Y +C X +C X +A Y +A X +B Y +C X +C X +C X +A Z +A X +C X +A X +A X +C X +C X +A Z +C X +A Z +A X +A Z +C X +B Y +A Z +C X +A Z +A X +B X +C X +B Y +A Y +A Y +C Z +B Z +C X +C X +C X +A Z +C Z +A Y +C X +A Y +C Z +A Y +B Y +C X +C X +A Z +B Y +C X +A Z +C X +C X +A Z +B Y +C X +B Y +C X +B Y +A Y +C X +A X +A X +B X +C X +A Z +C X +B Y +A Y +C X +B Y +B X +C X +C X +A Z +B X +A X +C X +C X +B Y +C Z +B X +C X +A Z +A Z +A X +C X +A Z +C X +A Z +C X +A Z +C X +A Z +A Y +A Y +C Z +C X +A X +C X +A Z +C X +B X +A Z +A Y +A Z +C X +A Z +C X +B Y +A X +C X +A Y +C X +C X +C X +A Z +A Y +C X +A X +C X +A Z +C X +C X +A Y +C X +C X +C X +A Z +A Z +C X +A Z +B X +A Z +C X +B Y +B X +C X +B Y +A Z +A X +C X +A Y +A X +A Z +B Y +A X +C X +C X +C X +C X +A Z +C X +C X +A X +A Z +A Z +B Y +A Z +A X +A Z +C X +B X +A Y +A X +A Y +C X +A Z +C X +A Z +B X +A Y +C X +C X +A Z +A Z +C X +C Y +A Z +A Z +A Z +A Y +C X +C X +A Z +A Z +A Z +B Y +C X +A Z +C X +A Y +A Z +A Z +A Z +C X +A X +A Z +A Z +B Y +B X +A Z +A X +C X +C X +A Z +A Z +C X +A X +A Z +C X +A X +C X +A Z +A Y +C X +B Y +B Y +C X +C X +C X +C X +C X +A X +A X +A Y +A Z +A X +C X +A X +A Z +B Y +A X +A X +C X +A Z +C X +C X +C X +A Z +A X +A X +C X +C X +C X +C X +C X +C X +A Z +C X +C X +C Z +C X +A Z +A Z +C X +C X +A Z +A Z +C X +A Z +A Z +A Z +A Z +C X +A X +C X +B Y +C X +A X +A X +A Y +C X +A Y +A Z +C X +C X +C Z +C X +C X +C X +B X +C X +C X +C X +A Y +C X +C X +A Z +C X +A Y +C X +C Z +C X +C X +B X +A Z +C X +C X +C X +C X +C X +B X +A Z +C X +A Z +B X +B Y +B Y +C X +C X +C Y +A Z +C X +C X +A X +A X +A X +A X +C X +C X +C X +C X +A Z +C X +A Z +A X +C X +C X +B Y +B Y +A Z +C X +A X +A Z +A Z +B Y +C X +C X +A Z +C X +A Z +C X +B X +C X +A Y +C X +C X +A X +B Y +B Y +C Z +C X +C X +B Y +A X +C X +C X +A X +A Z +C X +C X +A Z +B Y +A Z +C X +C X +A X +A X +C X +C Z +C X +A Z +B X +C X +B Y +A Y +B X +A Z +A Z +A X +A Z +A Y +A Z +A X +A Z +C X +C X +A Z +B Y +A Z +B X +B Y +A Z +C X +C Y +A Z +C X +C X +A X +A Z +A X +C X +C X +A Z +C X +C X +C X +C X +A X +B X +A Z +A Z +C X +A X +A X +C X +C X +A Z +A Z +C X +C X +A X +A Z +C X +A X +A Z +A Z +C X +A Z +A Z +C X +C X +A Z +C X +C X +A Z +C X +C X +A Z +A X +C X +C X +A Z +A Z +C X +C X +C X +A Y +C X +C X +B Y +C X +C X +C X +C X +A Z +A Z +A X +C X +A X +C X +A Z +B X +A Z +C X +C X +A Z +A Y +C X +C X +A Z +C X +B X +B X +B Y +A Y +A Y +A Z +A Z +A Z +C X +C X +A Z +C X +B Y +C X +B Z +A Z +C X +A Z +C X +C X +C X +C X +A Z +B X +A Y +C X +A X +A Z +B Y +A X +C X +C X +C X +C X +C X +A Z +A X +A Z +A X +A Z +A Z +C X +A X +C X +B X +C Z +A X +B X +A Y +C X +A Z +A Z +B X +B Y +B Y +C X +A Z +A X +C X +C X +B Z +B X +B Y +A Z +B Y +A Z +C X +A Z +A X +A Z +C X +C X +C X +A X +C X +A Z +C X +C X +C Y +B X +C X +A X +C X +A X +A Z +C Z +A Z +C X +A Y +C X +C X +B Y +C X +C X +A Z +C X +C X +C X +A Z +C Y +C X +A X +A Z +A X +C X +A Z +A Z +B Y +B X +A Z +C X +A Z +C X +A X +C X +C Y +A Z +A Y +C Z +C X +C Z +A Z +A Z +C X +C X +A Y +A X +B Y +C X +A Y +C X +A Y +C X +A Z +B X +A Y +C X +B X +A Z +C X +A Z +A Z +A Y +A Z +A X +B Y +C X +C X +C X +A Z +A X +C X +A Y +A Y +C X +A Z +C X +C Y +C X +C X +A X +A Z +A X +A X +C X +A X +A Z +C X +A Y +A Y +C X +B Y +A Y +C X +A Z +A Z +A X +C X +A Y +C X +C X +C X +C X +A Y +A Z +B Y +A X +A Y +C X +C X +C X +B X +A Z +C X +C X +B X +A Z +A X +C X +A X +C X +B Y +A Z +C X +C X +B X +A Z +A Z +A Z +C X +C X +C X +C Y +C X +C X +A Z +C X +A Z +C X +C X +B X +A X +A Z +C X +B Z +C X +C X +A X +A Y +C X +A Z +A Z +C X +C X +C X +C X +C X +C X +B Y +A Z +C X +A X +A Z +A Z +C X +C X +C X +A Z +C X +B Y +A Z +A Z +C X +C X +C X +C X +A Z +C X +A Z +A Y +A X +C X +A Z +C X +C X +A Z +A Z +A X +A Z +C X +A Z +A X +A Z +C X +C X +C Z +A X +C X +C X +A X +A X +C X +A Z +A Z +A Z +C X +C X +A Z +B Z +A Z +A Z +C X +A Z +C X +A Z +B X +C X +A Z +B Y +B Y +C X +A X +A Z +C X +C X +A Z +C Y +B Y +A Z +C X +C X +A Z +A Z +C Z +A Z +C X +C X +A Y +C X +A Y +B X +C Z +C X +A Y +C X +B Y +C X +C X +C Z +A Z +A Z +C X +C X +A Z +B Z +C X +A Z +C X +A Z +C X +C X +C Y +C X +B Y +A X +A Z +C X +B Y +A Z +B Y +C X +C Y +C Z +A X +A Z +A X +C X +C X +A Z +A Z +C X +C X +C X +C X +B Y +B Y +A Y +C X +C X +C X +A X +C X +B Y +A Z +B Y +C X +C X +B Y +C X +B Y +C X +C X +C X +A Z +A Z +C X +C X +B Z +A X +C X +C X +A Z +C X +C X +C X +C X +A Z +C X +A Y +A Z +C X +A Z +A Y +C X +A X +C Y +A Y +A Y +C X +C X +A X +A Y +C X +B Y +A Z +B Y +C X +B X +C X +C X +C X +B Z +A Y +C X +B Y +C X +A X +C X +C X +B X +A Z +C X +A Z +C X +C X +C X +C X +C X +C X +A X +A Z +A Z +C X +C X +C Z +B X +C Z +C X +B X +C X +A Z +B Y +A Z +C Z +C X +B X +A X +A Z +C X +C X +A Z +A Z +A Z +A X +C X +C X +A Y +A Z +C X +A Z +B Y +C X +C Z +A Z +C X +C X +C X +A X +A Z +A Z +C X +A Y +A Y +C X +C X +C X +C X +C X +A Z +C X +B X +C X +B X +B Y +A Z +C X +B Y +A Y +C Z +A Z +A X +C X +A Z +C X +A Z +C Z +C X +C X +A Z +C X +C X +C X +B Y +A Z +B X +A Z +A Z +B X +A X +A Z +C X +C X +A Y +C X +A Z +B Y +C Y +A Z +C Y +C X +A Z +C X +C X +A X +C X +A X +A Z +B Y +B Y +C X +B Y +C Z +C X +C X +B Y +A Z +C X +C X +C X +C X +C X +A X +A Z +B Y +A Y +C X +C X +C Z +C X +A X +C X +A Z +B Y +A Z +B X +C X +C X +A Z +C X +A Y +A Y +C X +B X +C X +B X +A Y +A Z +A Z +C X +A Z +A X +A Z +C X +C X +C X +A Z +B X +B X +A Z +C X +B Y +C X +C X +A Z +A X +C X +B Y +C X +C X +C X +A X +A X +B Y +A Y +A X +C X +A Z +B X +A Z +B Y +C X +B Y +A Y +C X +C X +C X +A Y +A Z +A Z +A X +A Z +A X +C X +A Z +A Y +A Z +A Z +A Z +A X +A Z +A Z +C X +C X +C X +A Z +C X +C X +B Y +C X +C X +C X +C Y +A Z +A Z +A Z +C X +A Z +B X +A X +A Z +A Y +C X +A Z +C X +A Z +A Y +B Y +C X +A X +A Z +A Z +C Y +A X +B Y +B Y +C X +A Z +A Z +A Z +A Z +A Z +A Z +A Z +C X +C X +B Y +C X +C X +A Y +C X +A Z +C X +A X +C X +A X +C X +C X +B X +C X +B X +C X +C X +A Y +A X +A Z +C X +A X +A Y +A Z +C X +C X +C X +B Y +A Z +A Y +A Z +C X +A Y +B X +C X +A X +A Y +A Y +A Z +A Z +A Z +C X +A Z +A X +A Z +C X +B X +A Z +C X +C X +A X +A Z +A Z +B Y +A Z +A X +A Z +A Z +A Z +A X +B Y +A X +A Z +C X +B X +A Z +A Z +A Y +B Y +A Y +B Y +C X +C X +A Z +B Y +A Z +A X +A Z +A Z +C X +C X +A Z +A X +C X +B Y +C X +C X +C X +C Z +A Y +C X +A Y +A Y +A Y +A Z +A X +A Z +A X +A Z +B Y +C X +A Z +A Y +C X +B Y +A Z +B Y +C X +B X +B Y +C X +A Z +B X +C X +B Y +B Y +C X +C X +A Z +B X +A X +A Z +C X +A Z +C X +C X +A Z +B X +A Z +C Y +C X +A Z +A X +B Y +B Y +C Y +B Y +A Y +C X +A X +C X +C X +C X +A Y +A Z +B Y +A Z +A Y +C X +A Y +A Y +A Y +C X +B X +B X +C X +B X +C X +C X +A X +A X +A X +C X +C X +C Y +A Y +A Z +C X +B Y +C X +A X +C X +A Z +C X +C X +C X +B X +C X +C Z +A Z +C Y +B Y +A Y +A Z +A Z +A X +A Y +C X +C Y +C X +C X +A X +A Y +A Z +C X +B X +B Y +B Y +C X +C X +C X +C X +A Z +C X +C X +B Y +C X +C X +A Z +A Z +A Z +A X +A Y +A Z +C Z +A Z +C X +C X +B Y +A X +C X +A Z +C X +A X +C X +A Z +C X +C X +A Z +A X +C X +C X +C X +A Y +C X +C X +A Z +C X +A Z +C X +A Z +C X +C X +C X +C X +A Z +C X +A Z +C X +A Z +A Z +B Z +A Z +A Y +C X +B X +C X +C X +C Z +C X +C X +C X +A X +A Z +A Z +A Z +C X +C X +C X +A Z +B Y +C X +C X +C X +A Z +C X +A Y +C X +B Y +A Z +C X +B X +C X +A X +C X +C X +C X +A Z +A Z +A Z +B Z +C X +A Z +A X +C X +B X +A X +A Y +B Y +B Y +A Z +C X +C X +C X +C X +A Z +A Z +C X +A X +B Y +B Y +A Z +A Z +C X +C X +A Z +A Y +C X +A Y +A Z +A Y +C X +A Z +C X +A Z +B Y +A X +A Z +C X +A X +C X +A Z +C X +C X +A Z +B X +B X +A Z +C X +A Y +A Z +C X +A X +A X +A Z +A Y +C X +A Z +B Z +C X +A Z +C X +A Z +A Z +C X +A Z +B X +A Z +C X +A Z +A Z +C X +C X +A X +A Z +A Z +C X +A Z +C X +A Z +C X +A X +A Z +A Z +C Z +C X +C X +B Y +B Y +C X +C X +C X +B X +A X +C X +A X +B Y +C X +B Y +A Z +A Z +A Y +A Z +B X +A X +C X +B Y +C X +A Z +C X +C X +A Z +A X +C X +C X +A Z +B Y +C X +A Z +B Y +A Z +A Z +A X +C X +A Z +C X +B Y +C X +C X +C X +A X +B Y +C X +A X +C X +A Z +C X +C X +B X +B X +C X +C X +A Z +B X +C X +A X +C X +B Y +A Y +C Z +C X +A Z +C Z +B Y +B Y +A Z +C Z +C X +C X +C X +A X +C X +A Z +B X +A Z +B Y +A Z +B X +A X +A Z +A Z +C X +B X +C X +A Z +B Y +A Z +C X +A Z +A Z +A X +A Z +A X +A X +C X +B X +C X +C X +B Y +C X +C X +A X +C X +C X +C X +C X +C X +A Z +C X +C X +A Z +A Z +B Y +C X +C Z +C X +B Y +C X +C X +C X +A Z +A Y +A X +C X +C X +B Y +C Z +C X +A Y +B Y +C X +C X +A Z +A Z +C X +C X +C X +B X +C X +C X +C X +C X +B Y +A X +C X +C X +A Z +C X +C X +C X +A Z +C X +C X +B Y +C X +A Y +C X +A Z +A Z +B Y +C X +C Y +A Y +C X +B Y +A Z +B X +C X +C X +A X +C X +C X +C X +C X +A X +A X +A Z +C X +B Z +C X +A Y +A Z +A Z +C X +C X +C X +A Z +A Z +A X +A Z +A Z +A Z +A Y +A X +A Z +C X +B Y +C X +A Z +C X +C Z +B X +C X +C X +A Z +A X +B X +C X +A Z +A Z +A Z +C Z +C X +B Y +C X +C X +C X +A Z +B Y +C X +C X +C X +C X +C X +C X +A X +C Z +B Y +A X +A X +B X +C X +C X +C X +A Z +A Z +B X +C X +C X +A Z +C X +A Z +C X +C X +C X +C X +A Z +C Y +C X +C X +A Z +A Z +A Z +A Y +A X +A X +C X +A Z +B X +A Z +C X +B X +C X +A Y +A X +C X +C X +C X +B X +B X +C X +A Z +A Z +C X +C X +A Z +B X +A Z +A Y +A X +A Y +C X +A Z +B Y +C X +A Z +C X +C X +A Z +A Z +A Y +B X +A Z +C X +A X +A Z +A Z +A Z +A X +C X +A Z +A Z +B X +A Y +C X +C X +C X +C X +B X +B Y +C X +A Z +C X +B Y +B Y +C X +B X +A Z +C X +C X +A Z +B Y +C X +A Z +C X +C X +A Z +C X +A Z +A X +C X +C X +A X +A Z +C X +A X +C X +C X +A X +C X +A X +A Y +A Z +A Y +A Z +C X +A Z +A Z +B Z +A Y +A Z +C X +A Z +C X +A X +C X +C Y +C X +C X +C X +A Z +B X +C X +C X +A Z +A Z +C Z +C X +A X +A Y +B Y +A Z +A X +B X +C X +C X +C X +A Y +C X +A Z +C X +C X +A Z +A X +C X +C Z +C X +C X +C X +A Z +A Y +C X +C X +A Z +C X +C Y +C X +C X +A Z +A X +C X +B X +A Z +A Z +C X +A Z +A Z +C X +A Y +C Y +A Z +A Z +B X +C X +A Z +A Z +C X +C X +C X +B Y +A Z +B Y +C X +B X +A X +C X +A Z +A Y +C X +A Z +C Z +A X +C X +A Z +C X +C X +A Z +C X +A Y +C X +C X +A Y +C X +B X +C X +C X +B Y +A X +C X +A Y +B Y +C X +A X +A Z +C Z +A X +C X +C X +B X +A Z +B Z +A Z +A X +A Y +C X +A X +B X +C X +C X +C X +C X +A Z +C X +A Z +A Z +C X +B X +C X +A Y +A Z +A X +A X +C X +A Y +C X +C X +A Y +C X +B X +A Z +C X +A Z +B X +A Z +B Y +C X +C X +C X +A Z +C X +C X +A X +C X +A Z +C X +C X +A Z +C X +A X +B Y +A Y +C X +C X +C X +A X +C X +A Z +C X +A X +C X +C X +A Y +C X +C X +C X +C X +A Z +C X +C X +A Y +A Z +C X +C X +C X +A Z +A Z +C Z +A Y +C X +C X +B Z +B Y +B Y +B Y +C Z +B Y +A Z +B X +C X +A Z +A Y +C X +B Y +C X +A X +B X +A Z +A Z +C X +C Y +A Z +B Y +A Z +A Z +C X +C X +B Y +C X +A Z +C Z +A X +C X +C X +C X +A Z +C X +B X +B Y +C X +A Z +A Z +C X +A Z +C Z +C X +B X +A X +B Z +A Z +C X +A X +C X +C X +C X +C X +A Z +C X +C X +C X +C X +A Z +A Z +C X +C X +A X +A Z +C X +A X +C X +C Y +C X +A Z +B X +A Y +A Z +C Y +A Z +C X +A Y +C X +A X +C X +A X +C X +A Z +C X +A X +A Z +A X +A Y +C Z +C X +A X +A Z +A Z +A Z +A Z +C X +C X +C Z +A X +A Z +B Y +A Z +A Z +B X +B Y +A X +A Y +A Z +C X +A Z +C X +A Z +B X +B X +C X +C X +C X +A X +C X +A Z +B X +A Y +B X +C X +A X +C X +A X +A Z +A Z +A Z +C X +B Y +C X +B Y +C X +A Z +A Z +A Z +C X +C X +B Y +A Y +C Y +A Z +C X +C X +A Z +C X +A Z +C Z +B X +C X +C X +A Z +B Y +A Y +C X +A X \ No newline at end of file diff --git a/2022/go/day03/day03.go b/2022/go/day03/day03.go new file mode 100644 index 0000000..6078cd4 --- /dev/null +++ b/2022/go/day03/day03.go @@ -0,0 +1,54 @@ +package day03 + +import ( + "strings" +// "fmt" + + mapset "github.com/deckarep/golang-set/v2" + +) + +func Part1(input string) int { + var sum int = 0 + lines := strings.Split(input, "\n") + for _, line := range lines { + c1 := []rune(line[:len(line)/2]) + c1set := mapset.NewSet[rune](c1...) + + c2 := []rune(line[len(line)/2:]) + c2set := mapset.NewSet[rune](c2...) + for _, v := range c1set.Intersect(c2set).ToSlice() { + sum += getValue(v) + } + } + return sum +} + +func getValue(v rune) int { + if v >= 'a' && v <= 'z' { + return int(v) - int('a') + 1 + } + if v >= 'A' && v <= 'Z' { + return int(v) - int('A') + 27 + } + return 0 +} + +func Part2(input string) int { + var sum int = 0 + var idx int = 0 + lines := strings.Split(input, "\n") + for idx=0; idx < len(lines); idx += 3 { + c1 := []rune(lines[idx]) + c1set := mapset.NewSet[rune](c1...) + c2 := []rune(lines[idx+1]) + c2set := mapset.NewSet[rune](c2...) + c3 := []rune(lines[idx+2]) + c3set := mapset.NewSet[rune](c3...) + for _, v := range c1set.Intersect(c2set).Intersect(c3set).ToSlice() { + sum += getValue(v) + } + + } + return sum +} diff --git a/2022/go/day03/day03_test.go b/2022/go/day03/day03_test.go new file mode 100644 index 0000000..9093bb4 --- /dev/null +++ b/2022/go/day03/day03_test.go @@ -0,0 +1,29 @@ +package day03 + +import ( + "testing" + + "github.com/stretchr/testify/require" +) + +func TestPart1(t *testing.T) { + r := Part1( +`vJrwpWtwJgWrhcsFMMfFFhFp +jqHRNqRjqzjGDLGLrsFMfFZSrLrFZsSL +PmmdzqPrVvPwwTWBwg +wMqvLMZHhHMvwLHjbvcjnnSBnvTQFn +ttgJtRGJQctTZtZT +CrZsJsPPZsGzwwsLwLmpwMDw`) + require.Equal(t, 157, r) +} + +func TestPart2(t *testing.T) { + r := Part2( +`vJrwpWtwJgWrhcsFMMfFFhFp +jqHRNqRjqzjGDLGLrsFMfFZSrLrFZsSL +PmmdzqPrVvPwwTWBwg +wMqvLMZHhHMvwLHjbvcjnnSBnvTQFn +ttgJtRGJQctTZtZT +CrZsJsPPZsGzwwsLwLmpwMDw`) + require.Equal(t, 70, r) +} diff --git a/2022/go/day03/input.txt b/2022/go/day03/input.txt new file mode 100644 index 0000000..33c0e41 --- /dev/null +++ b/2022/go/day03/input.txt @@ -0,0 +1,300 @@ +hDsDDttbhsmshNNWMNWGbTNqZq +VQfjnlFvnQFRdZWdVtqMGdWW +zvvvRnFFfjjlRBlBPzgQgRvvmtrmhHcptLHCDhcHHmLsBmsB +FrzFvvdTDcTnmTzdDTTzdvWmjhgVPrhSljSQSPwPjPjPjSVC +sMsGbqGsbbRqRbBMBGRMbLpNSSpjhlQljHVClhjgPjjPhlVp +sNbGtJbMfssNtvcnWFVmnvDd +TNfmdFJmfdZMQffVRQVV +jVHBCcDSjWrMZjvg +SShSbCGpcBtBtwtVLJJddmtLmT +CtpNftbNWbtSJDHqGZJFLfLr +dPsHlsRBHcZdqDFDZwwJ +snjVlvTPlPjVlQlHWjpSmzgNNzSmtpSm +qhZtSVqCqThGcGzZnnfZcB +WbddWbDwrBzcpzHpBb +DBBMFWRJDrDFWLWljCqjQjFvtCsqTjqs +vhFTzRzzTmPvbplWFtQttQQZtZhMZqcqSQ +fJVCfDfJNCLDwJNGmssZgwqgZcmtgcms +VmdVNLHGGVDBdfLCHnLGHnbWpTplWbddRTlzplWPpbFp +smwtNVqRjNmZjZBDSvzSzl +FnTJFcTTFccCrJGTLncdCCcPJZfBBDSlSJwZDlggSffvgSSf +FWTFGLFWLCPWrCnFnQWNbQVVwphhmHHbptVsss +BrrgrtgfBpPFhhgMWq +ZGvsvDGClvsSRScpGBhPphWMPhhTNh +SBSBdBZCcdwHrVQwQr +qmFqdVtqsVdzqGbwMJwGPpmPHM +ZjTjLQLLDrrLjcFhlfrGHppfbJwGpMMpGHwRCC +BTlZjrBBBcLTcDrjBlThWBjBtWNqnSzSnsSdvsFggNnqVVnv +zVvmjGgpcJnbTTTJHRHSRb +NPFrFQfCLPrdRlbtQRRvBtHb +frMLqPFMrfrPLCwqqNvjczwwnmwggGmssnmnnm +HbFJhhshsffcvslmGmLFrQBrlFTG +jNRPwwPjSPCdCdvRzRBTlRzmGrmB +nCSWdNjCCPqvtttZnDscth +ScSrRTPcSSDRWSptWcdmmWGbmGGLmLJvNJNbbJ +flzHjFpZjFfjjgszjlqzJNnnvsmbMmGvJLNNbmJv +jFZFVpffpVlqfQhgtTwcTVtrTcRBwBTD +rHrdGSMSSbZbjShj +qZfDBBvllvvWLtqbbQwhJjbtwbnQgN +WzWlzZmLWBLZLzCzrHMVcRrMRFRCCccF +BzdplppDlBBrqWnjFMBWqNWq +whZhZSSHhhVSrvSgHPvgvjnFTPsFFnnNTcjTFnTTsc +HLCwVSfZLffSHhLvwtQbJbrdGlRRrGdmpztG +grDFfDlfCftCzCfNztclNFrBNQjbZjJjjPPVsjNvsbvPsj +HwwTpGpRwMdpHWhvjzVsPJjJGVvVZs +ShphRpwzMWdpHdwWHwMpnHwLDmmgcLCCDtLDCCSlcgcfCD +ccqqLLqCqTSlZMLQMllZTvnNfjddttmmDpRJjvhfpfthRmdf +rbVssWwggFrGsWzPbVFGJpftQRPDmQDpdPmdJmfR +bBHWWHzWHWWHrsVbsFgwbFqqMLTnBclTMMSnLnqLqMQZ +CcSPGCCPrdPtdjcsBLDghbVLhqDl +vMJwTHzPvzVwqBBDblls +QNvMFfRMJHPZHjnfWmdftSjSnp +dnBCPhhBCrQfChdbNVGLszzDzVDsTbWT +HgcJgpppPqqHwPwJSczVzDssNNVWTtqVVGts +JHRFpjFccplcRwPJpHPScpMPQmCdBQQfQjjhCfBCrQQvdmnn +rQGmVRLRbDRHmmZLGBGVLHBVFspSstWWWNJcsgpQTSsNppJS +qlldhPdfCgnspJFWCFsFNT +jMMzwndfhnwPfqPMjgjMVBrGBmrHDHLZbjRGHbHj +wzpZfzHRSRfzgHfffZwwStCtSrBhBBCTrtFhhBFG +QPjQQQDcDWJNFWtrtWrGmTCMtmBW +lDvvDQcdjQcQLvlDwnpFgbbznZZglZsl +RfMFTMFrVrSRFPlFSfVlHpLqgzpHBLzHBBVzVpHG +CchbhcwdmdJmwJJtGgnqzppLmGGBQqQp +hCsstCJwLvMRvsZsTR +fQlfMlNClQhhZhrlWrWw +njDbnTDTBtGjmrGvSh +bgshBdBcDbTTdnnnTqcqLgqfpfQppCsCMsHHVVpHHNCHFF +PbCnTbzJnqQNzbbTNDdpwcmjDmwjGQjccw +hWgvSdLvwcGjSpSm +vVfrFvvhHFTZndJq +FFvRVCRqVRcfsDLrgqGNWjjHfhQQzGWjQHzN +ppJPBwplwSBJTmPpTzWWStzHHjNNLNzHNh +wnwMPbLJMJllJJwBmJmnLVvCvsCsbFgDrRrsCsvrqc +jqHgVgdgGQttWCtNqNflmllgFnfDnmFFlpcl +TZZsrrwwhwrsrZRGmhcfSnhGlmSFcf +rsLvvbJPPLBGPCQqHWtMCMHN +WzzBpCBpMsBpCvCfsgnPPfHgbfFNfF +jtdTLLjGTGjDjLbbbGlDLLLmfFgmmfgrPrgmNPHSnnNnqFSq +jbRRbjlwlRVpvWwvzBpB +qpwzCzCznFznTcCvrcrvVcLb +cPmNMHSlMsLfvWgsrWvL +mMHGPDMBGSGPHlPBcBPzznnzpdQFBjqRFdwdnn +QGZLJzmJrZgZzZhNQFqDWlWPWDFCWNRlPW +hMMbhVbhHWCsPWCMRs +BwjbSHVBVvfcTfZgZzQhrzdGrt +cvPTjfDPpDmmBjbQjZMdlBZj +CHNnghNChVzNgrFVwCMJLMMMMMQQdbLZ +FNSzShrHhNnWgVnWfvfbpfpDGTfvsG +FFpVrZhpTlSQlQzTtRtZHfmPmJDbRtZJ +jNnwBLnWwBgNBNCwsNgsMsCLVfDWfmDJRffmRRtmfRmPDRtR +BnLdNdjnBNcLngdCVBndgllFlQrrpQlSSFrQphFcQq +JmVLJPMNjmVJpMLJSVmNQZZQZZrnTHqZQHTrTTMr +ltfdwChhwRdRswDDdnBQqqWNTqrrHrqZRr +dwdwwDwsGlhhDFtsCwhsJLcPmGPcGzSjSjjLzNPS +QgSbgQCLQSJFMccLFLVVzH +WBNffrBpBNdNRdWDfptBtdzWcMZZVPMVwHMmsVHFccHsDsVc +ptphRWrfGRGRnqlCSQvhqbCzJS +VvdMLMLMBMlVlVschsNpDGpdNsGc +tqFSmnmnnttGfDqNcfvNDD +nzRHnrwrrWRrrzHtbMlTMBjCvWLgBBMl +pCBlRvzwzlCzvZqqDwzmvgtsLsQdgZsgPNtdrsWrst +JbGjbGVGHSFbhbnhTShSTbQtQrPsLsHLQgNRtsgdQsLP +GnnbJbGMGbSjjbSbCzqlwMRRDzqzMBBv +TTVRJVMWMshSQtjSVTQJRQlcCBncJccdppnJcBBDngFpgP +frvfzfHrwzZNrtNwzzzZncCCZFdFFCgBDpPcBcBg +LwNGbqwvmvvtbNQjQlVVRWTGTQWM +RnggwVLRLDfCVZhfpDGGMGMGcGzGNHvv +jmmWBTSsBmFmSzctsqpccHvzpN +SBSrTblSQPbQhNwwZfPVdZPf +CCvCwzfNStLzfrbmMJbZMtlsbJMW +gPPPBqDjBcPFpVgBRbnMsVsbJZnWsdbSbM +qgDPHjHcPhpDRRpPBRpCGSLwvHQwGfzrHLGLTL +CLGqDZZLTdddPsdJpq +gbRbbnghnrWvgrdJdSTRSsVNJlld +hMnwrjnnjggvnLDwGffTfwCZZZ +NzJHbNHNNzJzgmHmzpQSvvLqbLsVVsVGvB +WtWhtWDdrZldDWrWTlZgppVVsqQTVQBqsGqBsQVp +jWjWRRRlPcHRwJgw +CCnnFTmnPCMCRNfnwGwdfzvwwl +VQQVShDSSshhDDtDLhjccGjLBBzBzlZflNZvwZzdwBzpSNNZ +QLHhJDDhDhgscgtjbGHTrWbrTbRmbFrm +CJbLvJvbwtFHqvLzwJqqqtHWTWRgDScDRSWQQjTRcWRDLT +mssGsMNphZMNsPPBnhSjRgdnQRdWgdjgrcDn +GGmBMMsffmslMGshZlMphGqCzHCbzlbvzqwzzgFJggCF +WCgWBphpWLQZQpgdhGdwmfbfFRVRjRTbbSFttdbSbT +qqrZnDNqZJDTVzRjVFbfSN +rPMvqJJqrJMPJnZMZZgLPgLWLggWQghwhmBh +CWGGzdHHmPPSmPsC +LqwlZwRLrPMQlMqrlbZrQRsSNsmssSNSsNcBNpgmsJ +lwLDQhrDMQqPGfhzGGjhGn +ZqDlZssCqJJMvpdBpBBmBQSMRp +wLgVcbgFLzTLTNNZmNNRdjdRmF +HZHbctWTwgVWgsfrnnPqlnsWlD +RSnwSPFcLnFPnRwjzctzbGNlZgNbbGdGpLhZdpgM +BqqBfMvTmmJqDgGNVdGVbVJJZG +vsTDfqBmHmMWQCwjtrHjjSFFnRSn +LsCmmcDHRjdtNMstwwzJ +TvThqfBFBNTnnndTtL +lvGQfbFQGblFrRccLRSSlPPVHS +qbLpqTHSqpbqbrPcQgjPDjcdDL +gnzhhBBwBWZzMglmjDrDPjvfdvQPdwtd +WZZzZZlZmhsMmFgRBBBzHHJpNJGVRSJVGTVpNqCH +JDphhGhDdGzWRBnvqqLDNLMnLw +gsrTHHffTHPcrPrlHCNZhvBZnZNLhPvBNwvh +sHVCSsSghJpSJjQh +JTMGlfjlTdqjnqbnqFwqmnbQ +PBZhBBcWRZprPZcZDDCZTZRgnnzwbbsbnvhbvznFsNFFvvNQ +BcWrVgCCZTDRDrlGttfVtMddSJlH +vwwvpVbSvnSRRmfMCmTHVHTBHB +QLZgDPgSDgGTMZfmTTBZ +QDDsQFDlzlgtJlLdFDgSJQFvvpRvjqzjRwwwzWvhvWwqjj +mRRTGGNNflGRGGmmgRblsGwCZwVZlZjVwjztpjZhpBCB +PMLLFLHPLPnLqDDLvFDrzzMjhwVCjtphBzjMhV +FDdSPSpLcDsNRRWSTNWN +STldJthdJbtTqljCRDDHmqmj +VVvNwwvNFssJFJPNNwVvRMCgCgDqjjjqrDqqMHqP +QBZwQfZwfVhtcSBtBJnT +TzjjPzsQTslNlNzPRVGJJJGGtTJmgJHtmTZC +dBDWScMBhhPGgdwwJPfw +SqSqbSPDBhqnMqvrrSWVNFpRVRLzVQslvpNjVL +bWFgFCPFtgvDZWgtChDNFJHvGVzHHpjzHnnzGzzHRR +qcScQbbmqdQmlQmrlcQwLmHlRRjzGHnHJnnGVjHzBHzG +TqQwmLmfcddfwrfCgbWCNPsZNfCb +pddprrtrCPdvJdMjwwwHnLwwjLWCLg +qhzZTmZcmRhmpFlVHcQQVwWQHVQwnH +lGmhfRfmBZRlmmbvDPBMvNbvJJpP +NsptgfGLLNwnNQSZbCvZnRnMCb +JldhdzwzBMCSZvrz +JFcdWTdwhPTFVDVmTJNqmstLqgLtLtjGGpsG +dVVTSgTDpHVDjgdWpdpHTZSbWGrnnvrNwzFGNrFwnNNwvh +CPRlMPJcMQcBcsmmLCMPrzbFfhwfrvLrNNwwGwfF +CRJmtbmJlQbsQlRBpZDVjTHTdjDtSjZt +rQVJrRFdrwDfzHQHQBTnpWTW +PCLbPcPCsgqCgPgLjScSqNbHTzMtWmWtzlTHmBtTlMssMT +cCqghSSPcvgScPbwFGdDDVZFfDhZGB +zrRQRdqzPHQtnMPrtzPMRRQMVBBblJJBSClBpJbpdCCbBlCC +hTcGwzswGwGmGfDvvfGmGNfBpllVSWbWppNCBNBVpCBClW +gvGFTmTgwDhTDccsTfzfmfGGQPgPPqrgRZPHnRqRZrQLnRgP +hvmmJllPbmCRMNGMMlNwNl +PFTpTVjTgpTpBRgMGMnRNHBB +WWrqzTTPVQDPqpjTqPJbmLtcfsQsftbLbvct +SzrmpjjcsjTZNzgnnNzN +BLHNDwBLBPLwLBhwDVLgdQCgCQGTngHQZCngZd +PPJBDvBVVBmppNjJjrrr +ZHBNQFhsqHBsgCfqtctcPvSwPqrV +LlnGTnJpJJTmdDpmLlmLndWfVrPvvRwDfcwwwRVwcfQtvP +GnbQblWmWGdTJQdTGnZHsHhZhFNsbCsjFgjC +hWfDzDTVndDMhddMlBWMBDfJRnRtvvSSQjCvZCtjtpJvSR +bGHsccFcbscsqGPHNGcrpjJZtvSRtFtQCZrjSj +GsbwGGwNNGLgPLwMzBzfMMVMTLdTCC +GBcNzTSSmGzmTLNgvwgpNCDqpDggpw +JRZMrJWFZZnZtJgvvjwbpbCJDd +rFMPRhZtZFnWrRtQGmPPDcLfmGLTfz +VdWnVdjhhdFjVWbndMlNLQspVMHCNVlClV +RSrJBRRJwJSBQpMBHLLDCL +TqwtRRRJzJTSqJSzSrtmqgWWhcncvPgnWbPQnbnWmb +VnDFpPpFssVSpFDVHbRbscCvgbMTvTCR +JfzqdQBfhBdddfBBGDLdGQvbrqMMcCRRMTgbqgMrbbqc +QDfzJNWBJLQBhmdGDzDGhQGGlFZwPtWjtFFppllSVpZZFnjj +qrLLNpJbJnRLNnpvQtRVhhRFCdlFFlFd +mmjzjvGjwPwmTsSTSQjDVlVWQjlCDthCCC +cSSmcTTPcSswScfSHmTSTzJqqNrnpBpqBbJLvZMrqfrL +NSvRZRfFvfHSZQcNJBLbzDLnrDFnhtFLFnrh +wmTGpmGCwsMplMsHllPlMnDLjznrgrzDjgnntznr +dsCVGGGwmpTGPplmCmPppVmHSSRJNfJvBNZQfWdBRJZRBZcR +TwQwqDPQtwNwzNDTZcnZbJvMnMMbFqZM +SzGSjrjLWrjHHspWVhvVVnFJbccVZcRJbllb +pHppszGSprhhWHLCLrsjdTtDDPfwdfwtdNfDgNCN +ftcvBtBFtmBlmvPFmmcczCChrgSCzzCSnCSSnGHf +sJddbdTDbDHdnJRggrGzGzrG +dppDVDZMMMsTTVsDTsTDpwVctNcvBZQPcPctqtQcHmvlvQ +jzbdzztbDqNqwvLvRmQZjvRH +FSJbFFWgJnZFLRZmHmRQ +TgVJTVSJGJcJlllgTMdqpdNsrztNNsNbMDDp +CCCVWbwVnlRbTcqSShqGhhGcnF +PgDBfDpMNlfgpPfNZZtcJgcqqhmmjqSmjFmhmS +tpfpsPrlpsPDDMDfBZrwLrVWLLLWRCdHLTwbVR +pjvfDGjSMpvDmDpDpSDnJmfqbPVsCMFsPqFVPqCrwrbMFV +NQlHtHNhZHgZZNBHhQgzPmCwbqqVFlsrPFrFCP +hgHtQdQchcHctHgcgNgBQdWNpmvTWvpGmLJDLGjTpLGnnjfv +QhgLLLmtlRqDtRGP +HLbnCZFWVHLZnFCJJRFrGJzDGDGJDD +WZHfndfMfCZbMnTVTfZhSNQQpdwSdLwhNcmdSN +sPwrPMgLFPFFsLZtmcclSSZDtcZs +qVzqdNdCnnNVVNCGmbncDBlmBlBBnRlZ +VTdCGVvVfffrjpfMQPwm +BPDldDTDPZcggjcccTdNMbbMNSQNqqjtzMbrRb +LvmWsfvssLGnQbQMRQqrSRnz +WpvsVmmpmmfpfJGrHfVCHVvmcDgpDlZphgFgdhclhdgdBlgF +VGwHbNzMMrzHbbHChhqgCqPNghgCqW +ZJVBvBvZWqvRvggP +JBJlBlBZcsBfcJVrHnLwQQGzLQMc +gBWfBPPPfhvVWFfSVfVdjjbvTvwwQppHcHcctTcQTHcZ +DnNnMJMqMJzqchbZtTQQrb +llRmNLDLDGlCsWSFCffWdshd +LpNMZZpqqpfTTwNqLZwGsZqZbdHRHbHGddnCBHRcmzGmmCdG +JFRtRlVStjPlhtjbBzBncmVWdzWBnb +rPhhSlrvQlFFFPgtJlJtFlhlDNTwRMfZTZfDZNrspZLMMsrq +zBLjLFBjLjmHWlzNZlzVCC +dcJrdfddbllJbdMTwDNMZWNVwVDwHT +gRcgJbcbqfgbftdjlqLhFFLPPhGBjm +WfBgBRzQGNNQqmmqZN +nFjCjCpLbtpPJtCDDnCDJpzncrSVbmdVqbhhdqNbSSmrdVSq +CLPJpDLlLlFDpFjjsGRsBGRfWwsHHglz +lSlSlpCRSsWTRLTlWRvlmMrBPjBPjpqrrmqPJMPZ +DDzbhVhQhDGzhQnGGfnHHQGBPZjMqJjBJMBVJmqMdrqqdT +NNGQbFwnHzNzwbQwFnwbfsLCLtsvLsWggFslsTggSc +nvzPvCnlvtwCrZWmWwvvZCQfbbfQfGbqSJJGmqGSFSbJ +LhTBWdsMNNRgNcgDWsDNcVSfQqJGFSFJqSSddQGSJF +HNgchHcWDRNhTNMWwtPrtZZjnHzrnvCz +djhnzRghMMVCBfhh +qjQTrTPQJCDDqBDJ +LQvGrLjTHLjNNPPTpQgtztSmmbFgmgLbFnmL +FRDNFBBRRVFFmbLZHPZBZvvH +QnhgMllglJTdGgJnhLQQJpZpvwZHpwsPTwpbsZHmsH +lnhnQGrMgthMlntlGfQhgWWcRSDcVCrLWzRSrRFDRN +PqrrrRnPBbrVhVqFrFVRPVhZLvNSNvLZcQvtJfRvNScJNJ +dDzWwwCTmmdwdddpDLWQZMSSMfSJtcWJfQSQZN +CCwmTdjsClVjFjnLBl +srjCvjPmQVlPjFPmQmPrdHHZhvHZDqHhDDwHHqfB +pLcnJQNQMZpqZDDZ +WNRbtNJgRPjjQVmz +NJJRmjmJbbJfqSVMNHFCSFzLLlrLLrFHTz +QvnsQGvBwWwQvgRHlGGDFPFCGlrR +QhvwBvBctBccZWZNRNmVfjpmjJjb +RMmGGMLRRCFmRPPfGFpGPFPJWZQWctrtlQvZvltfrQWcWWBq +gggwjjbjwwbZtwZBBcmQQv +SdNbDDVSgPMFmPzdMm +nZhnNZDnZPmZPWbppPpMlvRlzvrtMmRtqRzRfq +HcFwsCQLVQwFwLtLbvtzrlrLtt +GsgCFCgCQHHCVHsFQHcFdDPDbJDZTpZDbWJPNWWZDd +BBrBrGlGpgGjsNhlBlpBwpfSwZJdQwfcZwvSQnnn +LvWvHLmmVJQQHfQH +RPLRMvqFTbRTjGBhjNFsslls +cNZZZmZDcDDJmhzzrrlHtSbvgjSvgfPSWvPfjShv +VBwnndnVCqbqpRRpnspnqRWtGgWSSgvFBSGGSWgtGGSP +LqCMnTLVRwCRCpRLpbHDNzMMNcmmHNHQJQ +MMqDtnVnBlHtZvtB +WLWrWgdWwdrLCTFCwLlbbsJsJQsbQlQzlvrB +jFSvTdjfnfRmVcRR +ZLGqnvnqLzvbGRMfcRpwMpdV +fgfNNfgHHjVmRcVdgM +HsWDCDfCQCZBBZnvWtLq +bTZjqflqZhcrlczGzppGNgjmFNnp +PmmRSWWDMBQVNpWFznGF +SStRBDSCCSSSwPBwBDBwPmZhZlfZhqHTsTfltHHZfsHH +GbNbsSptQGqsdJCzsddcgzzv +DHRRnmWWmZnmRhllnHnnnMLvvLgcTVvjVhCTvgzcJgLj +RnWMlDZRlnHlmHWBFwGQqNGGPNQzPGqFwz +vSGvHpJnBLbGHBNCgfDzzChDgbCfzT +wFRslqmqTRgggQghPmQf +qjRFMjWqNNMMGHTL +fWGcQGGSRFQZhttZJfSSJflDDrwdClljVrNDdrdCFBCr +MTgvLLPPnHzMbDwdlNbMBwMM +mnTvnnPTcNmmJJWN +qqbbQQnbWrqGgnWqvZpVzMCZjCgfjZCSVM +ldcmDPDhmlFBHPDddLBVFDHLppZpjSCjjNfwNMwCpSMwhCMp +FtDdsHPcHmdHVPLtHsdtBHQnsbvnTRRTRsRRqbqvqWnJ +hhtBtPrgbbhhgjZjjCCHHNpNDHpffHWCvr +LGFLVwswsJMSgFwMMpddSvpHCCdDdvCpvm +sGsFsQLsVsLFnnFTJQthjcjQqhRcBZZtRg \ No newline at end of file diff --git a/2022/go/day04/day04.go b/2022/go/day04/day04.go new file mode 100644 index 0000000..f5b789e --- /dev/null +++ b/2022/go/day04/day04.go @@ -0,0 +1,59 @@ +package day04 + +import ( + "strings" + "strconv" +// "fmt" + + mapset "github.com/deckarep/golang-set/v2" + +) + +func Part1(input string) int { + var count int = 0 + lines := strings.Split(input, "\n") + for _, line := range lines { + pairs := strings.Split(line, ",") + + pair1 := strings.Split(pairs[0], "-") + pair2 := strings.Split(pairs[1], "-") + + p1set := mapset.NewSet[int](Range(pair1[0], pair1[1])...) + p2set := mapset.NewSet[int](Range(pair2[0], pair2[1])...) + + if p1set.IsSubset(p2set) || p2set.IsSubset(p1set) { + count++ + } + } + return count +} + +func Part2(input string) int { + var count int = 0 + lines := strings.Split(input, "\n") + for _, line := range lines { + pairs := strings.Split(line, ",") + + pair1 := strings.Split(pairs[0], "-") + pair2 := strings.Split(pairs[1], "-") + + p1set := mapset.NewSet[int](Range(pair1[0], pair1[1])...) + p2set := mapset.NewSet[int](Range(pair2[0], pair2[1])...) + + if len(p1set.Intersect(p2set).ToSlice()) > 0 { + count++ + } + } + return count +} + +func Range(start string, end string)[]int { + s, _ := strconv.Atoi(start) + e, _ := strconv.Atoi(end) + + var r []int + for i := s; i <= e; i++ { + r = append(r, i) + } + return r +} \ No newline at end of file diff --git a/2022/go/day04/day04_test.go b/2022/go/day04/day04_test.go new file mode 100644 index 0000000..ca17625 --- /dev/null +++ b/2022/go/day04/day04_test.go @@ -0,0 +1,29 @@ +package day04 + +import ( + "testing" + + "github.com/stretchr/testify/require" +) + +func TestPart1(t *testing.T) { + r := Part1( +`2-4,6-8 +2-3,4-5 +5-7,7-9 +2-8,3-7 +6-6,4-6 +2-6,4-8`) + require.Equal(t, 2, r) +} + +func TestPart2(t *testing.T) { + r := Part2( +`2-4,6-8 +2-3,4-5 +5-7,7-9 +2-8,3-7 +6-6,4-6 +2-6,4-8`) + require.Equal(t, 4, r) +} diff --git a/2022/go/day04/input.txt b/2022/go/day04/input.txt new file mode 100644 index 0000000..6398f2a --- /dev/null +++ b/2022/go/day04/input.txt @@ -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 \ No newline at end of file diff --git a/2022/go/day05/day05.go b/2022/go/day05/day05.go new file mode 100644 index 0000000..5988915 --- /dev/null +++ b/2022/go/day05/day05.go @@ -0,0 +1,93 @@ +package day05 + +import ( + "fmt" + "strings" + + "github.com/philhanna/stack" +) + +func Part1(input string) (result string) { + + result = "" + var stacks [9]stack.Stack[string] + var lineNo int + + for i := 0; i < 9; i++ { + stacks[i] = stack.NewStack[string]() + } + + lines := strings.Split(input, "\n") + for n, line := range lines { + if line == " 1 2 3 4 5 6 7 8 9 " { + lineNo = n + 2 + break + } + for i, r := range line { + if r != ' ' && r != '[' && r != ']' { + stacks[i/4].Push(string(r)) + } + } + } + for i := 0; i < 9; i++ { + stacks[i].Reverse() + } + var quantity, from, to int + for _, line := range lines[lineNo:] { + fmt.Sscanf(line, "move %d from %d to %d", &quantity, &from, &to) + for i := 0; i < quantity; i++ { + value, _ := (stacks[from-1]).Pop() + stacks[to-1].Push(value) + } + } + for i := 0; i < 9; i++ { + item, _ := stacks[i].Peek() + result = result + item + } + return +} + +func Part2(input string) (result string) { + + result = "" + var stacks [9]stack.Stack[string] + tmp := stack.NewStack[string]() + var lineNo int + + for i := 0; i < 9; i++ { + stacks[i] = stack.NewStack[string]() + } + + lines := strings.Split(input, "\n") + for n, line := range lines { + if line == " 1 2 3 4 5 6 7 8 9 " { + lineNo = n + 2 + break + } + for i, r := range line { + if r != ' ' && r != '[' && r != ']' { + stacks[i/4].Push(string(r)) + } + } + } + for i := 0; i < 9; i++ { + stacks[i].Reverse() + } + var quantity, from, to int + for _, line := range lines[lineNo:] { + fmt.Sscanf(line, "move %d from %d to %d", &quantity, &from, &to) + for i := 0; i < quantity; i++ { + value, _ := (stacks[from-1]).Pop() + tmp.Push(value) + } + for i := 0; i < quantity; i++ { + value, _ := tmp.Pop() + stacks[to-1].Push(value) + } + } + for i := 0; i < 9; i++ { + item, _ := stacks[i].Peek() + result = result + item + } + return +} diff --git a/2022/go/day05/day05_test.go b/2022/go/day05/day05_test.go new file mode 100644 index 0000000..9fff6c6 --- /dev/null +++ b/2022/go/day05/day05_test.go @@ -0,0 +1,17 @@ +package day05 + +import ( + "testing" + + "github.com/stretchr/testify/require" +) + +func TestPart1(t *testing.T) { + r := Part1("") + require.Equal(t, 0, r) +} + +func TestPart2(t *testing.T) { + r := Part2("") + require.Equal(t, 0, r) +} diff --git a/2022/go/day05/input.txt b/2022/go/day05/input.txt new file mode 100644 index 0000000..7875817 --- /dev/null +++ b/2022/go/day05/input.txt @@ -0,0 +1,514 @@ + [G] [D] [Q] +[P] [T] [L] [M] [Z] +[Z] [Z] [C] [Z] [G] [W] +[M] [B] [F] [P] [C] [H] [N] +[T] [S] [R] [H] [W] [R] [L] [W] +[R] [T] [Q] [Z] [R] [S] [Z] [F] [P] +[C] [N] [H] [R] [N] [H] [D] [J] [Q] +[N] [D] [M] [G] [Z] [F] [W] [S] [S] + 1 2 3 4 5 6 7 8 9 + +move 7 from 6 to 8 +move 5 from 2 to 6 +move 2 from 4 to 1 +move 1 from 4 to 5 +move 5 from 7 to 6 +move 7 from 6 to 3 +move 5 from 9 to 2 +move 6 from 2 to 3 +move 2 from 7 to 9 +move 20 from 3 to 1 +move 11 from 1 to 6 +move 1 from 9 to 8 +move 3 from 8 to 2 +move 8 from 1 to 5 +move 10 from 8 to 4 +move 7 from 6 to 4 +move 1 from 8 to 3 +move 8 from 1 to 7 +move 16 from 4 to 8 +move 1 from 9 to 8 +move 1 from 5 to 2 +move 4 from 7 to 4 +move 5 from 6 to 7 +move 1 from 6 to 1 +move 8 from 7 to 4 +move 1 from 6 to 9 +move 12 from 4 to 5 +move 3 from 2 to 5 +move 1 from 6 to 2 +move 1 from 3 to 7 +move 1 from 3 to 2 +move 1 from 9 to 3 +move 1 from 7 to 8 +move 1 from 7 to 5 +move 1 from 3 to 2 +move 4 from 5 to 7 +move 5 from 5 to 7 +move 1 from 4 to 3 +move 1 from 3 to 9 +move 3 from 1 to 8 +move 1 from 9 to 1 +move 2 from 2 to 1 +move 2 from 2 to 7 +move 8 from 8 to 1 +move 3 from 5 to 2 +move 8 from 7 to 5 +move 7 from 1 to 3 +move 3 from 1 to 7 +move 1 from 1 to 5 +move 1 from 3 to 7 +move 7 from 5 to 8 +move 2 from 2 to 8 +move 1 from 3 to 2 +move 1 from 2 to 4 +move 1 from 4 to 8 +move 13 from 8 to 1 +move 13 from 5 to 9 +move 2 from 5 to 2 +move 7 from 9 to 3 +move 12 from 8 to 3 +move 4 from 9 to 3 +move 1 from 3 to 4 +move 2 from 2 to 3 +move 1 from 1 to 6 +move 1 from 2 to 3 +move 1 from 5 to 9 +move 7 from 7 to 4 +move 10 from 1 to 8 +move 1 from 1 to 4 +move 1 from 9 to 5 +move 2 from 5 to 1 +move 1 from 6 to 5 +move 3 from 8 to 9 +move 5 from 4 to 3 +move 4 from 4 to 1 +move 7 from 1 to 6 +move 2 from 5 to 7 +move 35 from 3 to 4 +move 4 from 9 to 1 +move 19 from 4 to 8 +move 1 from 7 to 6 +move 1 from 9 to 2 +move 10 from 4 to 5 +move 2 from 4 to 7 +move 3 from 4 to 3 +move 1 from 2 to 8 +move 1 from 1 to 9 +move 3 from 3 to 6 +move 4 from 8 to 6 +move 4 from 5 to 2 +move 2 from 8 to 3 +move 3 from 5 to 9 +move 12 from 6 to 1 +move 8 from 8 to 6 +move 2 from 9 to 1 +move 1 from 4 to 1 +move 1 from 3 to 8 +move 3 from 7 to 8 +move 2 from 9 to 7 +move 1 from 6 to 7 +move 10 from 6 to 8 +move 4 from 2 to 5 +move 1 from 3 to 7 +move 7 from 5 to 7 +move 13 from 8 to 1 +move 29 from 1 to 4 +move 8 from 7 to 8 +move 1 from 1 to 3 +move 3 from 7 to 6 +move 1 from 1 to 9 +move 15 from 4 to 1 +move 1 from 3 to 6 +move 10 from 1 to 6 +move 10 from 6 to 7 +move 1 from 4 to 9 +move 1 from 9 to 1 +move 1 from 9 to 7 +move 6 from 7 to 8 +move 1 from 1 to 6 +move 5 from 6 to 5 +move 21 from 8 to 9 +move 5 from 1 to 9 +move 2 from 9 to 5 +move 3 from 5 to 6 +move 3 from 7 to 9 +move 4 from 4 to 6 +move 6 from 8 to 7 +move 6 from 6 to 3 +move 2 from 7 to 9 +move 1 from 7 to 2 +move 6 from 3 to 2 +move 1 from 6 to 4 +move 4 from 5 to 9 +move 1 from 4 to 5 +move 9 from 4 to 6 +move 7 from 6 to 4 +move 10 from 9 to 2 +move 5 from 7 to 5 +move 10 from 2 to 7 +move 2 from 5 to 4 +move 2 from 5 to 9 +move 4 from 9 to 4 +move 1 from 8 to 6 +move 7 from 7 to 2 +move 1 from 5 to 4 +move 2 from 7 to 1 +move 1 from 5 to 7 +move 3 from 6 to 2 +move 4 from 4 to 5 +move 1 from 2 to 7 +move 10 from 4 to 7 +move 3 from 7 to 3 +move 17 from 9 to 4 +move 1 from 1 to 4 +move 1 from 1 to 5 +move 5 from 2 to 7 +move 1 from 9 to 2 +move 5 from 4 to 8 +move 2 from 9 to 7 +move 4 from 8 to 1 +move 3 from 4 to 8 +move 1 from 2 to 5 +move 1 from 9 to 2 +move 6 from 4 to 8 +move 3 from 7 to 5 +move 1 from 4 to 9 +move 1 from 9 to 1 +move 3 from 1 to 9 +move 4 from 8 to 5 +move 2 from 9 to 8 +move 4 from 2 to 5 +move 8 from 7 to 2 +move 5 from 8 to 5 +move 2 from 7 to 8 +move 1 from 3 to 5 +move 1 from 1 to 2 +move 1 from 1 to 6 +move 2 from 3 to 6 +move 5 from 2 to 8 +move 4 from 7 to 1 +move 7 from 8 to 5 +move 1 from 1 to 5 +move 3 from 8 to 3 +move 1 from 9 to 3 +move 7 from 2 to 3 +move 2 from 2 to 8 +move 2 from 4 to 8 +move 1 from 8 to 5 +move 1 from 1 to 4 +move 2 from 4 to 7 +move 2 from 7 to 1 +move 3 from 2 to 3 +move 3 from 5 to 2 +move 1 from 8 to 3 +move 3 from 3 to 2 +move 5 from 2 to 1 +move 17 from 5 to 8 +move 9 from 8 to 1 +move 11 from 3 to 5 +move 8 from 8 to 5 +move 2 from 8 to 5 +move 16 from 1 to 4 +move 13 from 4 to 7 +move 6 from 5 to 2 +move 2 from 4 to 8 +move 5 from 7 to 9 +move 2 from 1 to 2 +move 7 from 7 to 1 +move 1 from 1 to 4 +move 1 from 9 to 8 +move 7 from 2 to 8 +move 1 from 4 to 7 +move 2 from 9 to 4 +move 1 from 4 to 1 +move 1 from 3 to 5 +move 2 from 9 to 8 +move 11 from 8 to 7 +move 2 from 6 to 5 +move 1 from 6 to 9 +move 1 from 1 to 9 +move 1 from 9 to 1 +move 4 from 1 to 4 +move 2 from 1 to 8 +move 1 from 1 to 2 +move 1 from 9 to 5 +move 2 from 4 to 3 +move 2 from 2 to 7 +move 2 from 3 to 9 +move 1 from 9 to 1 +move 1 from 9 to 1 +move 5 from 5 to 1 +move 19 from 5 to 6 +move 5 from 1 to 4 +move 1 from 2 to 9 +move 1 from 1 to 3 +move 7 from 5 to 8 +move 1 from 3 to 6 +move 8 from 7 to 3 +move 7 from 4 to 8 +move 3 from 8 to 5 +move 1 from 4 to 1 +move 1 from 9 to 4 +move 1 from 4 to 9 +move 1 from 5 to 2 +move 2 from 5 to 6 +move 2 from 8 to 2 +move 7 from 8 to 1 +move 1 from 1 to 7 +move 3 from 6 to 9 +move 2 from 3 to 2 +move 1 from 2 to 1 +move 1 from 8 to 7 +move 2 from 9 to 6 +move 2 from 9 to 5 +move 1 from 5 to 6 +move 1 from 2 to 8 +move 2 from 1 to 7 +move 1 from 4 to 3 +move 3 from 2 to 5 +move 7 from 1 to 3 +move 10 from 3 to 4 +move 3 from 5 to 4 +move 1 from 3 to 8 +move 3 from 3 to 2 +move 1 from 8 to 1 +move 1 from 1 to 3 +move 3 from 8 to 3 +move 5 from 4 to 6 +move 1 from 2 to 3 +move 4 from 6 to 4 +move 1 from 5 to 7 +move 4 from 3 to 4 +move 1 from 2 to 8 +move 12 from 7 to 6 +move 1 from 8 to 2 +move 2 from 2 to 7 +move 1 from 8 to 4 +move 23 from 6 to 3 +move 14 from 3 to 6 +move 15 from 4 to 6 +move 1 from 8 to 6 +move 10 from 3 to 7 +move 2 from 4 to 2 +move 11 from 7 to 8 +move 2 from 2 to 6 +move 44 from 6 to 9 +move 21 from 9 to 3 +move 12 from 3 to 6 +move 1 from 7 to 4 +move 1 from 4 to 7 +move 9 from 3 to 2 +move 2 from 8 to 6 +move 3 from 2 to 4 +move 17 from 9 to 1 +move 3 from 4 to 6 +move 2 from 2 to 9 +move 4 from 9 to 2 +move 10 from 6 to 9 +move 1 from 7 to 6 +move 4 from 9 to 5 +move 4 from 2 to 4 +move 14 from 1 to 5 +move 4 from 4 to 3 +move 3 from 2 to 9 +move 9 from 9 to 7 +move 1 from 2 to 5 +move 9 from 8 to 5 +move 8 from 7 to 2 +move 4 from 3 to 8 +move 5 from 6 to 2 +move 3 from 1 to 6 +move 1 from 7 to 1 +move 4 from 2 to 4 +move 3 from 6 to 4 +move 3 from 8 to 3 +move 13 from 5 to 2 +move 2 from 3 to 5 +move 12 from 5 to 9 +move 1 from 3 to 5 +move 1 from 5 to 9 +move 1 from 8 to 3 +move 4 from 9 to 5 +move 6 from 4 to 5 +move 12 from 9 to 7 +move 1 from 9 to 3 +move 1 from 3 to 2 +move 12 from 5 to 6 +move 12 from 7 to 2 +move 1 from 3 to 7 +move 1 from 4 to 8 +move 33 from 2 to 8 +move 1 from 7 to 5 +move 1 from 1 to 2 +move 4 from 5 to 4 +move 3 from 2 to 5 +move 34 from 8 to 6 +move 1 from 4 to 3 +move 1 from 5 to 7 +move 1 from 7 to 5 +move 3 from 4 to 9 +move 2 from 9 to 7 +move 1 from 9 to 4 +move 1 from 3 to 7 +move 1 from 5 to 8 +move 1 from 5 to 1 +move 1 from 5 to 7 +move 1 from 4 to 8 +move 1 from 1 to 4 +move 1 from 4 to 2 +move 3 from 7 to 5 +move 2 from 8 to 5 +move 1 from 2 to 8 +move 4 from 6 to 2 +move 1 from 8 to 6 +move 1 from 7 to 9 +move 29 from 6 to 7 +move 4 from 2 to 3 +move 2 from 5 to 8 +move 1 from 9 to 5 +move 2 from 8 to 1 +move 23 from 7 to 5 +move 2 from 6 to 1 +move 23 from 5 to 6 +move 1 from 3 to 6 +move 4 from 5 to 9 +move 2 from 1 to 3 +move 5 from 3 to 8 +move 2 from 6 to 5 +move 2 from 1 to 4 +move 1 from 9 to 8 +move 1 from 9 to 1 +move 1 from 4 to 6 +move 2 from 5 to 6 +move 6 from 7 to 8 +move 2 from 9 to 2 +move 18 from 6 to 5 +move 21 from 6 to 4 +move 1 from 1 to 6 +move 2 from 6 to 7 +move 2 from 7 to 9 +move 2 from 2 to 8 +move 7 from 4 to 3 +move 12 from 5 to 3 +move 1 from 9 to 5 +move 1 from 9 to 4 +move 6 from 5 to 2 +move 17 from 3 to 4 +move 3 from 4 to 3 +move 1 from 2 to 4 +move 5 from 2 to 8 +move 1 from 5 to 8 +move 19 from 8 to 7 +move 1 from 3 to 6 +move 1 from 8 to 4 +move 1 from 6 to 1 +move 15 from 4 to 6 +move 1 from 1 to 4 +move 3 from 3 to 5 +move 4 from 6 to 7 +move 1 from 4 to 7 +move 10 from 6 to 7 +move 16 from 4 to 5 +move 24 from 7 to 2 +move 8 from 7 to 8 +move 1 from 4 to 2 +move 6 from 8 to 7 +move 1 from 8 to 7 +move 1 from 6 to 9 +move 14 from 5 to 4 +move 9 from 7 to 8 +move 4 from 5 to 1 +move 2 from 1 to 5 +move 3 from 8 to 6 +move 2 from 6 to 9 +move 2 from 2 to 8 +move 6 from 2 to 7 +move 3 from 4 to 6 +move 1 from 3 to 4 +move 3 from 5 to 7 +move 1 from 6 to 9 +move 5 from 7 to 2 +move 4 from 9 to 1 +move 1 from 7 to 9 +move 9 from 8 to 4 +move 5 from 1 to 2 +move 2 from 6 to 1 +move 6 from 4 to 7 +move 1 from 7 to 3 +move 1 from 3 to 9 +move 1 from 9 to 7 +move 1 from 6 to 7 +move 9 from 4 to 5 +move 7 from 7 to 9 +move 3 from 7 to 5 +move 1 from 9 to 2 +move 6 from 9 to 8 +move 4 from 4 to 5 +move 1 from 4 to 2 +move 1 from 4 to 2 +move 2 from 1 to 2 +move 1 from 9 to 8 +move 10 from 2 to 4 +move 8 from 2 to 7 +move 12 from 2 to 9 +move 6 from 7 to 4 +move 1 from 1 to 2 +move 8 from 9 to 8 +move 7 from 5 to 1 +move 9 from 4 to 3 +move 14 from 8 to 4 +move 1 from 8 to 4 +move 1 from 1 to 5 +move 1 from 5 to 2 +move 3 from 2 to 4 +move 1 from 7 to 1 +move 1 from 7 to 3 +move 2 from 1 to 7 +move 3 from 5 to 7 +move 2 from 7 to 6 +move 1 from 6 to 5 +move 3 from 7 to 1 +move 1 from 6 to 8 +move 1 from 8 to 7 +move 1 from 3 to 6 +move 1 from 7 to 1 +move 4 from 1 to 4 +move 6 from 3 to 2 +move 3 from 1 to 2 +move 3 from 3 to 6 +move 3 from 2 to 6 +move 6 from 6 to 5 +move 1 from 1 to 4 +move 1 from 9 to 6 +move 5 from 2 to 1 +move 3 from 1 to 2 +move 2 from 9 to 8 +move 3 from 1 to 5 +move 1 from 9 to 7 +move 25 from 4 to 1 +move 1 from 1 to 7 +move 2 from 8 to 3 +move 13 from 1 to 9 +move 2 from 3 to 5 +move 8 from 5 to 9 +move 4 from 2 to 1 +move 2 from 6 to 7 +move 10 from 5 to 9 +move 4 from 7 to 2 +move 2 from 2 to 3 +move 9 from 9 to 2 +move 4 from 4 to 5 +move 4 from 5 to 4 +move 5 from 1 to 4 +move 10 from 4 to 5 +move 22 from 9 to 1 +move 2 from 2 to 7 +move 3 from 2 to 1 +move 6 from 2 to 6 +move 1 from 7 to 1 +move 10 from 5 to 7 +move 15 from 1 to 4 +move 13 from 1 to 5 +move 3 from 6 to 8 +move 1 from 8 to 9 \ No newline at end of file diff --git a/2022/go/day06/day06.go b/2022/go/day06/day06.go new file mode 100644 index 0000000..74bfcf7 --- /dev/null +++ b/2022/go/day06/day06.go @@ -0,0 +1,35 @@ +package day06 + +import ( + _ "fmt" + "sort" + "strings" + + "github.com/mpvl/unique" +) + +func Part1(input string) int { + for i:=4;i= size && (*sum == 0 || (subdir.size) < *sum) { + *sum = subdir.size + } + find_dirs_part2(subdir, size, sum) + } +} + +func (root *dir) parse(input string) { + c := root + + for _, line := range strings.Split(input, "\n") { + pieces := strings.Split(line, " ") + if pieces[0] == "$" { + if pieces[1] == "cd" { + if pieces[2] == ".." { + c = c.parent + } else if pieces[2] == "/" { + c = root + } else { + c = c.addDirectoryIfMissing(pieces[2]) + } + } else if pieces[1] == "ls" { + // no need to do anything + } else { + panic("oops") + } + } else if pieces[0] == "dir" { + c.addDirectoryIfMissing(pieces[1]) + } else { + c.addFileIfMissing(pieces[1], utils.MustAtoi(pieces[0])) + } + } +} + +func (d *dir) addDirectoryIfMissing(name string) *dir { + t, ok := d.subdir[name] + if !ok { + t = &dir{ + name: name, + files: map[string]int{}, + subdir: map[string]*dir{}, + parent: d, + } + d.subdir[name] = t + } + return t +} + +func (d *dir) addFileIfMissing(name string, size int) { + t, ok := d.files[name] + if ok { + if t != size { + panic("oops") + } + } else { + current := d + d.files[name] = size + + for current.name != "/" { + current.size += size + current = current.parent + } + current.size += size + } +} \ No newline at end of file diff --git a/2022/go/day07/day07_test.go b/2022/go/day07/day07_test.go new file mode 100644 index 0000000..ec74f8a --- /dev/null +++ b/2022/go/day07/day07_test.go @@ -0,0 +1,63 @@ +package day07 + +import ( + "testing" + + "github.com/stretchr/testify/require" +) + +func TestPart1(t *testing.T) { + r := Part1( +`$ cd / +$ ls +dir a +14848514 b.txt +8504156 c.dat +dir d +$ cd a +$ ls +dir e +29116 f +2557 g +62596 h.lst +$ cd e +$ ls +584 i +$ cd .. +$ cd .. +$ cd d +$ ls +4060174 j +8033020 d.log +5626152 d.ext +7214296 k`) + require.Equal(t, 95437, r) +} + +func TestPart2(t *testing.T) { + r := Part2( +`$ cd / +$ ls +dir a +14848514 b.txt +8504156 c.dat +dir d +$ cd a +$ ls +dir e +29116 f +2557 g +62596 h.lst +$ cd e +$ ls +584 i +$ cd .. +$ cd .. +$ cd d +$ ls +4060174 j +8033020 d.log +5626152 d.ext +7214296 k`) + require.Equal(t, 24933642, r) +} diff --git a/2022/go/day07/input.txt b/2022/go/day07/input.txt new file mode 100644 index 0000000..c2680f2 --- /dev/null +++ b/2022/go/day07/input.txt @@ -0,0 +1,1051 @@ +$ cd / +$ ls +dir ccjp +328708 hglnvs.bsh +dir hpsnpc +dir pcb +dir pntzm +dir pzg +dir thfgwwsp +$ cd ccjp +$ ls +159990 dlz +dir mbtsvblj +165076 nppbjl.qhg +$ cd mbtsvblj +$ ls +34806 frqsf.nsv +dir ppq +dir ptht +dir rgmvdwt +$ cd ppq +$ ls +266252 dhzp +$ cd .. +$ cd ptht +$ ls +dir jbnj +dir zcbnwhzd +$ cd jbnj +$ ls +dir clscr +145780 zwtwf.zfz +$ cd clscr +$ ls +249531 dhzp +$ cd .. +$ cd .. +$ cd zcbnwhzd +$ ls +dir mbtsvblj +$ cd mbtsvblj +$ ls +258527 pjhvzjt.brz +$ cd .. +$ cd .. +$ cd .. +$ cd rgmvdwt +$ ls +166021 hdb +115350 ljpzpdbf +$ cd .. +$ cd .. +$ cd .. +$ cd hpsnpc +$ ls +6334 bfdfbrh.vff +311949 qphlw.whm +$ cd .. +$ cd pcb +$ ls +dir ccjp +201615 gbpzf.gmg +dir lhth +319302 lrmj.rmm +dir mwl +303062 pvftq +$ cd ccjp +$ ls +10932 ccjp +80040 jjcggmr.ljs +299982 jrqwhsn.ptv +280655 ljpzpdbf +268430 mdvvj.dlf +dir mvhhlg +dir ppfq +dir rdgngdm +dir smftmb +dir tqwchhd +$ cd mvhhlg +$ ls +146902 fwhcbfr.shd +$ cd .. +$ cd ppfq +$ ls +263452 hdb +$ cd .. +$ cd rdgngdm +$ ls +46355 wlgshdgl +$ cd .. +$ cd smftmb +$ ls +56834 mhs +325038 ppmtvcj +dir rzcmwl +194645 ztwqq.jfw +$ cd rzcmwl +$ ls +dir btfhswwf +dir jrd +dir ndzfvl +$ cd btfhswwf +$ ls +62811 ccjp.clj +$ cd .. +$ cd jrd +$ ls +184948 fqqg.pfc +dir mshf +136894 nbvbr +$ cd mshf +$ ls +314602 ppmtvcj +$ cd .. +$ cd .. +$ cd ndzfvl +$ ls +43177 hhcfpnmg.njm +$ cd .. +$ cd .. +$ cd .. +$ cd tqwchhd +$ ls +294014 dlz +122061 ljpzpdbf +54178 ppmtvcj.wlp +dir trm +dir zcbnwhzd +$ cd trm +$ ls +279737 ccjp.mhz +$ cd .. +$ cd zcbnwhzd +$ ls +88477 dhnwjlzj +143989 dhzp +$ cd .. +$ cd .. +$ cd .. +$ cd lhth +$ ls +79532 tlls +$ cd .. +$ cd mwl +$ ls +dir frc +dir lqqqppm +178576 prpjmrw +$ cd frc +$ ls +dir cvm +244013 dhzp +29325 gnh +264555 hdb +$ cd cvm +$ ls +196619 hhcfpnmg.njm +$ cd .. +$ cd .. +$ cd lqqqppm +$ ls +dir jdznl +38505 nqv +$ cd jdznl +$ ls +85492 ctt +228912 dfbgtqj.vsb +136077 nnwgd.vjn +254459 zrrzsfss +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd pntzm +$ ls +dir hnnhdd +dir mbtsvblj +dir vmdlwdj +$ cd hnnhdd +$ ls +35908 fjp +119221 ljpzpdbf +210488 whhpztz.lgt +$ cd .. +$ cd mbtsvblj +$ ls +dir clfpc +dir csqcnmtc +18524 mbtsvblj +dir zcrrtlh +$ cd clfpc +$ ls +dir jffq +dir qpsfrhld +89569 tdzfqpz.wvs +$ cd jffq +$ ls +dir dpngpgr +dir htbf +$ cd dpngpgr +$ ls +128899 ccjp.nbs +$ cd .. +$ cd htbf +$ ls +90381 ljpzpdbf +$ cd .. +$ cd .. +$ cd qpsfrhld +$ ls +dir bgrb +dir ddtlcfz +54115 dlz +154299 hhcfpnmg.njm +59452 jwc.pwg +dir mbtsvblj +$ cd bgrb +$ ls +119046 ccjp.zmf +dir qsnng +$ cd qsnng +$ ls +195412 vjdh.cqv +$ cd .. +$ cd .. +$ cd ddtlcfz +$ ls +dir ftfch +26717 mbtsvblj +157679 mbtsvblj.rfb +299928 qmg +dir trq +dir wjhjlpr +$ cd ftfch +$ ls +50242 dhzp +58846 dlz +dir hhwsrzhv +$ cd hhwsrzhv +$ ls +dir bjnn +67610 dhzp +dir mbtsvblj +205664 tmcfmshb +$ cd bjnn +$ ls +199806 dlz +$ cd .. +$ cd mbtsvblj +$ ls +dir ffzjcshp +$ cd ffzjcshp +$ ls +dir ppmtvcj +$ cd ppmtvcj +$ ls +184744 dlz +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd trq +$ ls +278471 ccjp +$ cd .. +$ cd wjhjlpr +$ ls +dir wzwqrfhv +$ cd wzwqrfhv +$ ls +262877 ccjp +$ cd .. +$ cd .. +$ cd .. +$ cd mbtsvblj +$ ls +243142 ccjp.szb +306673 lmstdpfc.nww +dir nlsprnh +dir nmzwtwwc +dir rbpbl +$ cd nlsprnh +$ ls +200708 stbjphg.hcs +$ cd .. +$ cd nmzwtwwc +$ ls +323366 vzq.pcj +$ cd .. +$ cd rbpbl +$ ls +59872 fmnmsjr.svf +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd csqcnmtc +$ ls +16652 ccjp +dir fsfd +37144 hdb +dir mbtsvblj +dir mwl +66387 nljlpbjq +dir ppmtvcj +120839 rgclgwnq +$ cd fsfd +$ ls +105721 qqvchq.mwh +$ cd .. +$ cd mbtsvblj +$ ls +dir cdzgtll +dir dfgd +dir fbfr +165975 mbtsvblj +174541 ppmtvcj +dir vwgrpswj +$ cd cdzgtll +$ ls +163523 dhzp +124219 dlz +199796 hdb +$ cd .. +$ cd dfgd +$ ls +173064 ccjp.cbt +dir cdqc +dir fzrm +dir grcs +87000 mbtsvblj.zrl +dir njvgs +dir ppmtvcj +210984 rhtslcwt.wgt +dir vws +$ cd cdqc +$ ls +178924 hdb +$ cd .. +$ cd fzrm +$ ls +dir bjwtbc +211229 dhzp +dir dtslj +76461 mbtsvblj.mtw +317618 mmz.mqq +dir mwl +163587 vwgq +$ cd bjwtbc +$ ls +9891 hhcfpnmg.njm +dir mwl +$ cd mwl +$ ls +203337 glwp.dls +112753 mwl.qph +$ cd .. +$ cd .. +$ cd dtslj +$ ls +277817 hhcfpnmg.njm +$ cd .. +$ cd mwl +$ ls +90781 mhnrwpmg.svv +$ cd .. +$ cd .. +$ cd grcs +$ ls +286144 rnfqhs +$ cd .. +$ cd njvgs +$ ls +dir bmhdth +dir ccjp +dir mwl +$ cd bmhdth +$ ls +154455 ppmtvcj.hwq +$ cd .. +$ cd ccjp +$ ls +215864 fcwjtzhs.vqn +$ cd .. +$ cd mwl +$ ls +139000 fnjztz +$ cd .. +$ cd .. +$ cd ppmtvcj +$ ls +45041 jzfnmdw.jms +dir zstzfs +$ cd zstzfs +$ ls +dir qsfsj +$ cd qsfsj +$ ls +34771 rsv +$ cd .. +$ cd .. +$ cd .. +$ cd vws +$ ls +98036 pjs +103603 szszjfv +211083 ztd +$ cd .. +$ cd .. +$ cd fbfr +$ ls +dir dshrpf +216109 hbw.jhj +319355 hdhl +dir ltf +210950 qstlgvb +dir thhncv +316300 zfgh +$ cd dshrpf +$ ls +dir nll +dir qrsg +$ cd nll +$ ls +45935 flmvswv.rll +4161 hhcfpnmg.njm +82301 sww.dwj +dir tqdmtp +46608 tzrn.qrt +101463 zcbnwhzd.mpm +$ cd tqdmtp +$ ls +280430 dhzp +$ cd .. +$ cd .. +$ cd qrsg +$ ls +dir htrvnvz +$ cd htrvnvz +$ ls +dir mbtsvblj +$ cd mbtsvblj +$ ls +235270 dlz +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd ltf +$ ls +dir pcbc +dir wwjnwbjj +dir zcbnwhzd +$ cd pcbc +$ ls +140010 mbtsvblj.hqd +$ cd .. +$ cd wwjnwbjj +$ ls +dir mwl +$ cd mwl +$ ls +dir pddbdp +$ cd pddbdp +$ ls +27497 dlz +$ cd .. +$ cd .. +$ cd .. +$ cd zcbnwhzd +$ ls +302364 nrgpwm.cbb +$ cd .. +$ cd .. +$ cd thhncv +$ ls +299769 hdb +$ cd .. +$ cd .. +$ cd vwgrpswj +$ ls +dir jgt +dir mwl +293673 mwl.pwl +$ cd jgt +$ ls +282773 hhcfpnmg.njm +$ cd .. +$ cd mwl +$ ls +288944 jfnjdtr.ssj +186368 wfr +dir zrtvvf +$ cd zrtvvf +$ ls +82162 gtz.gsc +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd mwl +$ ls +98218 htc.qjr +dir mghhqrtn +dir qct +$ cd mghhqrtn +$ ls +220446 dlz +36230 pwwlwv.crn +$ cd .. +$ cd qct +$ ls +33534 hdb +27140 jpwqvbs.mvr +60637 mlqtp +12143 nlvtp.qjn +152733 nqjqzt +$ cd .. +$ cd .. +$ cd ppmtvcj +$ ls +dir ccjp +297245 zcbnwhzd +$ cd ccjp +$ ls +128473 wcw.dng +$ cd .. +$ cd .. +$ cd .. +$ cd zcrrtlh +$ ls +27488 bcbnmhq +dir dhsmmlt +dir fgqbpcn +$ cd dhsmmlt +$ ls +42514 cvfwqnfl +252570 dlz +145814 ppmtvcj.snb +294613 rslsh.slv +186477 vwd.spz +dir wffbp +$ cd wffbp +$ ls +dir mbtsvblj +dir nvq +150447 ppmtvcj.hzc +34904 whzpsbqp.clq +dir zcbnwhzd +$ cd mbtsvblj +$ ls +65132 cmmlw.bmq +310866 cqrtmpdp.pjq +dir mbtsvblj +212527 mbtsvblj.spw +232198 ngmltt.qwl +dir pbqh +dir ppwgsp +dir qqfsb +223322 tzsmvh +$ cd mbtsvblj +$ ls +dir bzpdz +dir mbtsvblj +dir pwnn +dir zcbnwhzd +$ cd bzpdz +$ ls +272769 gtmftv +280597 hhcfpnmg.njm +151008 nmgvrhr.mvp +$ cd .. +$ cd mbtsvblj +$ ls +64862 czn +309781 dhzp +253325 dlz +dir dqnr +dir fgd +139779 ghtzv +255567 rml.rhm +dir srfzjfw +$ cd dqnr +$ ls +302986 cjnwm.lrb +158871 frhjlp.rnn +180385 nrlmq +$ cd .. +$ cd fgd +$ ls +158213 msjrcl.dsh +$ cd .. +$ cd srfzjfw +$ ls +dir jfnd +210830 ljpzpdbf +dir mbtsvblj +dir zcrrvpg +$ cd jfnd +$ ls +300883 zvtdj.srv +$ cd .. +$ cd mbtsvblj +$ ls +287467 cjdm.whc +233084 hpfgtnts +dir zcbnwhzd +$ cd zcbnwhzd +$ ls +79744 dlz +$ cd .. +$ cd .. +$ cd zcrrvpg +$ ls +dir jrbcqlct +dir srpm +$ cd jrbcqlct +$ ls +325945 dlz +$ cd .. +$ cd srpm +$ ls +90698 ngw.fhm +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd pwnn +$ ls +104826 ppmtvcj.jtm +$ cd .. +$ cd zcbnwhzd +$ ls +145508 fnr.dgt +256683 gwdl.vfl +dir mdv +44255 mqdv.cdb +79723 rgvcf +dir sjdh +88945 wdgq.hfm +dir zpm +$ cd mdv +$ ls +231290 dlz +3468 hdb +95091 mcm +67779 mwl.ncb +dir ppf +dir rfwwtjdn +143730 slrv.qdl +dir sqbdvppf +$ cd ppf +$ ls +73809 rgdtlp +$ cd .. +$ cd rfwwtjdn +$ ls +255306 dhzp +306865 zbnmtcgr.ddf +237019 zcbnwhzd.szn +$ cd .. +$ cd sqbdvppf +$ ls +dir ccjp +dir mbtsvblj +142955 str +dir whtrbcqn +93407 zcbnwhzd.ctr +$ cd ccjp +$ ls +29914 cwtvtcnp.tft +295537 rvlb +$ cd .. +$ cd mbtsvblj +$ ls +262652 ccjp.wbn +297839 mbtsvblj.gnz +249019 pqsqjg.vwr +$ cd .. +$ cd whtrbcqn +$ ls +dir ccjp +dir hslmvvb +51040 vzcsfcwf +$ cd ccjp +$ ls +39489 slps +$ cd .. +$ cd hslmvvb +$ ls +148628 gpwnf.qtd +dir jrl +11814 qtjtsvgg.ltz +$ cd jrl +$ ls +dir scwlmjzm +$ cd scwlmjzm +$ ls +119717 vhpsrbzw.jnh +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd sjdh +$ ls +43495 srwzspsl +$ cd .. +$ cd zpm +$ ls +137218 mwl.pzt +$ cd .. +$ cd .. +$ cd .. +$ cd pbqh +$ ls +202610 dlz +dir vdrqc +$ cd vdrqc +$ ls +202958 mzzmjrt +$ cd .. +$ cd .. +$ cd ppwgsp +$ ls +248541 pzvtdl.lcc +$ cd .. +$ cd qqfsb +$ ls +211390 mbtsvblj.fvh +241455 mwl.bzl +$ cd .. +$ cd .. +$ cd nvq +$ ls +74730 hhcfpnmg.njm +257109 ljpzpdbf +8864 zcbnwhzd.ctj +$ cd .. +$ cd zcbnwhzd +$ ls +307501 ccjp +dir dfgbztqr +dir mwl +248526 pmhtz +dir rwmzdt +$ cd dfgbztqr +$ ls +18261 hdb +dir mwl +dir ppmtvcj +$ cd mwl +$ ls +36787 hdv.vfs +283104 zrvbsht.fmm +$ cd .. +$ cd ppmtvcj +$ ls +208809 ljpzpdbf +$ cd .. +$ cd .. +$ cd mwl +$ ls +195369 mgfvgw +146522 mwl +78589 sfthn +$ cd .. +$ cd rwmzdt +$ ls +10176 hdb +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd fgqbpcn +$ ls +169227 dhzp +dir dwsgcrz +140391 pjjln.ngc +162589 ppmtvcj.ngb +199626 rcgbjn.wfv +dir snrl +dir vfnrs +$ cd dwsgcrz +$ ls +300751 fjlw.wtp +$ cd .. +$ cd snrl +$ ls +16142 ccjp.jpw +150389 cmbnljt.ljq +52600 gqggd.dwm +$ cd .. +$ cd vfnrs +$ ls +217267 bwlpdfv.hzh +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd vmdlwdj +$ ls +29199 bcgjdpj.qcj +172894 jjgrcd.cvf +dir ngpnmbqz +296193 ppmtvcj.bfr +dir tfvhhpn +36476 wqzst.wcj +$ cd ngpnmbqz +$ ls +dir gnsm +dir ntsgrm +$ cd gnsm +$ ls +dir rjzngs +dir tvv +$ cd rjzngs +$ ls +dir dpfcw +dir spmhrb +$ cd dpfcw +$ ls +181566 mgdjjd.pqg +$ cd .. +$ cd spmhrb +$ ls +163198 hhcfpnmg.njm +$ cd .. +$ cd .. +$ cd tvv +$ ls +131443 hhcfpnmg.njm +$ cd .. +$ cd .. +$ cd ntsgrm +$ ls +246786 dlz +12841 pzbgrn +$ cd .. +$ cd .. +$ cd tfvhhpn +$ ls +196923 dhzp +$ cd .. +$ cd .. +$ cd .. +$ cd pzg +$ ls +262706 ppbqssj.hjj +$ cd .. +$ cd thfgwwsp +$ ls +dir dsvc +dir fbg +dir flgmdj +516 gwppndsl +dir mwl +dir qfhsr +dir tgj +dir wdmzc +272804 zcbnwhzd +dir zrfmzrl +$ cd dsvc +$ ls +22089 dlz +$ cd .. +$ cd fbg +$ ls +289639 hhcfpnmg.njm +$ cd .. +$ cd flgmdj +$ ls +293793 fqrpf +$ cd .. +$ cd mwl +$ ls +159673 dhzp +dir ftthgr +270973 hhcfpnmg.njm +dir jjrq +279365 ljpzpdbf +dir mglzfcq +101769 pnz +18964 rdl.wqf +$ cd ftthgr +$ ls +dir ccrvnht +170369 ljltl.slv +dir mwl +dir zqts +65217 zvnhmqpz.cqb +$ cd ccrvnht +$ ls +164437 hdb +$ cd .. +$ cd mwl +$ ls +dir cjsc +dir zcbnwhzd +dir zwzb +$ cd cjsc +$ ls +91883 hhcfpnmg.njm +203008 nfmvr +$ cd .. +$ cd zcbnwhzd +$ ls +dir mbtsvblj +$ cd mbtsvblj +$ ls +187513 ljpzpdbf +$ cd .. +$ cd .. +$ cd zwzb +$ ls +138631 ljpzpdbf +dir sjngjp +$ cd sjngjp +$ ls +52116 ccjp.ttc +157900 fptzbpp.sdm +89462 hhcfpnmg.njm +$ cd .. +$ cd .. +$ cd .. +$ cd zqts +$ ls +162402 hdb +$ cd .. +$ cd .. +$ cd jjrq +$ ls +dir bffvw +dir czbwf +13447 dlz +dir gjh +dir hjs +$ cd bffvw +$ ls +139679 dqqtq.lnb +dir mwl +13310 sjln.zgv +243329 srmghrt.ffl +72108 ssm.tph +$ cd mwl +$ ls +dir fdlmfjt +dir jms +122108 nqwrj +$ cd fdlmfjt +$ ls +75969 hdtbcsfc.vmz +$ cd .. +$ cd jms +$ ls +297556 hhcfpnmg.njm +$ cd .. +$ cd .. +$ cd .. +$ cd czbwf +$ ls +320541 ccjp +$ cd .. +$ cd gjh +$ ls +164281 dhzp +286094 vjs +$ cd .. +$ cd hjs +$ ls +dir cbdzvd +41353 ccjp +dir gbs +114686 hdb +dir hmtpm +278709 ljpzpdbf +dir ppmtvcj +292308 zcmlbbbc.mpp +86096 zttwct +$ cd cbdzvd +$ ls +153733 dhzp +$ cd .. +$ cd gbs +$ ls +dir nfnb +$ cd nfnb +$ ls +dir hgm +$ cd hgm +$ ls +233469 ljpzpdbf +$ cd .. +$ cd .. +$ cd .. +$ cd hmtpm +$ ls +14247 mwl +$ cd .. +$ cd ppmtvcj +$ ls +dir jcwhvcf +241390 mwl +$ cd jcwhvcf +$ ls +198254 wddq.rgp +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd mglzfcq +$ ls +dir bsplglmj +21700 fhflt.vgq +56724 lpmcbzrj +222733 qnbr +256952 thvbqb.gtv +$ cd bsplglmj +$ ls +dir zcbnwhzd +$ cd zcbnwhzd +$ ls +dir mqzqz +$ cd mqzqz +$ ls +75000 ppmtvcj +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd qfhsr +$ ls +249770 gfv.cnw +70204 qlvwhff.jhm +$ cd .. +$ cd tgj +$ ls +243926 mwl.bfv +$ cd .. +$ cd wdmzc +$ ls +19843 hdb +264263 jbqf.str +261303 qrvt.lbr +$ cd .. +$ cd zrfmzrl +$ ls +52067 lnfgp.nhl \ No newline at end of file diff --git a/2022/go/day08/day08.go b/2022/go/day08/day08.go new file mode 100644 index 0000000..2201c97 --- /dev/null +++ b/2022/go/day08/day08.go @@ -0,0 +1,89 @@ +package day08 + +import ( + _ "fmt" + + "adventofcode2022/utils" + "adventofcode2022/utils/inputs" + "adventofcode2022/utils/grid2d" +) + +func Part1(input string) int { + grid := inputs.ToGrid2D(input, "\n", "", -1, utils.MustAtoi) + visible := grid2d.NewGrid(grid.SizeX(), grid.SizeY(), false) + + for j := 0; j < grid.SizeY(); j++ { + for i := 0; i < grid.SizeX(); i++ { + directions := [][]int{{0, 1}, {0, -1}, {1, 0}, {-1, 0}} + for _, dir := range directions { + v := true + x := i + y := j + for { + x += dir[0] + y += dir[1] + if x < 0 || x >= grid.SizeX() || y < 0 || y >= grid.SizeY() { + break + } + if grid.Get(i, j) <= grid.Get(x, y) { + v = false + break + } + } + if v { + visible.Set(i, j, true) + break + } + } + } + } + + sum := 0 + for j := 0; j < visible.SizeY(); j++ { + for i := 0; i < visible.SizeX(); i++ { + if visible.Get(i, j) { + sum++ + } + } + } + return sum +} + +func Part2(input string) int { + grid := inputs.ToGrid2D(input, "\n", "", -1, utils.MustAtoi) + scenicScore := grid2d.NewGrid(grid.SizeX(), grid.SizeY(), 1) + + for j := 0; j < grid.SizeY(); j++ { + for i := 0; i < grid.SizeX(); i++ { + directions := [][]int{{0, 1}, {0, -1}, {1, 0}, {-1, 0}} + for _, dir := range directions { + score := 0 + x := i + y := j + for { + x += dir[0] + y += dir[1] + if x < 0 || x >= grid.SizeX() || y < 0 || y >= grid.SizeY() { + break + } + if grid.Get(i, j) <= grid.Get(x, y) { + score++ + break + } + score++ + } + scenicScore.Set(i, j, scenicScore.Get(i,j) * score) + } + } + } + + max := 0 + for j := 0; j < scenicScore.SizeY(); j++ { + for i := 0; i < scenicScore.SizeX(); i++ { + if scenicScore.Get(i, j) > max { + max = scenicScore.Get(i, j) + } + } + } + return max +} diff --git a/2022/go/day08/day08_test.go b/2022/go/day08/day08_test.go new file mode 100644 index 0000000..fe7ce2d --- /dev/null +++ b/2022/go/day08/day08_test.go @@ -0,0 +1,27 @@ +package day08 + +import ( + "testing" + + "github.com/stretchr/testify/require" +) + +func TestPart1(t *testing.T) { + r := Part1( +`30373 +25512 +65332 +33549 +35390`) + require.Equal(t, 21, r) +} + +func TestPart2(t *testing.T) { + r := Part2( +`30373 +25512 +65332 +33549 +35390`) + require.Equal(t, 8, r) +} diff --git a/2022/go/day08/input.txt b/2022/go/day08/input.txt new file mode 100644 index 0000000..7b14148 --- /dev/null +++ b/2022/go/day08/input.txt @@ -0,0 +1,99 @@ +020111211022103023211142403044034010412103202221251542233334311102303044440313120021223120332211221 +121001110111201102213124201444431204213221413222211111444444412110041144131210002230130121313101010 +112010221202200121420032021412024323255214355122345552225213252324112400440302313420323102103100221 +211022232121222123201224234031435144114512425232345144523531533222344004011342234110131312300332202 +202103101023303021233104321411251553151424242531344221312225231225524421412434024103021300123300121 +202122200002211022342141123051132352344252152315525324551424132421225143201002114204223302333232221 +011310312223223421431113235421121321152124551441143435255214322514544552225412313011414423301132102 +121331322013001133311000223433443341113554412556562564315233144532455221433431002003332002203013201 +003201332004241133340023541532333131413153266664363423353232622124454254554345422200200433100333102 +230030131344203011040552414515334144165664524445366334422626244444323115333252423443232113432003211 +020300112334333142144323414353551436334563654426436625356343222253643212532215422020214344013310331 +220002231221003314452445344223355655546325233543653632544634656464243551334233433413423044300230210 +111022100242320043435324555421362243363346366346456252353246655455262455415331454531201000441410231 +101232013434204241242451442362524554225656254252456532663634445256345634451144555513214431300213021 +021113211441142541244515256653533353262654644343347336234522332254544443346322422154143020040021110 +002032342223245141521455555365463263562446777664546776637635443223664266645633333231151132112140113 +002033421301452414544444345232465536465366346553375665564756366435442422632435555111445311104203133 +332303032232445231354236322622423634433537753546335477544636344436526324435436522445155410213401230 +214021124335354212514535634245552337436663757533364556376776733565333462254562365531354214423412431 +231123230423124441525624265443647673566756453545563655373357453547537663433453433212213223101140424 +100211320333154123522263362425466444634667564437776546465446345667366445453365366551352122420231230 +024400401554531424535342424657437377754456437376767656436366374765557746355562226364213315421212320 +214442223135544515264335435467756354735433346664764464468465443746334373746425422542525455354340110 +141333001441254326655252563743544735555378755475567457777687677357576573543344653346551442221242312 +022033123224325536562464253467675635635678458757477754757874576653435356676234462564555551451230022 +444402313413432333426636637636453646648557685556587678886878777785454364533433543362622525453201222 +031024134513414333456224636475357556855564445765756678575486648885765563445546566235352311454320030 +341331341415512452344636337436467675565575756658588888477584775646657736366434365523664142235144413 +333344214132152543325563654447567486457556845676545687457688885466457333476777342344625323533242333 +203124152315365546566375565336778768544768846599686578655665448478657834657533335544343231212251101 +200144235323636235437557635373578555545475587655886585897998654658858755534374677344254563233421200 +433243323452635426237436445738684446475489658878699879887988684656474746764334543334452565153341241 +340411231113223465344733555465744685569658998876796578688888887678657675875533766464362432543531231 +132155112416452662274535754677457567869597559977756878779755568868854644586734466764422245333151550 +321153454153653654743477667888756477986578656976558879999589975695487876766664653466625262642234421 +414524133155254243564664555445778475666688565697596679558768656758547564888437343772346336642515514 +321251321324554554436434474754674597576658986766997798688766897876884764444653674674326233445555243 +031553412663524646375654566887688857698655696699699989968699659665774657875735457664452362352111522 +121541141642244257534355645887786995858959886778688769889987779898696567777567344373632655621545545 +334343242432423553675774445756455759676757789677879778999988695976997447856786357655446656351514552 +125145532643224566754564678556569669557567799868776897666898866898879866784847777744353546366314141 +045114213352452647446647465888875868689699789677897977779999699895556776458746737674746244442322442 +132343555663565436365447746478789879798676878686777999789966769777759954677478745673552645533545344 +045253354653642556466557766588567888887978866878777776986676768968695857655674556463732652626443441 +324411423536354677366485874488885578788769789998797978797888777868996895476778847746764226464355343 +355421453642352476436787475855785669696986976979989787787998669696679989555875747556435562425323311 +225422326356526465747344444546866698678986799879779799999876866969999686664477767757535635652555421 +215234242322226376376776764668889755898766677787987779877967696689565966757675463574434246652622343 +214252444222333767567367778585695867987669688798987987789888698888858597545545475573737453632634414 +435144324646623745547785547465689576878976877888878988989877866686976879488454664357347554642541254 +424224446333664566656688545685586987987699788897978888788999878967887869445474863534753362524653532 +234521532264544735666677658457578679997886798878788998987976677895559685784445835563745433436535545 +541253562333326733576345574569866788667878789897999998887996866685657897848485475437744246636412312 +531515163362265375476387485646556857878999799999999989879989886696789765664474863474462523344554532 +134323536435565375644658845476675857999867789999988888799986676978987577885467643356656525623333421 +432434326635433776557758756889896978587689688777989999797796888999765958586488873373565325435254453 +352344243543664654777655867556767767686778796989888798998697976755779565488844544677343523234525134 +023522455223435563774634466685769765877876776996699877886876668865856964846675357575675235445525211 +452211123455454466574537744568597875596879779869788776669767986968956557448486336534544244456115451 +154255352645344566574476875484685575595898898697799799688669879869766768688476473673634645556554324 +153224532366353377543578485765465665577767776999977978876879865565957587758448456773452265664315213 +212223354662352476456344644856876756566976677698968768897897866997679566845464663374352444344522513 +333134124655526377555445475778655559695856687767878889687866969787796886748547665457422543622531314 +114114243655626456537464558857564557866777897897898988696885586978887448448543375665233363532515252 +022123225426235336675765546686448888566865666569876966556979869667956845877753374733454555422452344 +105112231544246463366336777688875488697685796985999888976956985978664485756743456372244565641412542 +243421525526425322655767646868764584599579555769857975877669799998745668566534743565233224245452434 +310412235133463356343754335447454467578555798898788997569756589585876868467475435524433556255213522 +122253434533466554567356664688567676567976599967878669868967997845484546736534545734455626245154423 +313334534424352263526466637778587787868565658999559897596678677574858776343543534432632333531241224 +001031252124265545567437743765668445564487997555965858678954577555545545743366457636433553523254344 +044305452425444342246365565576568644874888888677955886697487686854588744354437555336664241413533111 +110113123534526242542645447354547688467557884774478677887477777586654656653436654455626314334324023 +403311355254242426345425533745657486754657454674877454647844866774463676664344325662334351444144012 +114043453225323265365363357353773386544675474785655464585675566555543364665665355442555535443420344 +234021355512324262426566274773756436677647664566764646854655875476556464746532226425352124354233001 +104234323224222234534254555373773666356744475886877868685764755374634533664662562645321154355101301 +413312132345313224565423553463467666456365585778746647466885776356666677636556254365513311121044324 +010140223145323354554344523347476477547564757555585887484666633663433654743326266555221322431333120 +023311233225342421354662654347733666374666336373663635367447753577353743232632663243333251551031321 +143043334422453221246324462653756444767736544367544755375437335646557334655533644454121143303220002 +101212344011254432246625336226267546745356655577456676377355677475746633565634244145133154032123242 +233244204414154431434433222525444454344635736634774576466473546373725623264634363324244114303014300 +010103422332213512154554324533443662535535356636747655647737636354525554536436123454141421414030443 +203123300244432323224135253642444433566335637575443374634433336553444225543564152215332533001133230 +213003230312403552352142145445635666323653353353657647435752235322633623453542112525124011312421020 +120004434213011143254452233425222536464236356544634635324242345464353322232141135221424123200431123 +331000214011314431233211121223425334456246345226324246526344536556636556453143153253323114441131132 +303123142412333143322451153243464566344362342525524265432552566442626262524431454151443133021301210 +220100102032004440315125323552226234566265233246334556355333643662354455122325544112124232340231031 +112122312031202424345533512342151435534325334444254264542526645645533111234131131223411304322200110 +213031212133401330114433121533455425225634422363334633454623522242353342455454511303033230433202120 +223232022333401311421344332255311133421254642562465526534445512134533413153142410113101444330132130 +020133013100324344342244215442123125243314222446342424421353134352515124333133430431401122202211032 +102300310001014311443112031115242425132234255215315523551534154524134344433432201022200432133000302 +001233311232134334100401400151532231322435145412132433235254313414243334103312232304403111313321210 +110213022233310011220103432114343112114222424442543155552411511144115122143322304023012132213011210 +000220123220323122321103444304134551331233141552114422121151224211122042434324042030120133230110110 +020120232301110331441234422110132302233413123211331413433254521355004032312110222131010330301222211 \ No newline at end of file diff --git a/2022/go/day09/day09.go b/2022/go/day09/day09.go new file mode 100644 index 0000000..f67da1b --- /dev/null +++ b/2022/go/day09/day09.go @@ -0,0 +1,119 @@ +package day09 + +import ( + "strings" + + "adventofcode2022/utils" + sparsegrid "adventofcode2022/utils/sparseGrid" +) + +type rope struct { + size int + posX []int + posY []int +} + +func Part1(input string) int { + rope := newRope(2) + grid := sparsegrid.NewGrid(false) + grid.Set(rope.posX[rope.size-1], rope.posY[rope.size-1], true) + for _, line := range strings.Split(input, "\n") { + dx := 0 + dy := 0 + switch line[0] { + case 'R': + dx = 1 + case 'U': + dy = -1 + case 'D': + dy = 1 + case 'L': + dx = -1 + } + n := utils.MustAtoi(line[2:]) + for i := 0; i < n; i++ { + // move head + rope.posX[0] += dx + rope.posY[0] += dy + + // update tail + rope.updateTail() + grid.Set(rope.posX[rope.size-1], rope.posY[rope.size-1], true) + } + } + return grid.Visited() +} + +func Part2(input string) int { + rope := newRope(10) + grid := sparsegrid.NewGrid(false) + grid.Set(rope.posX[rope.size-1], rope.posY[rope.size-1], true) + for _, line := range strings.Split(input, "\n") { + dx := 0 + dy := 0 + switch line[0] { + case 'R': + dx = 1 + case 'U': + dy = -1 + case 'D': + dy = 1 + case 'L': + dx = -1 + } + n := utils.MustAtoi(line[2:]) + for i := 0; i < n; i++ { + // move head + rope.posX[0] += dx + rope.posY[0] += dy + + // update tail + rope.updateTail() + grid.Set(rope.posX[rope.size-1], rope.posY[rope.size-1], true) + } + } + return grid.Visited() +} + +func newRope(size int) *rope { + return &rope{ + size: size, + posX: make([]int, size), + posY: make([]int, size), + } +} + +func (r *rope) updateTail() { +outer: + for i := 1; i < r.size; i++ { + diffX := utils.Abs(r.posX[i-1] - r.posX[i]) + diffY := utils.Abs(r.posY[i-1] - r.posY[i]) + if diffX <= 1 && diffY <= 1 { + // no need to update node if it's touching + continue + } + moves := [][]int{{1, 0}, {-1, 0}, {0, 1}, {0, -1}} + for _, move := range moves { + t := utils.Max( + utils.Abs(r.posX[i-1]-r.posX[i]+move[0]), + utils.Abs(r.posY[i-1]-r.posY[i]+move[1])) + if t == 1 { + r.posX[i] = r.posX[i-1] + move[0] + r.posY[i] = r.posY[i-1] + move[1] + continue outer + } + } + moves = [][]int{{1, 1}, {-1, 1}, {1, -1}, {-1, -1}} + for _, move := range moves { + t := utils.Max( + utils.Abs(r.posX[i-1]-r.posX[i]+move[0]), + utils.Abs(r.posY[i-1]-r.posY[i]+move[1])) + if t == 1 { + r.posX[i] = r.posX[i-1] + move[0] + r.posY[i] = r.posY[i-1] + move[1] + continue outer + } + } + panic("unreachable") + } +} \ No newline at end of file diff --git a/2022/go/day09/day09_test.go b/2022/go/day09/day09_test.go new file mode 100644 index 0000000..0bcc27b --- /dev/null +++ b/2022/go/day09/day09_test.go @@ -0,0 +1,25 @@ +package day09 + +import ( + "testing" + + "github.com/stretchr/testify/require" +) + +func TestPart1(t *testing.T) { + r := Part1( +`R 4 +U 4 +L 3 +D 1 +R 4 +D 1 +L 5 +R 2`) + require.Equal(t, 13, r) +} + +func TestPart2(t *testing.T) { + r := Part2("") + require.Equal(t, 0, r) +} diff --git a/2022/go/day09/input.txt b/2022/go/day09/input.txt new file mode 100644 index 0000000..df43863 --- /dev/null +++ b/2022/go/day09/input.txt @@ -0,0 +1,2000 @@ +R 1 +U 1 +D 1 +U 1 +R 2 +D 2 +R 2 +D 2 +R 1 +U 1 +L 1 +U 2 +D 2 +R 1 +D 1 +R 2 +U 2 +R 2 +L 2 +D 2 +L 2 +U 2 +D 2 +L 2 +R 2 +D 1 +U 2 +D 2 +U 1 +L 2 +D 2 +R 1 +U 2 +D 2 +L 1 +D 2 +L 2 +R 2 +U 2 +D 2 +U 1 +R 1 +U 1 +D 1 +R 2 +L 2 +D 1 +U 1 +R 1 +L 1 +U 1 +D 1 +L 1 +U 1 +D 1 +U 2 +D 2 +U 1 +D 1 +U 1 +L 1 +R 2 +L 1 +D 1 +U 1 +R 1 +L 2 +U 2 +L 2 +U 2 +D 1 +R 2 +D 2 +L 2 +R 1 +U 2 +R 1 +D 2 +L 1 +D 1 +L 1 +D 2 +R 1 +U 1 +L 1 +U 2 +D 2 +L 1 +U 2 +D 2 +R 1 +U 1 +R 1 +L 2 +D 1 +L 2 +U 2 +L 2 +D 2 +L 2 +D 2 +U 1 +L 1 +U 2 +R 1 +D 1 +R 1 +D 1 +R 1 +D 2 +U 1 +R 1 +U 1 +R 1 +D 1 +U 3 +L 2 +R 2 +L 3 +R 1 +L 1 +U 2 +L 1 +U 3 +D 3 +L 3 +D 2 +L 3 +U 1 +L 1 +R 2 +D 3 +L 1 +R 1 +U 2 +L 2 +D 3 +U 2 +D 3 +R 3 +U 1 +D 3 +L 3 +R 2 +U 3 +D 1 +U 1 +R 1 +L 2 +R 1 +L 2 +D 3 +L 1 +D 3 +R 2 +U 1 +D 1 +R 3 +D 1 +L 1 +U 2 +D 1 +L 3 +U 3 +R 1 +D 1 +U 3 +D 2 +L 3 +R 2 +L 1 +D 2 +U 1 +R 2 +L 1 +U 2 +R 2 +L 2 +U 2 +L 2 +U 2 +R 1 +U 2 +D 3 +U 1 +D 1 +L 2 +U 1 +L 2 +R 3 +L 2 +R 3 +L 1 +R 2 +L 2 +R 1 +D 3 +L 3 +D 2 +R 1 +D 1 +U 1 +D 2 +R 3 +U 3 +D 3 +R 3 +L 1 +U 1 +R 3 +U 2 +L 1 +R 1 +L 3 +D 3 +R 2 +U 1 +L 2 +D 2 +R 1 +U 3 +D 2 +R 1 +L 4 +D 3 +R 3 +L 1 +D 1 +R 3 +U 3 +L 2 +D 4 +U 3 +D 2 +L 4 +D 2 +R 1 +D 3 +R 3 +D 1 +U 4 +R 1 +U 4 +D 2 +U 4 +L 1 +R 1 +L 2 +R 1 +D 1 +L 4 +U 1 +R 4 +D 3 +R 1 +U 3 +R 3 +U 2 +L 3 +U 2 +L 2 +R 4 +U 2 +D 3 +R 4 +D 1 +U 4 +D 3 +R 2 +D 3 +R 1 +D 1 +U 1 +R 3 +L 1 +U 3 +L 1 +D 3 +L 3 +D 3 +R 3 +D 3 +U 1 +R 4 +D 2 +R 2 +U 1 +R 1 +D 1 +L 4 +D 2 +L 1 +U 4 +D 1 +L 2 +U 4 +D 3 +U 3 +L 2 +R 2 +D 1 +L 4 +D 2 +R 3 +D 4 +R 4 +U 1 +D 1 +L 2 +R 1 +D 4 +R 2 +L 1 +D 4 +L 3 +R 3 +U 4 +R 3 +D 3 +L 2 +R 1 +D 3 +L 2 +R 3 +D 1 +L 2 +U 3 +R 4 +D 4 +U 3 +R 2 +D 3 +R 3 +D 1 +R 4 +U 3 +R 5 +U 1 +D 2 +R 5 +U 1 +R 3 +L 1 +U 1 +L 1 +D 1 +R 5 +U 2 +D 3 +R 4 +L 5 +R 2 +D 1 +L 2 +U 2 +D 3 +R 5 +D 2 +R 5 +D 5 +U 5 +D 1 +L 5 +U 3 +D 2 +R 1 +D 5 +R 2 +D 2 +R 5 +U 3 +L 2 +U 1 +L 4 +R 5 +L 3 +R 2 +U 2 +D 3 +L 1 +U 3 +L 4 +R 5 +L 1 +U 4 +L 1 +D 5 +R 3 +U 5 +R 3 +L 2 +U 4 +D 2 +U 4 +L 1 +U 1 +L 1 +R 4 +D 4 +U 4 +R 5 +D 2 +U 2 +L 3 +U 4 +D 3 +L 2 +R 4 +U 1 +L 3 +R 3 +D 1 +L 2 +R 5 +U 2 +L 2 +R 2 +L 4 +D 4 +L 2 +U 4 +R 2 +L 3 +U 4 +L 5 +D 5 +L 5 +U 3 +L 5 +R 2 +D 4 +L 5 +U 3 +D 2 +L 2 +D 2 +U 2 +D 4 +R 5 +U 5 +L 3 +R 5 +D 3 +L 1 +D 1 +L 1 +D 5 +R 2 +L 1 +U 2 +L 3 +U 2 +R 2 +L 5 +R 3 +U 2 +R 1 +L 4 +D 4 +U 3 +R 2 +L 2 +D 3 +L 2 +R 4 +L 1 +U 6 +R 2 +D 5 +L 4 +U 3 +R 6 +D 6 +L 4 +D 3 +R 2 +D 2 +L 2 +R 2 +D 4 +L 6 +D 3 +L 5 +R 4 +L 5 +U 3 +L 6 +U 5 +L 3 +R 2 +U 3 +L 1 +D 1 +L 3 +U 4 +L 5 +D 3 +L 2 +U 5 +D 4 +L 3 +R 1 +U 3 +D 4 +U 3 +D 3 +U 6 +D 4 +R 3 +U 6 +R 1 +U 3 +R 3 +U 3 +R 5 +U 6 +L 1 +R 2 +D 5 +U 3 +D 4 +U 4 +D 4 +L 1 +U 4 +D 3 +L 1 +U 5 +R 3 +U 3 +R 1 +U 1 +L 3 +R 3 +U 4 +R 1 +L 3 +U 2 +L 2 +D 2 +L 4 +U 4 +L 3 +U 4 +R 2 +U 1 +D 2 +U 2 +D 5 +L 5 +R 1 +D 3 +L 4 +R 3 +D 6 +U 7 +D 5 +L 7 +D 5 +U 3 +D 1 +L 2 +R 2 +D 7 +U 7 +D 3 +L 2 +U 1 +L 6 +D 5 +R 4 +U 3 +R 5 +U 6 +L 6 +U 6 +L 1 +R 5 +U 7 +R 5 +U 5 +R 4 +U 5 +D 6 +R 4 +D 7 +L 7 +U 5 +R 2 +U 7 +R 3 +D 5 +R 5 +D 4 +U 1 +L 6 +R 4 +D 6 +L 6 +R 2 +U 7 +L 3 +D 5 +L 4 +R 3 +L 1 +U 3 +D 3 +R 5 +U 1 +L 6 +U 7 +R 7 +D 4 +L 4 +U 6 +R 7 +U 4 +R 1 +L 1 +R 4 +U 7 +D 1 +U 5 +D 3 +R 7 +L 1 +D 4 +U 6 +D 2 +L 3 +U 1 +D 6 +L 1 +D 5 +R 3 +U 3 +L 6 +D 5 +R 4 +U 5 +L 4 +R 4 +U 7 +R 1 +L 7 +U 2 +R 4 +L 1 +D 5 +U 4 +L 6 +D 2 +R 3 +L 2 +D 5 +R 5 +U 7 +R 4 +D 7 +U 6 +R 6 +L 6 +R 6 +U 1 +D 1 +R 3 +D 2 +U 3 +R 3 +D 8 +U 1 +R 5 +L 8 +D 8 +L 7 +D 3 +U 6 +R 6 +U 8 +D 3 +U 2 +R 2 +D 7 +U 8 +D 5 +L 2 +R 8 +U 3 +L 2 +R 5 +U 3 +R 6 +L 8 +U 8 +R 8 +L 2 +U 1 +D 1 +U 4 +L 1 +U 2 +L 4 +D 2 +U 4 +D 3 +L 8 +D 3 +R 3 +L 2 +D 7 +L 5 +R 5 +L 3 +R 4 +L 7 +D 6 +U 3 +L 3 +D 4 +R 4 +L 3 +D 5 +U 2 +R 4 +U 6 +L 7 +D 2 +R 6 +L 3 +D 8 +L 8 +R 2 +U 7 +D 7 +U 3 +R 7 +U 8 +L 5 +D 6 +R 6 +U 8 +R 1 +U 3 +R 5 +L 4 +D 7 +U 6 +R 8 +L 2 +R 6 +U 1 +L 4 +D 1 +L 2 +U 4 +R 2 +U 4 +R 5 +L 3 +R 1 +L 4 +R 7 +D 7 +R 1 +U 5 +L 6 +D 4 +R 4 +D 5 +U 8 +L 3 +D 8 +L 6 +U 5 +D 1 +R 7 +L 2 +D 1 +R 7 +L 5 +D 8 +U 6 +D 1 +L 8 +U 8 +L 1 +R 1 +U 2 +D 9 +L 5 +D 9 +L 4 +U 8 +D 3 +R 6 +L 1 +R 8 +D 7 +L 6 +U 7 +R 6 +U 2 +L 3 +D 6 +L 5 +U 3 +R 1 +U 6 +D 1 +U 2 +L 9 +R 2 +L 2 +R 9 +D 1 +R 2 +U 7 +D 7 +U 5 +R 4 +U 9 +L 5 +U 9 +D 5 +L 1 +R 3 +L 1 +U 1 +D 7 +L 8 +D 2 +L 7 +D 1 +L 6 +R 2 +D 1 +U 9 +D 4 +U 8 +L 8 +U 1 +L 8 +D 6 +U 1 +R 2 +U 3 +R 4 +D 4 +U 4 +L 9 +D 5 +L 2 +U 6 +D 8 +U 6 +R 1 +L 6 +D 5 +R 3 +L 4 +R 6 +L 5 +R 4 +L 6 +D 5 +R 8 +D 6 +L 1 +U 8 +R 8 +U 8 +R 3 +U 2 +D 9 +L 9 +U 3 +D 5 +L 2 +D 2 +R 3 +L 2 +D 8 +R 6 +D 9 +R 5 +L 9 +R 2 +L 9 +U 5 +R 9 +D 3 +R 1 +U 1 +L 6 +R 7 +D 7 +U 3 +R 2 +L 5 +D 2 +L 8 +U 8 +R 9 +U 5 +R 1 +U 9 +D 8 +R 10 +U 9 +D 5 +R 4 +D 8 +U 4 +L 7 +U 10 +L 8 +R 10 +L 9 +D 9 +L 4 +R 7 +U 4 +D 3 +U 10 +R 6 +D 9 +L 5 +R 3 +D 7 +R 9 +D 4 +L 9 +D 3 +R 7 +U 6 +L 6 +R 6 +L 7 +D 8 +L 7 +U 5 +D 8 +L 8 +U 9 +L 5 +D 9 +U 9 +R 3 +D 1 +U 9 +L 9 +U 6 +R 4 +U 6 +D 10 +U 4 +R 9 +D 9 +R 2 +D 10 +L 9 +U 8 +L 2 +D 7 +L 10 +R 2 +L 9 +R 9 +L 10 +U 6 +D 7 +R 1 +D 9 +R 5 +L 7 +D 4 +U 7 +L 3 +D 3 +R 4 +L 8 +U 1 +L 1 +D 10 +U 2 +D 9 +L 2 +D 8 +U 2 +D 3 +R 6 +U 3 +R 5 +U 4 +L 6 +R 10 +L 1 +D 2 +L 3 +U 11 +R 5 +U 11 +D 11 +U 10 +D 2 +L 10 +U 8 +R 4 +D 11 +U 11 +R 11 +U 5 +D 3 +R 7 +D 9 +U 9 +R 5 +U 8 +D 7 +U 9 +D 2 +U 11 +L 7 +D 1 +R 9 +D 2 +R 5 +U 4 +R 11 +D 1 +L 2 +R 1 +U 5 +D 4 +L 10 +R 11 +U 6 +L 3 +U 11 +R 1 +D 1 +L 2 +U 5 +R 6 +U 9 +R 11 +D 9 +L 11 +U 6 +R 5 +L 7 +D 6 +U 9 +D 5 +U 6 +R 10 +D 11 +R 4 +U 7 +L 5 +U 7 +L 2 +R 6 +L 10 +D 3 +R 6 +L 9 +D 8 +L 1 +R 1 +L 1 +R 3 +D 8 +L 10 +D 2 +U 1 +D 1 +L 3 +R 10 +L 3 +U 1 +D 2 +U 2 +D 3 +U 1 +R 8 +U 8 +D 10 +U 6 +L 5 +U 6 +D 4 +R 9 +D 9 +R 9 +D 11 +L 3 +D 7 +R 9 +L 7 +U 7 +D 7 +R 4 +L 3 +R 5 +U 3 +L 9 +D 10 +L 1 +R 9 +L 6 +D 5 +L 6 +D 4 +U 7 +L 8 +R 7 +L 5 +U 9 +R 1 +L 1 +D 12 +R 5 +U 1 +L 8 +D 11 +U 5 +D 5 +R 4 +D 10 +R 2 +U 6 +D 2 +L 12 +D 1 +R 10 +U 4 +D 8 +L 7 +D 9 +R 7 +D 1 +R 10 +D 5 +U 7 +D 12 +R 9 +U 2 +D 3 +U 5 +D 2 +U 6 +D 3 +U 7 +D 4 +R 11 +D 2 +L 3 +R 9 +L 2 +R 12 +L 3 +D 5 +U 7 +D 6 +R 9 +D 12 +R 11 +D 5 +U 5 +D 2 +R 1 +U 6 +R 6 +D 5 +L 9 +U 10 +D 4 +U 1 +R 3 +D 10 +U 1 +R 9 +D 8 +L 1 +D 12 +U 11 +D 12 +L 2 +R 9 +U 12 +D 6 +L 1 +R 4 +L 8 +D 8 +L 6 +R 10 +L 8 +D 4 +U 11 +L 1 +R 5 +L 6 +R 10 +D 12 +R 3 +L 9 +D 10 +U 6 +D 9 +R 7 +U 9 +R 10 +U 10 +L 10 +U 1 +L 3 +D 7 +L 12 +U 4 +R 3 +U 1 +L 8 +R 5 +U 4 +L 4 +D 5 +R 4 +D 11 +L 9 +D 5 +L 7 +U 6 +R 8 +U 7 +D 3 +U 1 +L 6 +U 8 +D 2 +R 7 +D 2 +U 1 +L 9 +U 8 +L 10 +U 4 +D 12 +L 12 +D 5 +R 3 +U 1 +D 1 +R 11 +L 10 +R 11 +L 6 +R 3 +L 13 +R 6 +L 4 +R 10 +D 9 +R 13 +U 8 +L 7 +R 7 +L 10 +R 9 +U 4 +L 1 +D 1 +L 12 +D 6 +L 3 +R 4 +U 6 +L 12 +D 2 +U 5 +R 11 +L 2 +U 8 +R 10 +D 2 +U 6 +L 4 +D 2 +U 9 +L 7 +D 5 +L 6 +U 9 +R 6 +L 9 +R 1 +U 3 +L 6 +R 6 +U 8 +D 1 +R 5 +U 12 +D 9 +U 10 +D 13 +L 10 +R 4 +L 13 +R 9 +L 9 +D 6 +U 8 +D 6 +U 8 +D 10 +R 3 +L 11 +R 8 +D 4 +R 2 +U 10 +D 9 +U 8 +R 5 +D 10 +L 11 +R 7 +D 9 +U 7 +L 6 +U 3 +L 5 +U 6 +D 1 +U 3 +R 8 +L 5 +U 3 +R 13 +L 8 +D 1 +U 8 +L 6 +D 11 +U 4 +D 1 +R 9 +D 11 +R 1 +D 2 +R 10 +U 2 +D 12 +U 6 +R 13 +U 6 +D 4 +R 11 +U 6 +R 9 +U 10 +D 3 +R 2 +L 13 +U 14 +D 14 +R 6 +D 9 +U 5 +D 2 +L 5 +R 10 +L 3 +R 8 +D 9 +U 10 +R 11 +U 8 +L 8 +R 12 +D 13 +U 7 +R 14 +D 9 +L 12 +R 13 +L 10 +D 11 +L 7 +U 6 +D 14 +L 14 +D 13 +U 11 +R 11 +U 9 +L 8 +D 2 +L 9 +R 12 +U 5 +D 9 +U 10 +R 1 +L 2 +D 8 +L 8 +R 4 +U 2 +L 13 +R 9 +L 12 +D 7 +L 14 +D 13 +R 12 +D 10 +L 5 +U 12 +R 6 +L 3 +U 14 +R 8 +U 10 +R 5 +U 3 +D 1 +R 6 +U 9 +R 4 +L 9 +U 7 +R 6 +U 8 +R 10 +U 9 +R 9 +U 12 +L 14 +R 2 +U 11 +L 12 +D 5 +R 15 +L 10 +U 8 +R 6 +U 8 +R 6 +D 2 +U 9 +L 15 +D 13 +L 14 +U 1 +D 9 +U 6 +R 8 +L 6 +D 3 +L 13 +R 7 +U 1 +L 8 +U 7 +D 8 +R 1 +D 6 +L 8 +R 14 +D 14 +U 9 +L 14 +R 15 +U 11 +L 14 +D 14 +L 1 +U 5 +L 3 +R 4 +L 13 +R 5 +D 14 +R 4 +U 7 +D 9 +R 4 +U 6 +D 11 +R 12 +D 13 +U 15 +D 10 +R 1 +D 1 +U 10 +L 14 +R 13 +U 6 +D 10 +U 15 +D 3 +U 8 +D 2 +U 15 +R 6 +U 12 +L 9 +R 2 +D 6 +R 15 +D 13 +R 2 +D 5 +R 8 +U 3 +R 10 +D 6 +L 7 +D 6 +R 11 +U 13 +D 1 +L 7 +U 7 +L 4 +U 10 +D 4 +R 10 +U 2 +L 2 +U 4 +R 7 +D 15 +R 15 +D 7 +R 14 +U 3 +D 8 +L 2 +U 11 +D 11 +U 9 +R 5 +L 3 +D 9 +R 12 +L 2 +R 10 +D 6 +R 6 +U 15 +R 10 +D 16 +R 5 +U 14 +R 16 +U 5 +L 10 +R 14 +L 15 +R 13 +L 15 +R 12 +L 9 +D 16 +U 13 +D 16 +R 2 +U 1 +D 15 +L 7 +D 5 +R 9 +U 8 +R 12 +U 3 +D 16 +R 11 +D 1 +U 3 +D 4 +U 10 +L 8 +R 4 +L 8 +R 8 +U 8 +L 9 +D 16 +U 7 +D 6 +R 1 +D 3 +L 15 +U 9 +D 9 +U 1 +L 9 +D 7 +U 14 +R 1 +D 11 +L 16 +U 13 +L 3 +R 12 +L 9 +R 9 +L 9 +U 5 +R 10 +D 14 +L 8 +R 7 +L 12 +R 13 +D 5 +U 10 +R 12 +U 11 +L 7 +R 9 +D 7 +L 11 +D 1 +R 8 +D 7 +U 6 +D 10 +R 13 +L 16 +U 10 +L 5 +R 12 +L 16 +U 6 +D 10 +U 3 +D 7 +U 7 +D 15 +L 2 +R 9 +U 8 +D 11 +L 15 +U 10 +D 10 +L 6 +D 14 +L 5 +U 3 +D 9 +U 2 +D 16 +U 6 +D 3 +R 15 +D 12 +R 9 +L 16 +R 4 +U 9 +L 8 +R 11 +L 14 +D 6 +U 11 +L 6 +R 7 +U 8 +R 7 +U 8 +D 7 +U 6 +L 15 +U 3 +D 6 +U 3 +R 6 +D 3 +L 10 +R 14 +L 17 +D 12 +L 15 +D 5 +R 6 +D 4 +R 6 +D 5 +U 8 +D 10 +R 13 +D 6 +U 3 +L 5 +U 3 +R 11 +D 11 +U 8 +L 5 +U 11 +L 7 +R 16 +L 11 +D 3 +L 16 +D 14 +R 1 +U 10 +L 7 +U 4 +D 11 +L 9 +R 3 +D 1 +L 7 +R 17 +D 17 +R 11 +U 4 +R 15 +L 10 +R 13 +U 17 +D 16 +L 16 +U 14 +D 11 +U 10 +D 12 +L 11 +R 5 +D 17 +U 1 +R 5 +L 14 +D 14 +R 5 +L 6 +R 11 +U 13 +R 10 +U 15 +L 2 +R 8 +D 3 +R 11 +L 8 +R 11 +U 5 +L 12 +U 2 +L 16 +D 5 +L 17 +R 10 +D 15 +L 16 +U 1 +D 10 +R 13 +L 6 +D 5 +R 13 +U 2 +D 16 +L 9 +U 11 +D 13 +U 16 +L 6 +R 15 +D 10 +U 17 +L 15 +D 7 +R 6 +D 15 +R 11 +L 14 +U 12 +D 18 +R 6 +U 16 +L 1 +U 10 +R 15 +U 3 +L 12 +D 9 +L 11 +D 18 +R 11 +L 12 +U 5 +L 13 +D 2 +R 11 +D 10 +L 15 +R 5 +D 17 +R 6 +L 16 +R 11 +D 1 +R 5 +U 13 +R 11 +D 13 +L 12 +U 10 +D 9 +R 1 +D 15 +R 1 +D 17 +R 10 +U 11 +R 14 +L 17 +R 2 +L 1 +D 12 +R 6 +U 18 +R 3 +L 8 +R 11 +L 15 +U 8 +L 7 +D 2 +L 9 +D 9 +L 11 +U 5 +D 8 +U 16 +R 13 +L 7 +D 6 +U 16 +L 9 +U 3 +R 4 +L 12 +U 18 +D 7 +L 10 +R 16 +D 1 +R 4 +U 4 +R 13 +D 6 +L 5 +R 3 +D 10 +U 4 +L 17 +D 9 +R 8 +L 1 +D 8 +L 16 +D 3 +U 3 +R 1 +U 9 +R 13 +D 3 +L 4 +R 6 +D 10 +U 16 +L 9 +U 5 +L 14 +U 8 +D 17 +L 18 +D 5 +U 10 +R 14 +L 8 +U 6 +R 5 +U 19 +L 9 +U 2 +D 7 +U 14 +R 17 +L 16 +D 15 +U 11 +D 4 +L 16 +U 14 +D 6 +L 3 +R 18 +L 17 +D 6 +L 10 +U 7 +D 11 +L 15 +U 12 +L 6 +D 6 +L 14 +U 17 +L 7 +D 2 +L 7 +U 12 +L 17 +R 16 +U 19 +L 12 +U 10 +L 6 +U 3 +D 16 +L 5 +D 15 +L 7 +R 6 +D 2 +R 19 +L 4 +D 18 +R 19 +D 9 +R 11 +L 17 +R 1 +U 15 +R 3 +D 18 +L 13 +U 7 +D 7 +R 15 +U 4 +D 16 +R 6 +U 4 +R 10 +U 10 +R 1 +D 19 +R 13 +U 7 +L 13 +D 15 +U 2 +L 18 +D 5 +U 5 +D 10 +L 8 +D 13 +U 8 +L 15 +D 12 +U 11 +D 17 +L 14 +R 4 +D 19 +L 6 +D 5 +L 13 +D 16 +U 1 +R 14 +U 15 +L 18 +D 7 +L 14 +D 11 +L 7 +D 18 +U 16 +L 1 +R 18 +L 1 +U 19 +R 3 +D 1 \ No newline at end of file diff --git a/2022/go/day10/day10.go b/2022/go/day10/day10.go new file mode 100644 index 0000000..4fecf79 --- /dev/null +++ b/2022/go/day10/day10.go @@ -0,0 +1,77 @@ +package day10 + +import ( + "adventofcode2022/utils" + _ "fmt" + "strings" +) + +func Part1(input string) int { + lines := strings.Split(input, "\n") + cycle := 0 + strength := 0 + x := 1 + for _, line := range lines { + cmd := strings.Split(line, " ") + switch { + case cmd[0] == "noop": + strength,cycle = cycles_1(1, cycle, strength, x) + case cmd[0] == "addx": + strength, cycle = cycles_1(2, cycle, strength, x) + x += utils.MustAtoi(cmd[1]) + } + } + return strength +} + +func Part2(input string) string { + lines := strings.Split(input, "\n") + cycle := 0 + x := 1 + crt := [6][40]string{} + for _, line := range lines { + cmd := strings.Split(line, " ") + switch { + case cmd[0] == "noop": + cycle = cycles_2(1, cycle, x, &crt) + case cmd[0] == "addx": + cycle = cycles_2(2, cycle, x, &crt) + x += utils.MustAtoi(cmd[1]) + } + } + output := "\n" + for i:=0;i<6;i++ { + for j:=0;j<40;j++ { + output = output + crt[i][j] + } + output = output + "\n" + } + + return output +} + +func cycles_1(num int, cycle int, strength int, x int) (int, int) { + for i:=0;i +// assumes input is in day/input.txt +func main() { + d := day() + fmt.Printf("Running day %02d\n", d) + + switch d { + case 1: + fmt.Printf("part 1: %d\n", day01.Part1(utils.Readfile(d))) + fmt.Printf("part 2: %d\n", day01.Part2(utils.Readfile(d))) + case 2: + fmt.Printf("part 1: %d\n", day02.Part1(utils.Readfile(d))) + fmt.Printf("part 2: %d\n", day02.Part2(utils.Readfile(d))) + case 3: + fmt.Printf("part 1: %d\n", day03.Part1(utils.Readfile(d))) + fmt.Printf("part 2: %d\n", day03.Part2(utils.Readfile(d))) + case 4: + fmt.Printf("part 1: %d\n", day04.Part1(utils.Readfile(d))) + fmt.Printf("part 2: %d\n", day04.Part2(utils.Readfile(d))) + case 5: + fmt.Printf("part 1: %s\n", day05.Part1(utils.Readfile(d))) + fmt.Printf("part 2: %s\n", day05.Part2(utils.Readfile(d))) + case 6: + fmt.Printf("part 1: %d\n", day06.Part1(utils.Readfile(d))) + fmt.Printf("part 2: %d\n", day06.Part2(utils.Readfile(d))) + case 7: + fmt.Printf("part 1: %d\n", day07.Part1(utils.Readfile(d))) + fmt.Printf("part 2: %d\n", day07.Part2(utils.Readfile(d))) + case 8: + fmt.Printf("part 1: %d\n", day08.Part1(utils.Readfile(d))) + fmt.Printf("part 2: %d\n", day08.Part2(utils.Readfile(d))) + case 9: + fmt.Printf("part 1: %d\n", day09.Part1(utils.Readfile(d))) + fmt.Printf("part 2: %d\n", day09.Part2(utils.Readfile(d))) + case 10: + fmt.Printf("part 1: %d\n", day10.Part1(utils.Readfile(d))) + fmt.Printf("part 2: %s\n", day10.Part2(utils.Readfile(d))) + default: + panic(fmt.Errorf("no such day: %d", d)) + } +} + +// Reads day from os.Args. +func day() int { + latest := 9 + if len(os.Args) == 1 { + return latest + } + + if os.Args[1] == "next" { + genNext(latest + 1) + os.Exit(0) + } + day := utils.MustAtoi(os.Args[1]) + return day +} + + +func genNext(n int) { + os.Mkdir(fmt.Sprintf("day%02d", n), 0755) + f, err := os.Create(fmt.Sprintf("day%02d/day%02d.go", n, n)) + utils.PanicOnErr(err) + defer f.Close() + f.WriteString(fmt.Sprintf(`package day%02d + +func Part1(input string) int { + return 0 +} + +func Part2(input string) int { + return 0 +} +`, n)) + fmt.Printf("wrote day%02d/day%02d.go\n", n, n) + + f, err = os.Create(fmt.Sprintf("day%02d/day%02d_test.go", n, n)) + utils.PanicOnErr(err) + defer f.Close() + f.WriteString(fmt.Sprintf(`package day%02d + +import ( + "testing" + + "github.com/stretchr/testify/require" +) + +func TestPart1(t *testing.T) { + r := Part1("") + require.Equal(t, 0, r) +} + +func TestPart2(t *testing.T) { + r := Part2("") + require.Equal(t, 0, r) +} +`, n)) + fmt.Printf("wrote day%02d/day%02d_test.go\n", n, n) + +} \ No newline at end of file diff --git a/2022/go/utils/grid2d/grid2d.go b/2022/go/utils/grid2d/grid2d.go new file mode 100644 index 0000000..561a34f --- /dev/null +++ b/2022/go/utils/grid2d/grid2d.go @@ -0,0 +1,74 @@ +package grid2d + +import ( + "strings" + + "adventofcode2022/utils" +) + +type Grid[T any] struct { + sizeX, sizeY int + matrix [][]T + empty T +} + +func NewGrid[T any](sizeX, sizeY int, empty T) *Grid[T] { + matrix := make([][]T, sizeY) + rows := make([]T, sizeX*sizeY) + for i := 0; i < sizeX*sizeY; i++ { + rows[i] = empty + } + + j := 0 + for i := 0; i < sizeY; i++ { + matrix[i] = rows[j : j+sizeX : j+sizeX] + j += sizeX + } + return &Grid[T]{ + sizeX: sizeX, + sizeY: sizeY, + matrix: matrix, + empty: empty, + } +} + +func (g *Grid[T]) SizeX() int { + return g.sizeX +} + +func (g *Grid[T]) SizeY() int { + return g.sizeY +} + +func (g *Grid[T]) Get(x, y int) T { + if x < 0 || x >= g.sizeX { + return g.empty + } + if y < 0 || y >= g.sizeY { + return g.empty + } + return g.matrix[y][x] +} + +func (g *Grid[T]) Set(x, y int, v T) { + if x < 0 || x >= g.sizeX { + panic("invalid x") + } + if y < 0 || y >= g.sizeY { + panic("invalid y") + } + g.matrix[y][x] = v +} + +func (g *Grid[T]) StringWithFormatter(formatter func(T, int, int) string) string { + var r strings.Builder + for j := 0; j < g.sizeY; j++ { + for i := 0; i < g.sizeX; i++ { + _, err := r.WriteString(formatter(g.matrix[j][i], i, j)) + utils.PanicOnErr(err) + } + _, err := r.WriteRune('\n') + utils.PanicOnErr(err) + } + return r.String() +} diff --git a/2022/go/utils/inputs/inputs.go b/2022/go/utils/inputs/inputs.go new file mode 100644 index 0000000..1a51933 --- /dev/null +++ b/2022/go/utils/inputs/inputs.go @@ -0,0 +1,45 @@ +package inputs + +import ( + "strings" + + "adventofcode2022/utils" + "adventofcode2022/utils/grid2d" + sparsegrid "adventofcode2022/utils/sparseGrid" +) + +func ToInts(input string, sep string) []int { + var r []int + for _, line := range strings.Split(input, sep) { + if line != "" { + r = append(r, utils.MustAtoi(line)) + } + } + return r +} + +func ToGrid2D[T any](input, rowSep, colSep string, empty T, conv func(string) T) *grid2d.Grid[T] { + lines := strings.Split(input, rowSep) + + grid := grid2d.NewGrid(len(lines[0]), len(lines), empty) + for y, line := range lines { + for x, v := range strings.Split(line, colSep) { + grid.Set(x, y, conv(v)) + } + } + + return grid +} + +func ToSparseGrid[T comparable](input, rowSep, colSep string, empty T, conv func(string) T) *sparsegrid.SparseGrid[T] { + lines := strings.Split(input, rowSep) + + grid := sparsegrid.NewGrid(empty) + for y, line := range lines { + for x, v := range strings.Split(line, colSep) { + grid.Set(x, y, conv(v)) + } + } + + return grid +} diff --git a/2022/go/utils/sparseGrid/sparseGrid.go b/2022/go/utils/sparseGrid/sparseGrid.go new file mode 100644 index 0000000..11b5a13 --- /dev/null +++ b/2022/go/utils/sparseGrid/sparseGrid.go @@ -0,0 +1,81 @@ +package sparsegrid + +import ( + "fmt" + "strings" + + "adventofcode2022/utils" +) + +type SparseGrid[T comparable] struct { + minX, maxX, minY, maxY int + data map[string]T + empty T +} + +func NewGrid[T comparable](empty T) *SparseGrid[T] { + return &SparseGrid[T]{ + minX: utils.MaxInt, + maxX: utils.MinInt, + minY: utils.MaxInt, + maxY: utils.MinInt, + data: map[string]T{}, + empty: empty, + } +} + +func (g *SparseGrid[T]) SizeX() (int, int) { + return g.minX, g.maxX +} + +func (g *SparseGrid[T]) SizeY() (int, int) { + return g.minY, g.maxY +} + +func (g *SparseGrid[T]) Visited() int { + return len(g.data) +} + +func (g *SparseGrid[T]) Get(x, y int) T { + k := key(x, y) + v, ok := g.data[k] + if !ok { + return g.empty + } + return v +} + +func (g *SparseGrid[T]) Set(x, y int, v T) { + k := key(x, y) + current, ok := g.data[k] + if ok && v == current { + return + } else if !ok && v == g.empty { + return + } else if v == g.empty { + delete(g.data, k) + } else { + g.data[k] = v + g.minX = utils.Min(g.minX, x) + g.maxX = utils.Max(g.maxX, x) + g.minY = utils.Min(g.minY, y) + g.maxY = utils.Max(g.maxY, y) + } +} + +func (g *SparseGrid[T]) StringWithFormatter(formatter func(T, int, int) string) string { + var r strings.Builder + for j := g.minY; j <= g.maxY; j++ { + for i := g.minX; i <= g.maxX; i++ { + _, err := r.WriteString(formatter(g.Get(i, j), i, j)) + utils.PanicOnErr(err) + } + _, err := r.WriteRune('\n') + utils.PanicOnErr(err) + } + return r.String() +} + +func key(x, y int) string { + return fmt.Sprintf("%d:%d", x, y) +} diff --git a/2022/go/utils/utils.go b/2022/go/utils/utils.go new file mode 100644 index 0000000..973c9ad --- /dev/null +++ b/2022/go/utils/utils.go @@ -0,0 +1,207 @@ +package utils + +import ( + "bufio" + "fmt" + "io" + "os" + "reflect" + "regexp" + "strconv" + "strings" + + "golang.org/x/exp/constraints" +) + +func PanicOnErr(err error) { + if err != nil { + panic(err) + } +} + +const MaxInt = int(^uint(0) >> 1) +const MinInt = ^MaxInt + +func Max[T constraints.Ordered](a, b T) T { + if a > b { + return a + } + return b +} + +func Min[T constraints.Ordered](a, b T) T { + if a < b { + return a + } + return b +} + +func SliceMinMax[T constraints.Ordered](slice []T) (*T, *T) { + if len(slice) == 0 { + return nil, nil + } + min := &slice[0] + max := &slice[0] + for i, v := range slice { + if v < *min { + min = &slice[i] + } + if v > *max { + max = &slice[i] + } + } + return min, max +} + +func MustAtoi(s string) int { + v, err := strconv.Atoi(s) + PanicOnErr(err) + return v +} + +// Returns key from map[T]int which has the max value +func MapFindMax(m interface{}) interface{} { + var maxK interface{} = nil + var maxV = MinInt + iter := reflect.ValueOf(m).MapRange() + for iter.Next() { + k := iter.Key() + v := int(iter.Value().Int()) + if v > maxV { + maxV = v + maxK = k.Interface() + } + } + return maxK +} + +// Returns key from map[T]int which has the min value +func MapFindMin(m interface{}) interface{} { + var minK interface{} = nil + var minV = MaxInt + iter := reflect.ValueOf(m).MapRange() + for iter.Next() { + k := iter.Key() + v := int(iter.Value().Int()) + if v < minV { + minV = v + minK = k.Interface() + } + } + return minK +} + +func Readfile(day int) string { + filename := fmt.Sprintf("day%02d/input.txt", day) + file, err := os.Open(filename) + PanicOnErr(err) + defer file.Close() + + reader := bufio.NewReader(file) + contents, err := io.ReadAll(reader) + PanicOnErr(err) + + return strings.TrimSuffix(string(contents), "\n") +} + +func ParseToStruct(re *regexp.Regexp, input string, target interface{}) bool { + m := re.FindStringSubmatch(input) + if m == nil { + return false + } + + var useOffset bool + + for i, name := range re.SubexpNames() { + if i == 0 { + continue + } + var field reflect.Value + if name == "" { + // use offset + if i == 1 { + useOffset = true + } else if !useOffset { + panic("can't mix named and unnamed subexpressions") + } + field = reflect.ValueOf(target).Elem().Field(i - 1) + } else { + // use name + if i == 1 { + useOffset = false + } else if useOffset { + panic("can't mix named and unnamed subexpressions") + } + field = reflect.ValueOf(target).Elem().FieldByName(name) + } + if field.Kind() == reflect.String { + field.SetString(m[i]) + } else if field.Kind() == reflect.Int { + v, err := strconv.Atoi(m[i]) + PanicOnErr(err) + field.SetInt(int64(v)) + } else if field.Kind() == reflect.Uint8 { + if len(m[i]) != 1 { + panic(fmt.Sprintf("expecting 1 char, got: %s", m[i])) + } + field.SetUint(uint64(m[i][0])) + } else { + panic(fmt.Sprintf("unknown kind: %s", field.Kind())) + } + } + return true +} + +func MustParseToStruct(re *regexp.Regexp, input string, target interface{}) { + if !ParseToStruct(re, input, target) { + panic(fmt.Errorf("failed to parse: %s", input)) + } +} + +func CharToLower(c byte) byte { + return strings.ToLower(string(c))[0] +} + +func CharToUpper(c byte) byte { + return strings.ToUpper(string(c))[0] +} + +func Contains(haystack []string, needle string) bool { + for _, s := range haystack { + if s == needle { + return true + } + } + return false +} + +func Abs[T constraints.Signed](x T) T { + if x < 0 { + return -x + } + return x +} + +func Gcd(x, y int) int { + if x <= 0 || y <= 0 { + panic(fmt.Errorf("invalid input: %d, %d", x, y)) + } + if x == y { + return x + } + if x > y { + return Gcd(x-y, y) + } else { + return Gcd(x, y-x) + } +} + +func Sign[T constraints.Signed](x T) int { + if x < 0 { + return -1 + } else if x > 0 { + return 1 + } else { + return 0 + } +}