Browse Source

Not there

Piotr Czajkowski 2 years ago
parent
commit
f9c66c7227
2 changed files with 363 additions and 4 deletions
  1. 111 4
      24/code.go
  2. 252 0
      24/input

+ 111 - 4
24/code.go

@@ -37,9 +37,13 @@ func readInput(file string) [][]operation {
 			log.Fatal("Invalid line: ", line)
 		}
 
-		if parts[0] == "inp" && len(operations) > 0 {
-			input = append(input, operations)
-			operations = []operation{}
+		if parts[0] == "inp" {
+			if len(operations) > 0 {
+				input = append(input, operations)
+				operations = []operation{}
+			}
+
+			continue
 		}
 
 		current := operation{op: parts[0], a: parts[1][0]}
@@ -66,11 +70,114 @@ func readInput(file string) [][]operation {
 	return input
 }
 
+func do(action operation, variables map[byte]int) bool {
+	switch action.op {
+	case "add":
+		if action.isBNumber {
+			variables[action.a] += action.b
+			return true
+		} else {
+			variables[action.a] += variables[action.bC]
+			return true
+		}
+	case "mul":
+		if action.isBNumber {
+			variables[action.a] *= action.b
+			return true
+		} else {
+			variables[action.a] *= variables[action.bC]
+			return true
+		}
+	case "div":
+		if action.isBNumber {
+			if action.b == 0 {
+				return false
+			}
+
+			variables[action.a] /= action.b
+		} else {
+			if variables[action.bC] == 0 {
+				return false
+			}
+
+			variables[action.a] /= variables[action.bC]
+		}
+		return true
+	case "mod":
+		if variables[action.a] < 0 {
+			return false
+		}
+
+		if action.isBNumber {
+			if action.b <= 0 {
+				return false
+			}
+
+			variables[action.a] %= action.b
+		} else {
+			if variables[action.bC] <= 0 {
+				return false
+			}
+
+			variables[action.a] %= variables[action.bC]
+		}
+		return true
+	case "eql":
+		if action.isBNumber {
+			if variables[action.a] == action.b {
+				variables[action.a] = 1
+			} else {
+				variables[action.a] = 0
+			}
+		} else {
+			if variables[action.a] == variables[action.bC] {
+				variables[action.a] = 1
+			} else {
+				variables[action.a] = 0
+			}
+		}
+		return true
+	}
+
+	return false
+}
+
+func doSequence(sequence []operation, variables map[byte]int) bool {
+	for _, action := range sequence {
+		if !do(action, variables) {
+			fmt.Println(action, variables)
+			return false
+		}
+	}
+
+	return true
+}
+
+func part1(input [][]operation) []int {
+	var number []int
+	for i := 0; i < 14; i++ {
+		for j := 9; j >= 1; j-- {
+			variables := map[byte]int{}
+			variables['w'] = j
+			if !doSequence(input[i], map[byte]int{}) {
+				fmt.Println("Failed for ", j)
+			}
+
+			if variables['z'] == 0 {
+				number = append(number, j)
+				break
+			}
+		}
+	}
+
+	return number
+}
+
 func main() {
 	if len(os.Args) < 2 {
 		log.Fatal("Please provide a file name as argument")
 	}
 
 	input := readInput(os.Args[1])
-	fmt.Println(input)
+	fmt.Println("Part1:", part1(input))
 }

+ 252 - 0
24/input

@@ -0,0 +1,252 @@
+inp w
+mul x 0
+add x z
+mod x 26
+div z 1
+add x 12
+eql x w
+eql x 0
+mul y 0
+add y 25
+mul y x
+add y 1
+mul z y
+mul y 0
+add y w
+add y 9
+mul y x
+add z y
+inp w
+mul x 0
+add x z
+mod x 26
+div z 1
+add x 12
+eql x w
+eql x 0
+mul y 0
+add y 25
+mul y x
+add y 1
+mul z y
+mul y 0
+add y w
+add y 4
+mul y x
+add z y
+inp w
+mul x 0
+add x z
+mod x 26
+div z 1
+add x 12
+eql x w
+eql x 0
+mul y 0
+add y 25
+mul y x
+add y 1
+mul z y
+mul y 0
+add y w
+add y 2
+mul y x
+add z y
+inp w
+mul x 0
+add x z
+mod x 26
+div z 26
+add x -9
+eql x w
+eql x 0
+mul y 0
+add y 25
+mul y x
+add y 1
+mul z y
+mul y 0
+add y w
+add y 5
+mul y x
+add z y
+inp w
+mul x 0
+add x z
+mod x 26
+div z 26
+add x -9
+eql x w
+eql x 0
+mul y 0
+add y 25
+mul y x
+add y 1
+mul z y
+mul y 0
+add y w
+add y 1
+mul y x
+add z y
+inp w
+mul x 0
+add x z
+mod x 26
+div z 1
+add x 14
+eql x w
+eql x 0
+mul y 0
+add y 25
+mul y x
+add y 1
+mul z y
+mul y 0
+add y w
+add y 6
+mul y x
+add z y
+inp w
+mul x 0
+add x z
+mod x 26
+div z 1
+add x 14
+eql x w
+eql x 0
+mul y 0
+add y 25
+mul y x
+add y 1
+mul z y
+mul y 0
+add y w
+add y 11
+mul y x
+add z y
+inp w
+mul x 0
+add x z
+mod x 26
+div z 26
+add x -10
+eql x w
+eql x 0
+mul y 0
+add y 25
+mul y x
+add y 1
+mul z y
+mul y 0
+add y w
+add y 15
+mul y x
+add z y
+inp w
+mul x 0
+add x z
+mod x 26
+div z 1
+add x 15
+eql x w
+eql x 0
+mul y 0
+add y 25
+mul y x
+add y 1
+mul z y
+mul y 0
+add y w
+add y 7
+mul y x
+add z y
+inp w
+mul x 0
+add x z
+mod x 26
+div z 26
+add x -2
+eql x w
+eql x 0
+mul y 0
+add y 25
+mul y x
+add y 1
+mul z y
+mul y 0
+add y w
+add y 12
+mul y x
+add z y
+inp w
+mul x 0
+add x z
+mod x 26
+div z 1
+add x 11
+eql x w
+eql x 0
+mul y 0
+add y 25
+mul y x
+add y 1
+mul z y
+mul y 0
+add y w
+add y 15
+mul y x
+add z y
+inp w
+mul x 0
+add x z
+mod x 26
+div z 26
+add x -15
+eql x w
+eql x 0
+mul y 0
+add y 25
+mul y x
+add y 1
+mul z y
+mul y 0
+add y w
+add y 9
+mul y x
+add z y
+inp w
+mul x 0
+add x z
+mod x 26
+div z 26
+add x -9
+eql x w
+eql x 0
+mul y 0
+add y 25
+mul y x
+add y 1
+mul z y
+mul y 0
+add y w
+add y 12
+mul y x
+add z y
+inp w
+mul x 0
+add x z
+mod x 26
+div z 26
+add x -3
+eql x w
+eql x 0
+mul y 0
+add y 25
+mul y x
+add y 1
+mul z y
+mul y 0
+add y w
+add y 12
+mul y x
+add z y