package main import ( "fmt" "io" "log" "strconv" "strings" ) func main() { var input []string var readInp string for { _, err := fmt.Scan(&readInp) if err != nil { if err != io.EOF { log.Fatal(err) } break } input = append(input, readInp) } var totalPaper, totalRibbon int for _, k := range input { l, w, h := parseInputString(k) totalPaper += calcPaperForPresent(l, w, h) totalRibbon += calcRibbonForPresent(l, w, h) } fmt.Printf("The elves need %d sq ft of wrapping paper\n", totalPaper) fmt.Printf("and %d ft of ribbon.\n", totalRibbon) } func parseInputString(inp string) (int, int, int) { dim := strings.Split(inp, "x") if len(dim) == 3 { pt1, _ := strconv.Atoi(dim[0]) pt2, _ := strconv.Atoi(dim[1]) pt3, _ := strconv.Atoi(dim[2]) return pt1, pt2, pt3 } return 0, 0, 0 } func calcPaperForPresent(l, w, h int) int { pt1 := l * w pt2 := w * h pt3 := h * l pt4 := pt3 if pt1 < pt2 && pt1 < pt3 { pt4 = pt1 } else if pt2 < pt3 { pt4 = pt2 } return pt1*2 + pt2*2 + pt3*2 + pt4 } func calcRibbonForPresent(l, w, h int) int { var low1, low2 int low2 = h if l < w { low1 = l if w < h { low2 = w } } else { low1 = w if l < h { low2 = l } } return low1*2 + low2*2 + (l * w * h) }