Solving NP-hard and NP-complete problems (for fun)