89 lines
1.5 KiB
Go
89 lines
1.5 KiB
Go
package main
|
|
|
|
import (
|
|
"bufio"
|
|
"fmt"
|
|
"log"
|
|
"os"
|
|
"sort"
|
|
"strconv"
|
|
"strings"
|
|
)
|
|
|
|
func main() {
|
|
input := stdinToStringSlice()
|
|
puzzleOne(input)
|
|
puzzleTwo(input)
|
|
}
|
|
|
|
func puzzleOne(input []string) {
|
|
fmt.Println("=== Puzzle One ===")
|
|
var numGood int
|
|
var sides []int
|
|
for i := range input {
|
|
pts := strings.Fields(input[i])
|
|
sides = []int{atoi(pts[0]), atoi(pts[1]), atoi(pts[2])}
|
|
if isValidTriangle(sides) {
|
|
numGood++
|
|
}
|
|
}
|
|
fmt.Println("Found Good: ", numGood)
|
|
}
|
|
|
|
func puzzleTwo(input []string) {
|
|
fmt.Println("=== Puzzle Two ===")
|
|
var numGood int
|
|
var sides1, sides2, sides3 []int
|
|
for i := range input {
|
|
pts := strings.Fields(input[i])
|
|
sides1 = append(sides1, atoi(pts[0]))
|
|
sides2 = append(sides2, atoi(pts[1]))
|
|
sides3 = append(sides3, atoi(pts[2]))
|
|
if len(sides1) == 3 {
|
|
if isValidTriangle(sides1) {
|
|
numGood++
|
|
}
|
|
if isValidTriangle(sides2) {
|
|
numGood++
|
|
}
|
|
if isValidTriangle(sides3) {
|
|
numGood++
|
|
}
|
|
sides1 = []int{}
|
|
sides2 = []int{}
|
|
sides3 = []int{}
|
|
}
|
|
}
|
|
fmt.Println("Found Good: ", numGood)
|
|
}
|
|
|
|
func isValidTriangle(sides []int) bool {
|
|
sort.Ints(sides)
|
|
if sides[2] < (sides[1] + sides[0]) {
|
|
return true
|
|
}
|
|
return false
|
|
}
|
|
|
|
func itoa(i int) string {
|
|
return strconv.Itoa(i)
|
|
}
|
|
|
|
func atoi(i string) int {
|
|
var ret int
|
|
var err error
|
|
if ret, err = strconv.Atoi(i); err != nil {
|
|
log.Fatal("Invalid Atoi")
|
|
}
|
|
return ret
|
|
}
|
|
|
|
func stdinToStringSlice() []string {
|
|
var input []string
|
|
scanner := bufio.NewScanner(os.Stdin)
|
|
for scanner.Scan() {
|
|
input = append(input, scanner.Text())
|
|
}
|
|
return input
|
|
}
|