I wanted to solve these ones in bash, which I've been focussing on learning lately. First challenge was great, found a simple oneliner:
echo$((0$(tr-d'\n' < ./day1/input.txt)))
But part 2 was a nightmare. Super slow. Ended up using JS in the end, but would still love to know anyone's thoughts on how this could be optimised. Wasn't watching the clock but think it took >20 mins to run!
It's collecting previously computed frequencies in an array, and checking for the frequency in the array each time a new frequency is computed. Is it the maths that's likely to be so slow, or the looping, or both?
declare-itotal=0
seen=()found=
array_contains (){for i in"${seen[@]}";do
if[["$i"=="$1"]];then
return 0
fi
done
return 1
}while[[!$found]];do
for line in$(cat$1);do
total=$((${total}${line}))if array_contains "$total";then
echo"FOUND "$totalfound=1
break
else
echo'not found'fi
seen+=($total)done
done# ./main.sh input.txt
I'm a Sr. Software Engineer at Flashpoint. I specialize in Python and Go, building functional, practical, and maintainable web systems leveraging Kubernetes and the cloud. Blog opinions are my own.
Woah, this is awesome! Yeah the second parts always seem to need some fancier algorithmic trick to speed them up.
You might look into using an associative array, as those provide a much faster lookup time and you donβt have to loop through every value each time? I donβt know if that will be enough though.
I'm a Sr. Software Engineer at Flashpoint. I specialize in Python and Go, building functional, practical, and maintainable web systems leveraging Kubernetes and the cloud. Blog opinions are my own.
I wanted to solve these ones in bash, which I've been focussing on learning lately. First challenge was great, found a simple oneliner:
But part 2 was a nightmare. Super slow. Ended up using JS in the end, but would still love to know anyone's thoughts on how this could be optimised. Wasn't watching the clock but think it took >20 mins to run!
It's collecting previously computed frequencies in an array, and checking for the frequency in the array each time a new frequency is computed. Is it the maths that's likely to be so slow, or the looping, or both?
Woah, this is awesome! Yeah the second parts always seem to need some fancier algorithmic trick to speed them up.
You might look into using an associative array, as those provide a much faster lookup time and you donβt have to loop through every value each time? I donβt know if that will be enough though.
Unfortunately, associative arrays only appeared in Bash4. That's fine for Linux, but doesn't appear on Macs unless you manually install it (boo!).
Good caveat to note, thanks!
P.S. Getting Bash 4 on MacOS is a very good idea π¬