Problem solving and algorithms