Skip to content

Commit

Permalink
Refactor
Browse files Browse the repository at this point in the history
  • Loading branch information
sunilbpandey committed Dec 6, 2023
1 parent 760c536 commit a024b0c
Show file tree
Hide file tree
Showing 8 changed files with 175 additions and 208 deletions.
24 changes: 24 additions & 0 deletions 2023/day01/part2.go → 2023/day01/day01.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,30 @@ import (
"github.com/sunilbpandey/advent-of-code/utils/go/strutils"
)

//go:embed input.txt
var content string

func setDigits(d1, d2 *int, value int) {
if *d1 == -1 {
*d1 = value
}
*d2 = value
}

func Part1() string {
sum := 0
strutils.ForEachLine(content, func(_ int, line string) {
d1, d2 := -1, -1
for _, c := range line {
if unicode.IsDigit(c) {
setDigits(&d1, &d2, int(c-'0'))
}
}
sum += d1*10 + d2
})
return strconv.Itoa(sum)
}

func Part2() string {
names := []string{"one", "two", "three", "four", "five", "six", "seven", "eight", "nine"}
sum := 0
Expand Down
33 changes: 0 additions & 33 deletions 2023/day01/part1.go

This file was deleted.

31 changes: 31 additions & 0 deletions 2023/day02/part1.go → 2023/day02/day02.go
Original file line number Diff line number Diff line change
Expand Up @@ -56,3 +56,34 @@ func Part1() string {
})
return strconv.Itoa(sum)
}

func Part2() string {
sum := 0
strutils.ForEachLine(content, func(_ int, line string) {
if len(line) == 0 {
return
}

maxPerColor := map[string]int{
"red": 0,
"green": 0,
"blue": 0,
}

_, sets := parseLine(line)
for _, set := range sets {
for color, count := range set {
if count > maxPerColor[color] {
maxPerColor[color] = count
}
}
}

product := 1
for _, count := range maxPerColor {
product *= count
}
sum += product
})
return strconv.Itoa(sum)
}
38 changes: 0 additions & 38 deletions 2023/day02/part2.go

This file was deleted.

86 changes: 86 additions & 0 deletions 2023/day03/part2.go → 2023/day03/day03.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package day03

import (
_ "embed"
"fmt"
"strconv"
"unicode"
Expand All @@ -9,6 +10,91 @@ import (
"github.com/sunilbpandey/advent-of-code/utils/go/strutils"
)

//go:embed input.txt
var content string

func overlaps(start, length, index int) bool {
for i := index - 1; i <= index+1; i++ {
if i >= start && i < start+length {
return true
}
}
return false
}

func startsNumber(s string) bool {
return unicode.IsDigit(rune(s[0]))
}

func isPartNumber(index int, number string, prev map[int]string, curr map[int]string) bool {
for start, value := range prev {
if !startsNumber(value) && overlaps(index, len(number), start) {
return true
}
}
for start, value := range curr {
if !startsNumber(value) && overlaps(index, len(number), start) {
return true
}
}
return false
}

func Part1() string {
sum := 0
prev := make(map[int]string)

strutils.ForEachLine(content, func(_ int, line string) {
if len(line) == 0 {
return
}

curr := make(map[int]string)
number := ""
for i, c := range line {
if unicode.IsDigit(c) {
number += string(c)
} else {
if len(number) > 0 {
if isPartNumber(i-len(number), number, prev, curr) {
sum += intutils.Atoi(number)
} else {
curr[i-len(number)] = number
}
number = ""
}

if c != '.' {
for start, value := range prev {
if startsNumber(value) && overlaps(start, len(value), i) {
sum += intutils.Atoi(value)
delete(prev, start)
}
}

for start, value := range curr {
if startsNumber(value) && overlaps(start, len(value), i) {
sum += intutils.Atoi(value)
delete(curr, start)
}
}
curr[i] = string(c)
}
}
}
if len(number) > 0 {
if isPartNumber(len(line)-len(number), number, prev, curr) {
sum += intutils.Atoi(number)
} else {
curr[len(line)-len(number)] = number
}
}

prev = curr
})
return strconv.Itoa(sum)
}

func findOverlappingGears(linenum, index int, number string, prev map[int]string, curr map[int]string) []string {
gears := []string{}
for start, value := range prev {
Expand Down
95 changes: 0 additions & 95 deletions 2023/day03/part1.go

This file was deleted.

34 changes: 34 additions & 0 deletions 2023/day04/part1.go → 2023/day04/day04.go
Original file line number Diff line number Diff line change
Expand Up @@ -57,3 +57,37 @@ func Part1() string {
})
return strconv.Itoa(sum)
}

func Part2() string {
total := 0
cardsWon := []int{}
strutils.ForEachLine(content, func(_ int, line string) {
if len(line) == 0 {
return
}

copies := 1
if len(cardsWon) > 0 {
copies += cardsWon[0]
cardsWon = cardsWon[1:]
}

lineParts := strings.Split(line, ": ")

numberParts := strings.Split(lineParts[1], " | ")
winningNumbers := parseWinningNumbers(numberParts[0])
count := countNumbersWon(winningNumbers, numberParts[1])

for i := 0; i < len(cardsWon) && count > 0; i++ {
cardsWon[i] += copies
count--
}

for i := 0; i < count; i++ {
cardsWon = append(cardsWon, copies)
}

total += copies
})
return strconv.Itoa(total)
}
Loading

0 comments on commit a024b0c

Please sign in to comment.