This commit is contained in:
sid! 2022-12-13 19:32:37 +00:00
commit 0e8ba1987d
8 changed files with 5013 additions and 0 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
.vscode

3
go.mod Normal file
View File

@ -0,0 +1,3 @@
module git.jacknet.io/S.D/AdventOfGode2022
go 1.19

2270
input/input1 Normal file

File diff suppressed because it is too large Load Diff

2500
input/input2 Normal file

File diff suppressed because it is too large Load Diff

58
level1/level1.go Normal file
View File

@ -0,0 +1,58 @@
package level1
import (
"log"
"sort"
"strconv"
"strings"
)
func SumGroup(in []int) int {
result := 0
for _, data := range in {
result += data
}
return result
}
func GetBiggestIntGroup(in [][]int) int {
max := 0
for _, data := range in {
total := SumGroup(data)
if total > max {
max = total
}
}
return max
}
func GetNBiggest(in [][]int, num int) []int {
output := make([]int, 0, len(in))
for _, data := range in {
output = append(output, SumGroup(data))
}
sort.Slice(output, func(x, y int) bool {
return output[x] > output[y]
})
return output[:num]
}
func GetIntGroups(in []string) [][]int {
output := make([][]int, 0, 20)
group := make([]int, 0, 10)
for _, data := range in {
if strings.TrimSpace(data) == "" {
output = append(output, group)
group = make([]int, 0, 10)
} else {
conv, err := strconv.ParseInt(data, 10, 0)
if err != nil {
log.Fatal(err)
continue
}
group = append(group, int(conv))
}
}
return output
}

23
level1/level1_test.go Normal file
View File

@ -0,0 +1,23 @@
package level1
import (
"testing"
)
func TestSumGroup(t *testing.T) {
input := []int{2, 5, 4, 3}
result := SumGroup(input[:])
if result != 14 {
t.Log("Invalid Result, got ", result)
t.Fail()
}
}
func TestBiggestSumGroup(t *testing.T) {
input := [][]int{{1, 2}, {3, 4}, {1, 2}, {2, 2}}
result := GetBiggestIntGroup(input[:])
if result != 7 {
t.Log("Invalid Result, got ", result)
t.Fail()
}
}

98
level2/level2.go Normal file
View File

@ -0,0 +1,98 @@
package level2
import (
"log"
"strings"
)
const (
Lose = 0
Draw = 3
Win = 6
Rock = 1
Paper = 2
Scissors = 3
)
func calcScore(in []string) int {
x, y := in[0], in[1]
switch {
case x == "A" && y == "X":
return Draw + Rock
case x == "A" && y == "Y":
return Win + Paper
case x == "A" && y == "Z":
return Lose + Scissors
case x == "B" && y == "X":
return Lose + Rock
case x == "B" && y == "Y":
return Draw + Paper
case x == "B" && y == "Z":
return Win + Scissors
case x == "C" && y == "X":
return Win + Rock
case x == "C" && y == "Y":
return Lose + Paper
case x == "C" && y == "Z":
return Draw + Scissors
default:
log.Panic("Invalid input")
return -1
}
}
func calcScore2(in []string) int {
x, y := in[0], in[1]
switch {
case x == "A" && y == "X":
return Lose + Scissors
case x == "A" && y == "Y":
return Draw + Rock
case x == "A" && y == "Z":
return Win + Paper
case x == "B" && y == "X":
return Lose + Rock
case x == "B" && y == "Y":
return Draw + Paper
case x == "B" && y == "Z":
return Win + Scissors
case x == "C" && y == "X":
return Lose + Paper
case x == "C" && y == "Y":
return Draw + Scissors
case x == "C" && y == "Z":
return Win + Rock
default:
log.Panic("Invalid input")
return -1
}
}
func TotalScore(in [][]string) int {
total := 0
for _, data := range in {
total += calcScore(data)
}
return total
}
func TotalScore2(in [][]string) int {
total := 0
for _, data := range in {
total += calcScore2(data)
}
return total
}
func ParseInput(in []string) [][]string {
output := make([][]string, 0, len(in))
for _, data := range in {
components := strings.Fields(data)
if len(components) != 2 {
log.Panic("Invalid string input\n")
return output
}
output = append(output, components)
}
return output
}

60
main.go Normal file
View File

@ -0,0 +1,60 @@
package main
import (
"bufio"
"log"
"os"
"git.jacknet.io/S.D/AdventOfGode2022/level1"
"git.jacknet.io/S.D/AdventOfGode2022/level2"
)
func readFile(s string) []string {
f, err := os.Open(s)
if err != nil {
log.Fatal(err)
return make([]string, 0)
}
defer f.Close()
// read the file line by line using scanner
scanner := bufio.NewScanner(f)
fileData := make([]string, 0, 100)
for scanner.Scan() {
newString := scanner.Text()
fileData = append(fileData, newString)
}
if err := scanner.Err(); err != nil {
log.Fatal(err)
return make([]string, 0)
}
return fileData
}
func runLevelOne() {
fileInput := readFile("input/input1")
intGroups := level1.GetIntGroups(fileInput)
biggest := level1.GetNBiggest(intGroups, 1)
log.Println(biggest)
biggest = level1.GetNBiggest(intGroups, 3)
log.Println(biggest)
log.Println(level1.SumGroup(biggest))
}
func runLevelTwo() {
fileInput := readFile("input/input2")
level2Parsed := level2.ParseInput(fileInput)
log.Println(level2.TotalScore(level2Parsed))
log.Println(level2.TotalScore2(level2Parsed))
}
func main() {
log.Println("Hello World!")
runLevelOne()
runLevelTwo()
}