diff --git a/2024/day-7/solution-2.awk b/2024/day-7/solution-2.awk new file mode 100644 index 0000000..281a5e1 --- /dev/null +++ b/2024/day-7/solution-2.awk @@ -0,0 +1,50 @@ +#!/usr/bin/env awk + +BEGIN { + FS = "[: ]" + total = 0 +} +{ + sum = $1 + num_opers = 3 # +, *, || + num_of_nums = NF - 2 + num_of_results = 1 + + # Create list of numbers + for (i = 3; i <= NF; i++) { + nums[i-2] = $i + } + results[1] = nums[1] + # Starting applying operator + # Starting from second number + # index range of num_of_results is for each operator + # 1 - num_of_results - addition + # num_of_results+1 - num_of_results*2 - multiplication + # num_of_results*2+1 - num_of_results*3 - concat + for (i = 2; i <= num_of_nums; i++) { + number = nums[i] + for (j = 1; j <= num_of_results; j++) { + element = results[j] + results[j+num_of_results] = element * number # Addition + results[j] = results[j] + number # Multiplication + results[j+num_of_results*2] = (element "" number) + 0 # Concat + } + num_of_results *= num_opers + } + expected = ( num_of_nums - 1 ) * num_opers + + # Check results + for (i=1; i <= num_of_results; i++) { + if ( results[i] == $1 ) { + start_val = i % num_of_nums + stack_num = (i - start_val) / num_of_nums + total = total + $1 + break + } + } + delete results + delete nums +} +END { + print total +}