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 }