Browse Source

Solved for small

Piotr Czajkowski 1 year ago
parent
commit
eccf994890
1 changed files with 20 additions and 1 deletions
  1. 20 1
      21/code.go

+ 20 - 1
21/code.go

@@ -56,6 +56,25 @@ func readInput(file *os.File) map[string]monkey {
 	return monkeys
 }
 
+func processMonkey(being monkey, monkeys map[string]monkey) int {
+	if being.spec == val {
+		return being.value
+	}
+
+	switch being.op {
+	case '+':
+		return processMonkey(monkeys[being.left], monkeys) + processMonkey(monkeys[being.right], monkeys)
+	case '-':
+		return processMonkey(monkeys[being.left], monkeys) - processMonkey(monkeys[being.right], monkeys)
+	case '*':
+		return processMonkey(monkeys[being.left], monkeys) * processMonkey(monkeys[being.right], monkeys)
+	case '/':
+		return processMonkey(monkeys[being.left], monkeys) / processMonkey(monkeys[being.right], monkeys)
+	}
+
+	return 0
+}
+
 func main() {
 	if len(os.Args) < 2 {
 		log.Fatal("You need to specify a file!")
@@ -69,5 +88,5 @@ func main() {
 	}
 
 	monkeys := readInput(file)
-	fmt.Println(monkeys)
+	fmt.Println("Part1:", processMonkey(monkeys["root"], monkeys))
 }