Part 2
This commit is contained in:
50
2024/day-7/solution-2.awk
Normal file
50
2024/day-7/solution-2.awk
Normal file
@ -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
|
||||||
|
}
|
Reference in New Issue
Block a user