51 lines
1.2 KiB
Awk
51 lines
1.2 KiB
Awk
#!/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
|
|
}
|