I'll offer ways I deal with this frustration. One, I use it as an opportunity to connect with real world programming. Although programming is very creative and we want to encourage expression, sometimes you have to meet some requirements and deal with constraints. Two, I tell students in advance that these particular lessons require reading and following directions very carefully. I let them know when and where they can apply their new skills any way they wish. Three, I might take the opportunity to reinforce the idea of trade-offs from earlier in the year. If we want something to verify work and provide a reward, can it deal with infinite possible solutions? I might even try to sneak in the word, heuristic.... Lastly, I will give students permission to move on without the 'finish' reward if I am satisfied with their performance.