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