April 2017 - Huge Update!
Overhauled to now include 120 challenges and solutions and added Anki Flash Cards.
Also included are unit tested reference implementations of various data structures and algorithms.
interactive-coding-challenges
Continually updated, interactive and test-driven coding challenges.
Challenges focus on algorithms and data structures found in coding interviews.
Each challenge has one or more reference solutions that are:
- Fully functional
- Unit tested
- Easy-to-understand
Challenges will soon provide on-demand incremental hints to help you arrive at the optimal solution.
Notebooks also detail:
- Constraints
- Test cases
- Algorithms
- Big-O time and space complexities
Challenge Solutions
Anki Flashcards: Coding and Design
The provided Anki flashcard deck uses spaced repetition to help you retain key concepts.
Great for use while on-the-go.
Design Resource: The System Design Primer
Looking for resources to help you prep for the System Design and Object-Oriented Design interviews?
Check out the sister repo The System Design Primer, which contains additional Anki decks:
Notebook Structure
Each challenge has two notebooks, a challenge notebook with unit tests for you to solve and a solution notebook for reference.
Problem Statement
- States the problem to solve.
Constraints
- Describes any constraints or assumptions.
Test Cases
- Describes the general and edge test cases that will be evaluated in the unit test.
Algorithm
- [Challenge Notebook] Empty, refer to the solution notebook algorithm section if you need a hint.
- [Solution Notebook] One or more algorithm solution discussions, with Big-O time and space complexities.
Hints
- [Challenge Notebook] Provides on-demand incremental hints to help you arrive at the optimal solution. Coming soon!
Code (Challenge: Implement Me!)
- [Challenge Notebook] Skeleton code for you to implement.
- [Solution Notebook] One or more reference solutions.
Unit Test
- [Challenge Notebook] Unit test for your code. Expected to fail until you solve the challenge.
- [Solution Notebook] Unit test for the reference solution(s).
Index
Challenges Categories
Format: Challenge Category - Number of Challenges
Total number of challenges: 120
Reference Implementations: Data Structures
Unit tested, fully functional implementations of the following data structures:
Reference Implementations: Algorithms
Unit tested, fully functional implementations of the following algorithms:
Reference Implementations: TODO
Installing and Running Challenges
Misc
Challenges
Arrays and Strings
Linked Lists
Stacks and Queues
Graphs and Trees
Sorting
Recursion and Dynamic Programming
Mathematics and Probability
Bit Manipulation
Online Judges
Repo Structure
interactive-coding-challenges # Repo
├─ arrays_strings # Category of challenges
│ ├─ rotation # Challenge folder
│ │ ├─ rotation_challenge.ipynb # Challenge notebook
│ │ ├─ rotation_solution.ipynb # Solution notebook
│ │ ├─ test_rotation.py # Unit test*
│ ├─ compress
│ │ ├─ compress_challenge.ipynb
│ │ ├─ compress_solution.ipynb
│ │ ├─ test_compress.py
│ ├─ ...
├─ linked_lists
│ ├─ palindrome
│ │ └─ ...
│ ├─ ...
├─ ...
*The notebooks (.pynb) read/write the associated unit test (.py) file.
Notebook Installation
IPython Notebook
If you already have Python installed and are familiar with installing packages, you can get IPython Notebook with pip:
pip install "ipython[notebook]"
If you run into an issue about pyzmq, refer to the following Stack Overflow post and run:
pip uninstall ipython
pip install "ipython[all]"
As an alternative, you can also use the provided requirements.txt
file:
pip install -r requirements.txt
For detailed instructions, scripts, and tools to more optimally set up your development environment, check out the dev-setup repo.
For more details on notebook installation, follow the directions here.
More information on IPython/Jupyter Notebooks can be found here.
Nose Tests
Install nose using setuptools/distribute:
easy_install nose
or
pip install nose
More information on Nose can be found here.
Running Challenges
Notebooks
Challenges are provided in the form of IPython/Jupyter Notebooks and have been tested with Python 2.7 and Python 3.x.
If you need to install IPython/Jupyter Notebook, see the Notebook Installation section.
- This README contains links to nbviewer, which hosts static notebooks of the repo's contents
- To interact with or to modify elements within the dynamic notebooks, refer to the instructions below
Run the notebook of challenges:
$ git clone http://ift.tt/2nS28Nm
$ cd interactive-coding-challenges
$ jupyter notebook
This will launch your web browser with the list of challenge categories:
- Navigate to the Challenge Notebook you wish to solve
- Run the cells within the challenge notebook (Cell->Run All)
- This will result in an expected unit test error
- Solve the challenge and verify it passes the unit test
- Check out the accompanying Solution Notebook for further discussion
To debug your solution with pdb, refer to the following ticket.
Note: If your solution is different from those listed in the Solution Notebook, consider submitting a pull request so others can benefit from your work. Review the Contributing Guidelines for details.
Future Development
Challenges, solutions, and unit tests are presented in the form of IPython/Jupyter Notebooks.
- Notebooks currently contain mostly Python solutions (tested on both Python 2.7 and Python 3.x), but can be extended to include 40+ supported languages
- Repo will be continually updated with new solutions and challenges
- Contributions are welcome!
Contributing
Contributions are welcome!
Review the Contributing Guidelines for details on how to:
- Submit issues
- Add solutions to existing challenges
- Add new challenges
Credits
Resources
Images
Contact Info
Feel free to contact me to discuss any issues, questions, or comments.
My contact info can be found on my GitHub page.
License
Copyright 2015 Donne Martin
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://ift.tt/jtTJvY
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
from Hacker News http://ift.tt/YV9WJO
via IFTTT