Pro/g/ramming Challenges v1.4ε

  1. Name generator (+ credentials)
  2. Higher/lower, heads/tails
  3. Temperature converter
  4. Calculate age in seconds (with leap years)
  5. Encryption/decryption algorithm
  6. FizzBuzz
  7. Rock, paper, scissors (+ lizard, Spock)
  8. Project Euler (in every language you know)
  9. Hangman
  10. Love calculator
  11. Random sentence generator
  12. Password/passphrase generator
  13. Internet time ((S)NTP)
  14. Haiku generator
  15. Magic eight ball
  16. Collatz conjecture
  17. Reverse a string
  18. Eulerian path
  19. Simple file explorer
  20. Count words in a string (lines, sentences, paragraphs, typos, &c.)
  21. Minesweeper
  22. Connect four
  23. BMI calculator
  24. 4chan thread/image downloader
  25. Sudoku generator/solver
  26. Maze generator/solver (random graphs/trees)
  27. Radix (base) converter
  28. Picross solver
  29. Fibonacci sequence
  30. Factorial
  31. Cipher encryption/decryption tool †
  32. Blackjack
  33. Dungeons & Dragons with AI
  34. Generate ASCII tree
  35. Genetic algorithms on polygons
  36. Benford’s law
  37. Currency converter (+ various units, comodities, etc.; + history)
  38. Static website generator
  39. Crossword game
  40. Scientific calculator (CLI or GUI)
  41. Perlin noise
  42. Image viewer
  43. ASCII digital clock
  44. Dijkstra’s algorithm
  45. Text/Morse code translator (+ sound)
  46. Tic-tac-toe
  47. Snake game
  48. FTP client (+ server)
  49. Telnet server (+ client, netcat clone?)
  50. IMP interpreter
  51. Tetris
  52. Conway’s Game of Life (other cell. automata)
  53. Web crawler
  54. Text editor
  55. RSS feed reader
  56. RPN calculator
  57. Mandelbrot set (+ other fractals)
  58. Sorting algorithms (+ visualisation)
  59. Custom markup → HTML converter
  60. N queens problem
  61. Flow in a network (Ford-Fulkerson algo.)
  62. Credential validator (phone, email, &c.)
  63. Linked list (single, double)
  64. Mastermind
  65. Random image generator (parametric)
  66. Ulam spiral
  67. Klingon translator
  68. Prime number generator using a sieve
  69. Markov chains (random text generation)
  70. Graphical analog clock
  71. Two languages communicating with each other (C++ & Java, Lisp & Python, &c.)
  72. Triangle number calculator
  73. Typing speed calculator
  74. Name art in ASCII
  75. Towers of Hanoi (more disks, more poles)
  76. Quine
  77. IRC bot
  78. Brainfuck interpreter (+ optimization, multiple targets)
  79. Knight’s tour
  80. Chip-8 emulator
  81. Geekcode generator (3.12)
  82. Define, translate & rotate a polygon (+ other affine transformations)
  83. Pong with variable vectors
  84. Battleships with AI
  85. Simple paint program
  86. TCP chat with basic encryption
  87. Incremental economy simulator (à la Time of Exploration)
  88. Encrypting data in images (steganography)
  89. Pascal’s triangle
  90. Sine wave generator from pseudorandom numbers
  91. Flappy Bird
  92. Fourier transform (fast or ‘slow’; + visualisation)
  93. Method ringing simulator
  94. Binary search (n-ary)
  95. Nintendo Oil Panic
  96. Sierpiński triangle
  97. Dot & cross product of two vectors (exterior product)
  98. Little Man computer simulation
  99. Lisp interpreter
  100. Enigma simulator with a configuration file (+ decrypt messages without known settings)

Notes in parentheses next to individual problems may serve as an inspiration or a pointer where to look if you’re lost or helpless.

† Implement at least one of Rumkin Collection: rumkin.com/tools/cipher

‡ N.B.: www.mjt.me.uk/posts/falsehoods-programmers-believe-about-addresses/

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, find a special case that may be easier to design and implement. If it seems too easy, generalise, invent more complicated variations, 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 nonidiomatic code as long as you understand what’s going on. You can clear up the mess later.

  4. Test

    Write tests that check 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 and repeat. Again, commit often lest your progress disappear into the abbys.

  5. Reimplement

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

Generally Useful Resources™:
Google, Wikipedia, Stack Overflow
Literature:
  • Knuth: The Art of Computer Programming “TAOCP”
  • Skiena: The Algorithm Design Manual
  • Cormen et al.: Introduction to Algorithms “CLR(S)”
  • 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