58 lines
1.4 KiB
Go
58 lines
1.4 KiB
Go
package day03
|
|
|
|
import (
|
|
"strconv"
|
|
"strings"
|
|
"tools"
|
|
)
|
|
|
|
func getTriangleList(input []string) (triangleList [][]int) {
|
|
for _, line := range input {
|
|
parts := strings.Split(strings.TrimLeft(line, " "), " ")
|
|
var triparts []int
|
|
for _, part := range parts {
|
|
if len(part) == 0 {
|
|
continue
|
|
}
|
|
sidelen, _ := strconv.Atoi(part)
|
|
triparts = append(triparts, sidelen)
|
|
}
|
|
triangleList = append(triangleList, triparts)
|
|
}
|
|
return triangleList
|
|
}
|
|
|
|
func Part1(puzzle tools.AoCPuzzle) interface{} {
|
|
triangle_list := getTriangleList(puzzle.GetInputArray())
|
|
|
|
validCount := 0
|
|
for _, triangle := range triangle_list {
|
|
shortSide := tools.Min(triangle...)
|
|
longSide := tools.Max(triangle...)
|
|
mediumSide := tools.Sum(triangle...) - shortSide - longSide
|
|
if shortSide+mediumSide > longSide {
|
|
validCount++
|
|
}
|
|
}
|
|
|
|
return validCount
|
|
}
|
|
|
|
func Part2(puzzle tools.AoCPuzzle) interface{} {
|
|
triangle_list := getTriangleList(puzzle.GetInputArray())
|
|
|
|
validCount := 0
|
|
for y := 0; y < len(triangle_list)-2; y += 3 {
|
|
for x := 0; x < 3; x++ {
|
|
shortSide := tools.Min(triangle_list[y][x], triangle_list[y+1][x], triangle_list[y+2][x])
|
|
longSide := tools.Max(triangle_list[y][x], triangle_list[y+1][x], triangle_list[y+2][x])
|
|
mediumSide := tools.Sum(triangle_list[y][x], triangle_list[y+1][x], triangle_list[y+2][x]) - shortSide - longSide
|
|
if shortSide+mediumSide > longSide {
|
|
validCount++
|
|
}
|
|
}
|
|
}
|
|
|
|
return validCount
|
|
}
|