As a software developer, I often find that it’s easy to become immersed in my current projects without ever stopping to sharpen the tools in my developer toolbox. Learning to approach problems through a variety of methods is a valuable skill in developing elegant, efficient solutions. I’ve compiled a short list of websites featuring problem sets, competitions, and unique solution requirements to act as a resource for those programmers looking to get a little more out of their code. I hope it’s useful!
1. Code Chef
CodeChef holds monthly competitions in both India and the United States, and each consists of 6-8 problems of varying difficulty levels. These contests encourage participants to write elegant code by placing restrictions on the execution time and source code file size for each problem. Due to the restriction on execution time, most participants use compiled languages for their solutions. However, solutions from a wide range of languages are accepted.
2. Code Golf
Code Golf offers a unique approach to solving puzzles, as its objective is to generate solutions in the least number of keystrokes. This criteria challenges programmers to develop efficient solutions and requires that they develop both their problem-solving abilities and programming knowledge.
Languages: Python, Perl, PHP, Ruby
The crew at Facebook has quite a few interesting puzzles to help satisfy your appetite. In fact, they've cleverly labeled the difficulties as hors d'oeuvre, snack, meal, and buffet to suppress your hunger as you develop your solutions. There's also a Facebook application that allows you to show off your progress on your profile!
Languages: C/C++, Java, Python, Perl, PHP, Ruby, Haskell, Erlang, OCaml
Project Euler presents a series of mathematical and computer programming puzzles with varying difficulty levels. To allow more developers to participate, the problems are designed in a "chain" style so that easier puzzles will introduce concepts that are useful in harder ones.
The UVa Online Judge website features a robust set of problems along with periodic contests to gauge the skill level of participants.
Languages: Varies by Contest