advent-of-code-2022

My solutions for AoC 2022
git clone https://git.sr.ht/~jbauer/advent-of-code-2022
Log | Files | Refs | README | LICENSE

commit cff39c9c29e8200f1e9ed1a293e894153c19ee87
parent 843de3f009d6f87036f4e1851ff6edc8a96c04a3
Author: Jake Bauer <jbauer@paritybit.ca>
Date:   Fri, 16 Dec 2022 12:43:38 -0500

Finished Day 11 because apparently I still did care

Diffstat:
Mday11/main.c | 74++++++++++++++++++++++++++++----------------------------------------------
1 file changed, 28 insertions(+), 46 deletions(-)

diff --git a/day11/main.c b/day11/main.c @@ -4,7 +4,7 @@ #include <err.h> struct monkey { - int items[32]; + unsigned long items[32]; int numItems; char operator; int operand; @@ -17,29 +17,12 @@ struct monkey { void throwItem(struct monkey **monkeys, int from, int to, int itemIndex) { - printf("Throwing %d from %d to %d\n", monkeys[from]->items[itemIndex], from, to); - printf("Before:\n Monkey %d: ", from); - for (int i = 0; i < monkeys[from]->numItems; i++) - printf("%d ", monkeys[from]->items[i]); - printf("\n Monkey %d: ", to); - for (int i = 0; i < monkeys[to]->numItems; i++) - printf("%d ", monkeys[to]->items[i]); - printf("\n"); - monkeys[to]->items[monkeys[to]->numItems++] = monkeys[from]->items[itemIndex]; for (int i = itemIndex; i < monkeys[from]->numItems; i++) { monkeys[from]->items[i] = monkeys[from]->items[i+1]; } monkeys[from]->numItems--; - - printf("After:\n Monkey %d: ", from); - for (int i = 0; i < monkeys[from]->numItems; i++) - printf("%d ", monkeys[from]->items[i]); - printf("\n Monkey %d: ", to); - for (int i = 0; i < monkeys[to]->numItems; i++) - printf("%d ", monkeys[to]->items[i]); - printf("\n"); } int @@ -49,116 +32,115 @@ main (void) for (int i = 0; i < 8; i++) monkeys[i] = (struct monkey *)malloc(sizeof(struct monkey)); - int items0[] = {85, 77, 77}; + unsigned long items0[] = {85, 77, 77}; monkeys[0]->numItems = 3; for (int i = 0; i < monkeys[0]->numItems; i++) - { monkeys[0]->items[i] = items0[i]; - } - monkeys[0]->operator = 'm'; + monkeys[0]->operator = '*'; monkeys[0]->operand = 7; monkeys[0]->modulus = 19; monkeys[0]->trueMonkey = 6; monkeys[0]->falseMonkey = 7; monkeys[0]->inspections = 0; - int items1[] = {80, 99}; + unsigned long items1[] = {80, 99}; monkeys[1]->numItems = 2; for (int i = 0; i < monkeys[1]->numItems; i++) monkeys[1]->items[i] = items1[i]; - monkeys[1]->operator = 'm'; + monkeys[1]->operator = '*'; monkeys[1]->operand = 11; monkeys[1]->modulus = 3; monkeys[1]->trueMonkey = 3; monkeys[1]->falseMonkey = 5; monkeys[1]->inspections = 0; - int items2[] = {74, 60, 74, 63, 86, 92, 80}; + unsigned long items2[] = {74, 60, 74, 63, 86, 92, 80}; monkeys[2]->numItems = 7; for (int i = 0; i < monkeys[2]->numItems; i++) monkeys[2]->items[i] = items2[i]; - monkeys[2]->operator = 'a'; - monkeys[2]->operand = 18; + monkeys[2]->operator = '+'; + monkeys[2]->operand = 8; monkeys[2]->modulus = 13; monkeys[2]->trueMonkey = 0; monkeys[2]->falseMonkey = 6; monkeys[2]->inspections = 0; - int items3[] = {71, 58, 93, 65, 80, 68, 54, 71}; + unsigned long items3[] = {71, 58, 93, 65, 80, 68, 54, 71}; monkeys[3]->numItems = 8; for (int i = 0; i < monkeys[3]->numItems; i++) monkeys[3]->items[i] = items3[i]; - monkeys[3]->operator = 'a'; + monkeys[3]->operator = '+'; monkeys[3]->operand = 7; monkeys[3]->modulus = 7; monkeys[3]->trueMonkey = 2; monkeys[3]->falseMonkey = 4; monkeys[3]->inspections = 0; - int items4[] = {97, 56, 79, 65, 58}; + unsigned long items4[] = {97, 56, 79, 65, 58}; monkeys[4]->numItems = 5; for (int i = 0; i < monkeys[4]->numItems; i++) monkeys[4]->items[i] = items4[i]; - monkeys[4]->operator = 'a'; + monkeys[4]->operator = '+'; monkeys[4]->operand = 5; monkeys[4]->modulus = 5; monkeys[4]->trueMonkey = 2; monkeys[4]->falseMonkey = 0; monkeys[4]->inspections = 0; - int items5[] = {77}; + unsigned long items5[] = {77}; monkeys[5]->numItems = 1; for (int i = 0; i < monkeys[5]->numItems; i++) monkeys[5]->items[i] = items5[i]; - monkeys[5]->operator = 'a'; + monkeys[5]->operator = '+'; monkeys[5]->operand = 4; monkeys[5]->modulus = 11; monkeys[5]->trueMonkey = 4; monkeys[5]->falseMonkey = 3; monkeys[5]->inspections = 0; - int items6[] = {99, 90, 84, 50}; + unsigned long items6[] = {99, 90, 84, 50}; monkeys[6]->numItems = 4; for (int i = 0; i < monkeys[6]->numItems; i++) monkeys[6]->items[i] = items6[i]; - monkeys[6]->operator = 'm'; + monkeys[6]->operator = '*'; monkeys[6]->operand = 0; monkeys[6]->modulus = 17; monkeys[6]->trueMonkey = 7; monkeys[6]->falseMonkey = 1; monkeys[6]->inspections = 0; - int items7[] = {50, 66, 61, 92, 64, 78}; + unsigned long items7[] = {50, 66, 61, 92, 64, 78}; monkeys[7]->numItems = 6; for (int i = 0; i < monkeys[7]->numItems; i++) monkeys[7]->items[i] = items7[i]; - monkeys[7]->operator = 'a'; + monkeys[7]->operator = '+'; monkeys[7]->operand = 3; monkeys[7]->modulus = 2; monkeys[7]->trueMonkey = 5; monkeys[7]->falseMonkey = 1; monkeys[7]->inspections = 0; - for(int i = 0; i < 20; i++) + // I just used an external calculator + unsigned long lcm = 9699690; + + /* for(int i = 0; i < 20; i++) */ + for(int i = 0; i < 10000; i++) { - printf("Round %d\n", i); for (int j = 0; j < 8; j++) { + monkeys[j]->inspections += monkeys[j]->numItems; for(int k = 0; k < monkeys[j]->numItems;) { - printf("Monkey %d inspecting %d\n", j, monkeys[j]->items[k]); - monkeys[j]->inspections++; - if (monkeys[j]->operator == 'm' && monkeys[j]->operand == 0) + if (monkeys[j]->operator == '*' && monkeys[j]->operand == 0) monkeys[j]->items[k] *= monkeys[j]->items[k]; - else if (monkeys[j]->operator == 'm') + else if (monkeys[j]->operator == '*') monkeys[j]->items[k] *= monkeys[j]->operand; else monkeys[j]->items[k] += monkeys[j]->operand; - printf("Dividing %d by 3 = ", monkeys[j]->items[k]); - monkeys[j]->items[k] /= 3; - printf("%d\n", monkeys[j]->items[k]); + /* monkeys[j]->items[k] /= 3; */ + monkeys[j]->items[k] %= lcm; if (monkeys[j]->items[k] % monkeys[j]->modulus == 0) throwItem(monkeys, j, monkeys[j]->trueMonkey, k);