algorithmic thinking logical reasoning