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
Ryan is an engineer in the Sacramento Area with a focus in Python, Ruby, and Rust. Bash/Python Exercism mentor. Coding, physics, calculus, music, woodworking. Looking for work!
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.
Ryan is an engineer in the Sacramento Area with a focus in Python, Ruby, and Rust. Bash/Python Exercism mentor. Coding, physics, calculus, music, woodworking. Looking for work!
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 😬