All Projects → alexhagiopol → Cracking The Coding Interview

alexhagiopol / Cracking The Coding Interview

Licence: bsd-3-clause
📚 C++ and Python solutions with automated tests for Cracking the Coding Interview 6th Edition.

Programming Languages

python
139335 projects - #7 most used programming language

Projects that are alternatives of or similar to Cracking The Coding Interview

Coding Ninjas Java Solutions
This will have solutions to all the problems that are included in Coding Ninja's 2020 Java Course. Star the repo if you like it.
Stars: ✭ 32 (-91.92%)
Mutual labels:  sorting-algorithms, dynamic-programming, arrays, strings, graphs
algoexpert
AlgoExpert is an online platform that helps software engineers to prepare for coding and technical interviews.
Stars: ✭ 8 (-97.98%)
Mutual labels:  graphs, strings, recursion, arrays, dynamic-programming
Dsa Geeksclasses
DSA-Self Paced With Doubt Assistance Course Solutions in Python (Python 3)
Stars: ✭ 137 (-65.4%)
Mutual labels:  algorithms, sorting-algorithms, dynamic-programming, recursion, arrays
Algorithms
A collection of algorithms and data structures
Stars: ✭ 11,553 (+2817.42%)
Mutual labels:  algorithms, sorting-algorithms, dynamic-programming, strings
Algodeck
An Open-Source Collection of 200+ Algorithmic Flash Cards to Help you Preparing your Algorithm & Data Structure Interview 💯
Stars: ✭ 4,441 (+1021.46%)
Mutual labels:  algorithms, sorting-algorithms, dynamic-programming, recursion
Java-Questions-and-Solutions
This repository aims to solve and create new problems from different spheres of coding. A path to help students to get access to solutions and discuss their doubts.
Stars: ✭ 34 (-91.41%)
Mutual labels:  graphs, sorting-algorithms, arrays, dynamic-programming
Data-Structures-Algorithms-Handbook
A series of important questions with solutions to crack the coding interview and ace it!
Stars: ✭ 30 (-92.42%)
Mutual labels:  strings, recursion, sorting-algorithms, dynamic-programming
Project Euler Solutions
Runnable code for solving Project Euler problems in Java, Python, Mathematica, Haskell.
Stars: ✭ 1,374 (+246.97%)
Mutual labels:  algorithms, dynamic-programming, recursion
Java
All Algorithms implemented in Java
Stars: ✭ 42,893 (+10731.57%)
Mutual labels:  algorithms, search, sorting-algorithms
Data Structures With Go
Data Structures with Go Language
Stars: ✭ 121 (-69.44%)
Mutual labels:  algorithms, sorting-algorithms, arrays
Data Structures Algorithms
My implementation of 85+ popular data structures and algorithms and interview questions in Python 3 and C++
Stars: ✭ 273 (-31.06%)
Mutual labels:  dynamic-programming, arrays, strings
Data structure and algorithms library
A collection of classical algorithms and data-structures implementation in C++ for coding interview and competitive programming
Stars: ✭ 133 (-66.41%)
Mutual labels:  algorithms, sorting-algorithms, dynamic-programming
Algorithms
A collection of common algorithms and data structures implemented in java, c++, and python.
Stars: ✭ 142 (-64.14%)
Mutual labels:  algorithms, sorting-algorithms, dynamic-programming
Coding Ninjas Data Structures And Algorithms In Python
Solved problems and assignments of DSA course taught by Coding Ninjas team
Stars: ✭ 70 (-82.32%)
Mutual labels:  algorithms, recursion, graphs
Algorithm Notes
Comprehensive algorithms solution to help engineers prepare their interviews and future study
Stars: ✭ 44 (-88.89%)
Mutual labels:  algorithms, sorting-algorithms, dynamic-programming
Algods
Implementation of Algorithms and Data Structures, Problems and Solutions
Stars: ✭ 3,295 (+732.07%)
Mutual labels:  algorithms, sorting-algorithms, dynamic-programming
interview-cookbook
A playground for learning DataStructures, Algorithms, and Object-Oriented Concepts.
Stars: ✭ 25 (-93.69%)
Mutual labels:  recursion, sorting-algorithms, arrays
Algorithm-Implementation
This is our effort to collect the best implementations to tough algorithms. All codes are written in c++.
Stars: ✭ 16 (-95.96%)
Mutual labels:  strings, sorting-algorithms, arrays
Algo Tree
Algo-Tree is a collection of Algorithms and data structures which are fundamentals to efficient code and good software design. Creating and designing excellent algorithms is required for being an exemplary programmer. It contains solutions in various languages such as C++, Python and Java.
Stars: ✭ 166 (-58.08%)
Mutual labels:  sorting-algorithms, dynamic-programming, recursion
Competitive Programming Repository
Competitive Programming templates that I used during the past few years.
Stars: ✭ 367 (-7.32%)
Mutual labels:  algorithms, dynamic-programming, graphs

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 C++ and Python 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 C++ solution has unit tests using the C++ Catch framework, and every Python solution has unit tests using the Python unittest framework. We enforce test correctness 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

C++ Solutions:

  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: 4 / 6 complete.
  5. Chapter 4 - Trees and Graphs: 11 / 12 complete.
  6. Chapter 5 - Bit Manipulation: 7 / 8 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: 8 / 14 complete.
  10. Chapter 9 - System Design and Scalability: 0 / 8 complete.
  11. Chapter 10 - Sorting and Searching: 10 / 11 complete.
  12. Chapter 11 - Testing: 0 / 6 complete.
  13. Chapter 12 - C and C++: 10 / 11
  14. Chapter 13 - Java: N/A
  15. Chapter 14 - Databases: 0 / 7 complete.
  16. Chapter 15 - Threads and Locks: 0 / 4 complete.
  17. Chapter 16 - Moderate: 11 / 26 complete.
  18. Chapter 17 - Hard: 1 / 26 complete.
  19. Miscellaneous Exercises: 2 complete.

C++ Total: 81 solutions complete.

Python Solutions:

  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 / 8 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: 0 / 8 complete.
  11. Chapter 10 - Sorting and Searching: 1 / 11 complete.
  12. Chapter 11 - Testing: 0 / 6 complete.
  13. Chapter 12 - C and C++: N/A
  14. Chapter 13 - Java: N/A
  15. Chapter 14 - Databases: 0 / 7 complete.
  16. Chapter 15 - Threads and Locks: N/A
  17. Chapter 16 - Moderate: 2 / 26 complete.
  18. Chapter 17 - Hard: 3 / 26 complete.

Python Total: 58 solutions complete.

Grand Total: 139 unique solutions complete.

Building:

Mac:

Mac usage requires installing 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 ctci
cd ctci
make configure-mac

Ubuntu:

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

Windows:

For Windows users, I recommend developing this project using the Windows Subsystem for Linux (WSL) feature of Windows 10 and then following the Ubuntu build and testing instructions inside WSL. This recommendation is due to the use of Ubuntu, CMake, and makefile based build and execution systems on the servers that automatically test changes to the code. For more on Windows development, see the Appendix section at the end of this page.

Testing:

Testing is the most important part of this project: only the unit tests define the problem being solved. In the root directory, execute the following to run all tests in Python and C++:

make test

make test is the command I use most while developing this project. My workflow follows:

  1. I read a problem and encode the problem definition by implementing its unit tests.
  2. I execute make test to see where the project fails to satisfy the unit tests.
  3. I add to the implementation of the problem solution until make test succeeds.

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, so PRs are welcome. There is much to do because each solution needs its own small dataset and infrastructure in order to be tested. 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.

Appendix: Windows Development

On my own Windows machine, I develop using CLion running natively in Windows and test the code using make test in a WSL terminal window. For users who do not want to use WSL, I have developed the build and test methodology below:

Building

The project can be developed purely on Windows without WSL by using Visual Studio 2017. First clone the code:

git clone https://github.com/alexhagiopol/cracking-the-coding-interview.git
cd ctci
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.

Testing

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
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].