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; }