a better /dpt/ roller
Roll: #

A concise how-to guide
  1. Set up a repository

    git init should do the job. Commit early and often.

  2. Understand the problem

    Use Generally Useful Resources™ to find out more information about what you're facing. If you need, use paper, draw diagrams, bite pencils.

    If the problem seems too difficult, try to simplify it and find a special case that may be easier to design and implement. If it seems too easy, generalize it; invent more complicated variations, or perhaps try to combine with other problems.

  3. Implement

    Start with whatever language you know best or feel most comfortable with. If the problem is easy, pick a language you've never used before or one that you don't know too well yet. Don't be afraid to write ugly or non-idiomatic code as long as you understand what's going on. You can clean up the mess later.

  4. Test

    Write tests checking both the ordinary and the exceptional cases of your program. Compile/interpret/eval whatever you've written and run the tests. Find bugs; fix them; repeat. Again, commit often, lest your progress vanish into the abyss.

  5. Reimplement

    Now that you have a reference implementation, you can go wild! Reimplement the task in a different language this time, perhaps one that you've been meaning to learn for years, Try to achieve the same outcome using different techniques or different idioms. Try to make the code as short as possible -- or the contrary.

Generally Useful Resources™ Google, Wikipedia, Stack Overflow, the web in general - don't ask stupid questions, look them up first

Literature

  • Knuth: The Art of Computer Programming (TAOCP)
  • Skiena: The Algorithm Design Manual
  • Cormen et al.: Introduction to Algorithms (CLR, CLRS)
  • Russell, Norvig: Artificial Intelligence: A Modern Approach
  • Abelson, Sussman: Structure and Interpretation of Computer Programs (SICP)

See also

  • hackerrank.com
  • codechef.com
  • codefights.com
  • projecteuler,net
  • ctftime.org
  • rosettacode.org
  • vindinium.org

Difficulty Each "bonus" you choose to implement adds one level of difficulty, more or less. But note that the difficulty levels are highly subjective! Do not treat them as final truths.

/dpt/ challenge list version
Based on list version 1.4ε, made by Anonymous in January 2015
This tool made by some random jackass in June 2015
Github repo