summary refs log tree commit diff homepage
diff options
context:
space:
mode:
-rw-r--r--2022/day11-1.awk58
1 files changed, 58 insertions, 0 deletions
diff --git a/2022/day11-1.awk b/2022/day11-1.awk
new file mode 100644
index 0000000..97a8148
--- /dev/null
+++ b/2022/day11-1.awk
@@ -0,0 +1,58 @@
+BEGIN {
+	FS = "[ :,]+";
+}
+/^Monkey/ {
+	m = $2;
+}
+/Starting items/ {
+	for (i = 4; i <= NF; ++i) {
+		items[m,len[m]++] = $i;
+	}
+}
+/Operation/ {
+	op[m] = $6;
+	const[m] = $7;
+}
+/Test/ {
+	test[m] = $5;
+}
+/If true/ {
+	true[m] = $7;
+}
+/If false/ {
+	false[m] = $7;
+}
+END {
+	for (n = 1; n <= 20; ++n) {
+		for (m = 0; test[m]; ++m) {
+			for (i = 0; i < len[m]; ++i) {
+				insp[m]++;
+				item = items[m,i];
+				delete items[m,i];
+				if (op[m] == "+") {
+					item += const[m];
+				} else if (op[m] == "*" && const[m] != "old") {
+					item *= const[m];
+				} else {
+					item *= item;
+				}
+				item = int(item/3);
+				if (item % test[m] == 0) {
+					items[true[m],len[true[m]]++] = item;
+				} else {
+					items[false[m],len[false[m]]++] = item;
+				}
+			}
+			len[m] = 0;
+		}
+	}
+	for (m = 0; test[m]; ++m) {
+		if (insp[m] > max1) {
+			max2 = max1;
+			max1 = insp[m];
+		} else if (insp[m] > max2) {
+			max2 = insp[m];
+		}
+	}
+	print max1 * max2;
+}