tshahpuri / cracking-the-coding-interview

:books: Python and C++ solutions with automated unit tests.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Cracking The Coding Interview Solutions with Automated Unit Tests

  • ✅ C++ Solutions
  • ✅ Python Solutions
  • ✅ Automated Unit Tests
  • ✅ Active Development
  • ✅ Multiplatform Support: Mac, Linux, and Windows

Introduction

This repo contains Python and C++ solutions for Gayle Laakmann McDowell's Cracking the Coding Interview 6th Edition. Admittedly, there are other GitHub repositories with solutions for this book. But how do you know that their code is actually correct? If it's untested, then you don't!

In this project, every Python solution has unit tests using the Python unittest framework and every C++ solution has unit tests using the C++ Catch framework. We enforce the tests automatically using continuous integration servers ensuring that the solutions are made of living code that gets executed and tested on every single commit. To my knowledge, this is the Internet's only solutions repository with this level of testing rigor: >90% automated test coverage means you can reference and contribute solutions with confidence.

Table of Contents

  1. Python Unit tests
  2. Chapter 1 - Arrays and Strings: 9 / 9 complete.
  3. Chapter 2 - Linked Lists: 8 / 8 complete.
  4. Chapter 3 - Stacks and Queues: 6 / 6 complete.
  5. Chapter 4 - Trees and Graphs: 11 / 12 complete.
  6. Chapter 5 - Bit Manipulation: 7 / 7 complete.
  7. Chapter 6 - Math and Logic: 0 / 10 complete.
  8. Chapter 7 - Object Oriented Design: 0 / 12 complete.
  9. Chapter 8 - Recursion and Dynamic Programming: 11 / 14 complete.
  10. Chapter 9 - System Design and Scalability: N/A
  11. Chapter 10 - Sorting and Searching: 1 / 11 complete.
  12. Chapter 11 - Testing: N/A
  13. Chapter 12 - C and C++: N/A
  14. Chapter 13 - Java: N/A
  15. Chapter 14 - Databases: N/A
  16. Chapter 15 - Threads and Locks: 0 / 4 complete.
  17. Chapter 16 - Moderate: 1 / 26 complete.
  18. Chapter 17 - Hard: 3 / 26 complete.

Total: 56 / 145

  1. C++ Unit Tests
  2. Chapter 1 - Arrays and Strings: 9 / 9 complete.
  3. Chapter 2 - Linked Lists: 8 / 8 complete.
  4. Chapter 3 - Stacks and Queues: 2 / 6 complete.
  5. Chapter 4 - Trees and Graphs: 1 / 12 complete.
  6. Chapter 5 - Bit Manipulation: 4 / 7 complete.
  7. Chapter 6 - Math and Logic: 0 / 10 complete.
  8. Chapter 7 - Object Oriented Design: 0 / 12 complete.
  9. Chapter 8 - Recursion and Dynamic Programming: 5 / 14 complete.
  10. Chapter 9 - System Design and Scalability: N/A
  11. Chapter 10 - Sorting and Searching: 1 / 11 complete.
  12. Chapter 11 - Testing: N/A
  13. Chapter 12 - C and C++: 2 / 6
  14. Chapter 13 - Java: N/A
  15. Chapter 14 - Databases: N/A
  16. Chapter 15 - Threads and Locks: 0 / 4
  17. Chapter 16 - Moderate: 0 / 26 complete.
  18. Chapter 17 - Hard: 0 / 26 complete.

Total: 32 / 151

Build Process

Mac:

Mac usage requires the package managers Homebrew and Pip which is done for you in the Makefile:

git clone https://github.com/alexhagiopol/cracking-the-coding-interview.git
cd cracking-the-coding-interview
make configure-mac

Ubuntu:

git clone https://github.com/alexhagiopol/cracking-the-coding-interview.git
cd cracking-the-coding-interview
make configure-ubuntu

Windows:

The project can be developed on Windows using Visual Studio 2017. First get the code:

git clone https://github.com/alexhagiopol/cracking-the-coding-interview.git
cd cracking-the-coding-interview
git submodule update --init

Then, install Python3 and numpy using your method of choice. I prefer installing Python3 and pip3 from the official website then installing numpy via pip:

pip install numpy

Then, open the project in Visual Studio 2017 which has CMake support. I've found that best the workflow is to use Visual Studio to edit code and use debugging functionality. Before building the code, you must follow these instructions to tell Visual Studio to download PDBs it needs. Additionally, this article describes Visual Studio CMake support in more detail if you're interested. A CMakeSettings.json file in the root project directory sets the location of the Visual Studio build folder to be inside the root folder of the project.

Running Tests:

Mac & Ubuntu:

In the root directory, execute the following to run all tests in Python and C++:

make test

Windows:

Running the tests and seeing their output is best done from a PowerShell window since VisualStudio in CMake mode does not allow the console output of the tests.exe and tests.py files to remain visible even when pressing CTRL + F5 as described in this post which applies to "normal" Visual Studio use. I am monitoring the situation re: Visual Studio, and when I find better solutions I will implement them or post them. If you know of something better, please contact me.

In the meantime, from the project root directory, you can run the Python tests using ...

python tests.py

... and you can run the C++ tests using ...

.\build\x64-Debug\tests.exe

Optional: Generating a Test Coverage % Report Locally (Python support only):

This will show exactly which lines are not covered by tests in each Python source file:

pip install coverage
make test_coverage

Contributing

The goal of this project is to write a tested Python and C++ solution for every problem in the 6th edition of the textbook. I definitely need help! PRs are of course very welcome. The work has become quite time consuming because each solution is living code that actually gets executed. Thus, each solution needs its own small dataset and infrastructure in order to be tested. Just writing the test for a problem is often harder than solving the problem itself. Here are some ways you can help:

  1. Fixing bugs 🐛.
  2. Solving or improving solutions to problems in either language (see the completion progress in the table of contents).
  3. Adding more unit tests to increase the test coverage %.
  4. Implementing automated C++ test coverage measurement using gcov.
  5. Integrating automated test coverage % reporting for both Python and C++ via Coveralls.
  6. Adding prose solution descriptions for problems that don't have them.

If you have any contributions, please make a PR to the master branch. Feel free to message me for clarification on any of the above items.

About

:books: Python and C++ solutions with automated unit tests.

License:Other


Languages

Language:Python 55.4%Language:C++ 42.0%Language:CMake 1.2%Language:C 0.8%Language:Makefile 0.6%