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:
M | day11/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);