day3
This commit is contained in:
@@ -35,7 +35,7 @@ func Part2(input string) int {
|
|||||||
list2 := make(map[int]int)
|
list2 := make(map[int]int)
|
||||||
|
|
||||||
|
|
||||||
num := 0
|
num := 1
|
||||||
lines := strings.Split(input, "\n")
|
lines := strings.Split(input, "\n")
|
||||||
for _, line := range lines {
|
for _, line := range lines {
|
||||||
fields := strings.Fields(line)
|
fields := strings.Fields(line)
|
||||||
|
|||||||
64
2024/go/day03/day03.go
Normal file
64
2024/go/day03/day03.go
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
package day03
|
||||||
|
|
||||||
|
import (
|
||||||
|
"adventofcode2024/utils"
|
||||||
|
"fmt"
|
||||||
|
"regexp"
|
||||||
|
)
|
||||||
|
|
||||||
|
func Part1(input string) int {
|
||||||
|
val := 0
|
||||||
|
|
||||||
|
pattern := `mul\((\d{1,3}),(\d{1,3})\)`
|
||||||
|
re := regexp.MustCompile(pattern)
|
||||||
|
matches := re.FindAllStringSubmatch(input, -1)
|
||||||
|
|
||||||
|
fmt.Println("Matches found:")
|
||||||
|
for _, match := range matches {
|
||||||
|
if len(match) == 3 { // match[1] is x, match[2] is y
|
||||||
|
x := utils.MustAtoi(match[1])
|
||||||
|
y := utils.MustAtoi(match[2])
|
||||||
|
val += x * y
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return val
|
||||||
|
}
|
||||||
|
|
||||||
|
func Part2(input string) int {
|
||||||
|
val := 0
|
||||||
|
pattern := `mul\((\d{1,3}),(\d{1,3})\)`
|
||||||
|
re := regexp.MustCompile(pattern)
|
||||||
|
matches := re.FindAllStringSubmatchIndex(input, -1)
|
||||||
|
|
||||||
|
fmt.Println("Matches found:")
|
||||||
|
for _, match := range matches {
|
||||||
|
if len(match) == 6 {
|
||||||
|
xStart, xEnd := match[2], match[3]
|
||||||
|
yStart, yEnd := match[4], match[5]
|
||||||
|
x := utils.MustAtoi(input[xStart:xEnd])
|
||||||
|
y := utils.MustAtoi(input[yStart:yEnd])
|
||||||
|
if do(input[:xStart]) {
|
||||||
|
val += x * y
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return val
|
||||||
|
}
|
||||||
|
|
||||||
|
func do(input string) bool {
|
||||||
|
pattern := `don't\(\)|do\(\)`
|
||||||
|
re := regexp.MustCompile(pattern)
|
||||||
|
|
||||||
|
matches := re.FindAllString(input, -1)
|
||||||
|
|
||||||
|
if len(matches) > 0 {
|
||||||
|
// Get the last match
|
||||||
|
lastMatch := matches[len(matches)-1]
|
||||||
|
if lastMatch == "don't()" {
|
||||||
|
return false
|
||||||
|
} else if lastMatch == "do()" {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
17
2024/go/day03/day03_test.go
Normal file
17
2024/go/day03/day03_test.go
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
package day03
|
||||||
|
|
||||||
|
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("xmul(2,4)&mul[3,7]!^don't()_mul(5,5)+mul(32,64](mul(11,8)undo()?mul(8,5))")
|
||||||
|
require.Equal(t, 48, r)
|
||||||
|
}
|
||||||
@@ -9,6 +9,7 @@ import (
|
|||||||
"adventofcode2024/utils"
|
"adventofcode2024/utils"
|
||||||
"adventofcode2024/day01"
|
"adventofcode2024/day01"
|
||||||
"adventofcode2024/day02"
|
"adventofcode2024/day02"
|
||||||
|
"adventofcode2024/day03"
|
||||||
)
|
)
|
||||||
// Usage: go run main.go <NN>
|
// Usage: go run main.go <NN>
|
||||||
// assumes input is in day<NN>/input.txt
|
// assumes input is in day<NN>/input.txt
|
||||||
@@ -23,6 +24,9 @@ func main() {
|
|||||||
case 2:
|
case 2:
|
||||||
fmt.Printf("part 1: %d\n", day02.Part1(utils.Readfile(d)))
|
fmt.Printf("part 1: %d\n", day02.Part1(utils.Readfile(d)))
|
||||||
fmt.Printf("part 2: %d\n", day02.Part2(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)))
|
||||||
default:
|
default:
|
||||||
panic(fmt.Errorf("no such day: %d", d))
|
panic(fmt.Errorf("no such day: %d", d))
|
||||||
}
|
}
|
||||||
@@ -30,7 +34,7 @@ func main() {
|
|||||||
|
|
||||||
// Reads day from os.Args.
|
// Reads day from os.Args.
|
||||||
func day() int {
|
func day() int {
|
||||||
latest := 1
|
latest := 2
|
||||||
if len(os.Args) == 1 {
|
if len(os.Args) == 1 {
|
||||||
return latest
|
return latest
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user