diff --git a/2019/1/day1.go b/2019/1/day1.go new file mode 100644 index 0000000..ddc6588 --- /dev/null +++ b/2019/1/day1.go @@ -0,0 +1,46 @@ +package main + +import ( + "fmt" + "io/ioutil" + "strconv" + "strings" +) + +func main() { + inFile, _ := ioutil.ReadFile("input") + lines := strings.Split(string(inFile), "\n") + + fmt.Printf("Part 1: %d\n", part1(lines)) + fmt.Printf("Part 2: %d\n", part2(lines)) +} + +func part1(lines []string) int { + fuel := 0 + for _, line := range lines { + mass, _ := strconv.Atoi(line) + fuel += cost(mass) + } + return fuel +} + +func part2(lines []string) int { + fuel := 0 + for _, line := range lines { + mass, _ := strconv.Atoi(line) + fuel += costRec(mass, 0) + } + return fuel +} + +func cost(mass int) int { + return mass/3 - 2 +} + +func costRec(mass int, acc int) int { + c := cost(mass) + if c <= 0 { + return acc + } + return costRec(c, acc+c) +}