{"id":15027338,"url":"https://github.com/adnanaziz/epijudge","last_synced_at":"2026-10-19T07:23:03.115Z","repository":{"id":38105297,"uuid":"114969824","full_name":"adnanaziz/EPIJudge","owner":"adnanaziz","description":"EPI Judge - Preview Release","archived":false,"fork":false,"pushed_at":"2024-08-16T10:21:24.000Z","size":91405,"stargazers_count":2920,"open_issues_count":81,"forks_count":1908,"subscribers_count":170,"default_branch":"master","last_synced_at":"2026-09-20T20:10:15.067Z","etag":null,"topics":["algorithms","cplusplus","elements-of-programming-interviews","interviewing","java","python"],"latest_commit_sha":null,"homepage":null,"language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/adnanaziz.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-12-21T06:15:15.000Z","updated_at":"2026-09-17T18:08:51.000Z","dependencies_parsed_at":"2024-11-19T06:21:11.394Z","dependency_job_id":null,"html_url":"https://github.com/adnanaziz/EPIJudge","commit_stats":{"total_commits":166,"total_committers":19,"mean_commits":8.736842105263158,"dds":0.4518072289156626,"last_synced_commit":"b736406dfb6e8e6be2612e8a57e710baf90a2d3e"},"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/adnanaziz/EPIJudge","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adnanaziz%2FEPIJudge","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adnanaziz%2FEPIJudge/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adnanaziz%2FEPIJudge/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adnanaziz%2FEPIJudge/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/adnanaziz","download_url":"https://codeload.github.com/adnanaziz/EPIJudge/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adnanaziz%2FEPIJudge/sbom","scorecard":{"id":167041,"data":{"date":"2025-08-11","repo":{"name":"github.com/adnanaziz/EPIJudge","commit":"b736406dfb6e8e6be2612e8a57e710baf90a2d3e"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.3,"checks":[{"name":"Code-Review","score":3,"reason":"Found 4/12 approved changesets -- score normalized to 3","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/test_cpp_cmake.yml:1","Warn: no topLevel permission defined: .github/workflows/test_java_make.yml:1","Warn: no topLevel permission defined: .github/workflows/test_python.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Binary-Artifacts","score":6,"reason":"binaries present in source code","details":["Warn: binary detected: epi_judge_java/epi/test_framework/console_color_32.dll:1","Warn: binary detected: epi_judge_java/epi/test_framework/console_color_64.dll:1","Warn: binary detected: epi_judge_java_solutions/epi/test_framework/console_color_32.dll:1","Warn: binary detected: epi_judge_java_solutions/epi/test_framework/console_color_64.dll:1"],"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"License","score":9,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Warn: project license file does not contain an FSF or OSI license."],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 24 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test_cpp_cmake.yml:43: update your workflow using https://app.stepsecurity.io/secureworkflow/adnanaziz/EPIJudge/test_cpp_cmake.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test_cpp_cmake.yml:46: update your workflow using https://app.stepsecurity.io/secureworkflow/adnanaziz/EPIJudge/test_cpp_cmake.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test_cpp_cmake.yml:95: update your workflow using https://app.stepsecurity.io/secureworkflow/adnanaziz/EPIJudge/test_cpp_cmake.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test_cpp_cmake.yml:98: update your workflow using https://app.stepsecurity.io/secureworkflow/adnanaziz/EPIJudge/test_cpp_cmake.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test_cpp_cmake.yml:140: update your workflow using https://app.stepsecurity.io/secureworkflow/adnanaziz/EPIJudge/test_cpp_cmake.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test_cpp_cmake.yml:143: update your workflow using https://app.stepsecurity.io/secureworkflow/adnanaziz/EPIJudge/test_cpp_cmake.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test_java_make.yml:40: update your workflow using https://app.stepsecurity.io/secureworkflow/adnanaziz/EPIJudge/test_java_make.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test_java_make.yml:42: update your workflow using https://app.stepsecurity.io/secureworkflow/adnanaziz/EPIJudge/test_java_make.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test_java_make.yml:46: update your workflow using https://app.stepsecurity.io/secureworkflow/adnanaziz/EPIJudge/test_java_make.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test_java_make.yml:75: update your workflow using https://app.stepsecurity.io/secureworkflow/adnanaziz/EPIJudge/test_java_make.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test_java_make.yml:77: update your workflow using https://app.stepsecurity.io/secureworkflow/adnanaziz/EPIJudge/test_java_make.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test_java_make.yml:81: update your workflow using https://app.stepsecurity.io/secureworkflow/adnanaziz/EPIJudge/test_java_make.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test_python.yml:31: update your workflow using https://app.stepsecurity.io/secureworkflow/adnanaziz/EPIJudge/test_python.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test_python.yml:33: update your workflow using https://app.stepsecurity.io/secureworkflow/adnanaziz/EPIJudge/test_python.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test_python.yml:63: update your workflow using https://app.stepsecurity.io/secureworkflow/adnanaziz/EPIJudge/test_python.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test_python.yml:65: update your workflow using https://app.stepsecurity.io/secureworkflow/adnanaziz/EPIJudge/test_python.yml/master?enable=pin","Warn: pipCommand not pinned by hash: .github/workflows/test_cpp_cmake.yml:52","Warn: pipCommand not pinned by hash: .github/workflows/test_cpp_cmake.yml:53","Warn: pipCommand not pinned by hash: .github/workflows/test_cpp_cmake.yml:149","Warn: pipCommand not pinned by hash: .github/workflows/test_cpp_cmake.yml:150","Warn: pipCommand not pinned by hash: .github/workflows/test_java_make.yml:52","Warn: pipCommand not pinned by hash: .github/workflows/test_java_make.yml:53","Warn: pipCommand not pinned by hash: .github/workflows/test_python.yml:38","Warn: pipCommand not pinned by hash: .github/workflows/test_python.yml:39","Warn: pipCommand not pinned by hash: .github/workflows/test_python.yml:70","Warn: pipCommand not pinned by hash: .github/workflows/test_python.yml:71","Info:   0 out of  16 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of  10 pipCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}}]},"last_synced_at":"2025-08-16T15:11:43.437Z","repository_id":38105297,"created_at":"2025-08-16T15:11:43.437Z","updated_at":"2025-08-16T15:11:43.437Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":344872684,"owners_count":38351013,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-10-03T21:59:58.778Z","status":"online","status_checked_at":"2026-10-19T02:00:06.414Z","response_time":53,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["algorithms","cplusplus","elements-of-programming-interviews","interviewing","java","python"],"created_at":"2024-09-24T20:06:14.934Z","updated_at":"2026-10-19T07:22:58.107Z","avatar_url":"https://github.com/adnanaziz.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# EPI Judge\n\n## Beta 5\n\n## Introduction\n\nEPI Judge is meant to serve as a companion to our book Elements of Programming Interviews. Specifically, this project consists of the following:\n\n- **Stub programs** for each problem in our book in Python, Java, and C++\n- **Test-cases** that cover common corner-case and performance bugs\n- A **framework** for running these tests on your implementation on your machine\n\n## Installation\n\nHere's how to download the judge:\n\n    $ git clone https://github.com/adnanaziz/EPIJudge.git\nIf you do not have `git`, here's a good [tutorial](https://www.atlassian.com/git/tutorials/install-git) on installing git itself.\n\n## Running the judge using IDEs\n\nCheck out these one minute videos to see how easy it is to get started with the judge.\n\n### Python\n\n[PyCharm](https://youtu.be/ImD_iI-uGYo), [Eclipse](https://youtu.be/rZ1qqwEXwQY), [NetBeans](https://youtu.be/Z41jW1TyZwY)\n\n### Java\n\n[IntelliJ IDEA](https://youtu.be/1BzHUpluQHM), [Eclipse](https://youtu.be/i9uz9Zazo0A)\n\n### C++\n\n[CLion](https://youtu.be/aHPDApyyYEg), [Visual Studio 2017](https://youtu.be/hgd8IIQpBEE)\n\n\n## Running the judge from the command line\n\n### Python\n\n    $ python3 \u003cprogram_name\u003e.py\n\n#### Java\n\nUse the [`Makefile`](https://github.com/adnanaziz/EPIJudge/blob/master/epi_judge_java/Makefile). \n\nCompile and run a specific program:\n\n    $ make \u003cprogram_name\u003e \nExample:\n\n    $ make Anagrams\nCompile and run the last program that you edited:\n\n\t$ make\n\n### C++\n\nYou can manually compile and run all programs by directly invoking GCC and Clang. \n\n    $ g++ -pthread -std=c++14 -O3 -o anagrams anagrams.cc\nYou can also use the provided Makefile: `make \u003cprogram_name\u003e`. You can also use CMake with the provided CMakeLists.txt file. \n\n\t$ make \nThe default Makefile target is the last edited file.\n\n    $ make anagrams\n\n\n## FAQ\n\n- How can I contact the authors? \n\nPlease feel free to send us questions and feedback -  `adnan.aziz@gmail.com` and `tsung.hsien.lee@gmail.com`\n\n- Help, my EPIJudge is not working, what should I do?\n\nIf you do have issues, e.g., with install or with buggy tests, feel free to reach out to us via email. Please be as detailed as you can: the ideal is if you can upload a screencast video of the issue to youtube; failing that, please upload screenshots.  The more detailed the description of the problem and your environment (OS, language version, IDE and version), the easier it’ll be for us to help you.\n\n- I'm new to programming, and don't have any kind of development environment, what should I do?\n\nThe IntelliJ Integrated Development environments described above are best-in-class, and have free versions that will work fine for the EPI Judge. They do not include the compilers. You can get the Java development environment from [Oracle](http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html), and the Python development environment from [Python.org](https://www.python.org/downloads/). For C++, you have multiple options. The simplest is to install [VisualStudio](https://code.visualstudio.com/download), which includes both the IDE and the compiler. Google is a good resource for installation help.\n\n- What compilers are supported for judge?\n  - C++\n    - Linux\n      - **GCC** 5.4.1 and newer\n      - **Clang** 4.0 and newer\n    - OS X  \n      - **Apple LLVM Clang** 9.0.0 and newer\n    - Windows\n      - **Visual Studio** 2017 and newer\n      - **MinGW** GCC 5.4.0 and newer\n      - **LXSS** (Windows Subsystem for Linux) GCC 5.4.0 and newer\n  - Java     \n    - **Java** 9 and newer\n  - Python\n    - **Python** 3.7 and newer\n   \n\n- What compilers are supported for solutions?\n  - C++\n      - Linux\n        - **GCC** 7.0.0 and newer\n        - **Clang** 5.0 and newer\n      - OS X  \n        - **Apple LLVM Clang** 9.0.0 and newer\n      - Windows\n      - **Visual Studio** 2017 and newer\n        - **MinGW** GCC 7.2.0 and newer\n        - **LXSS** (Windows Subsystem for Linux) GCC 7.2.0 and newer\n    - Java     \n      - **Java** 9 and newer\n    - Python\n      - **Python** 3.6 and newer \n\nLet us know if you managed to compile with an older version.\n\n- What does the UI look like?\n\nTake a look at this screenshot.\n\n\u003cimg src=\"http://elementsofprogramminginterviews.com/img/judge-ide-example.png\" width=\"600px\"\u003e\u003c/img\u003e\n\n- How can I understand the test framework better?\n\nThe judge harness is fairly complex (but does not use nonstandard language features or libraries). You are welcome to study it, but we’d advise you against making changes to it (since it will lead to nasty merge conflicts when you update).\n\n- How do I import the C++ project?\n\nIf you want to import the project into your favourite IDE, you probably need to create IDE project with [CMake](https://cmake.org/) (no need to do it for CLion, it supports CMake out-of-the-box).\n\nHere is an example recipe for generationg Visual Studio project ([list](https://cmake.org/cmake/help/v3.10/manual/cmake-generators.7.html) of all CMake supported IDEs).\nAfter installing CMake, open your terminal, go to `epi_judge_cpp` folder and run following commands:\n\n    mkdir vs\n    cd vs\n    cmake -G \"Visual Studio 15 2017\" ..\n\nThen just open `epi_judge_cpp/vs/epi_judge_cpp.sln` solution with Visual Studio and it will load all EPI programs.\n\n## Tracking your progress\n\nThe file [index.html](https://github.com/adnanaziz/EPIJudge/blob/master/index.html) in the root of this project tracks your progress through the problems. Specifically, there's an expanding tab for each chapter. Click on it, and you will see your progress, e.g., as below. This file gets updated each time you execute a program. You can **use this file to map book problems to stub programs**.\n\n\u003cimg src=\"https://i.imgur.com/xjf7Z32.png\" width=\"600px\"\u003e\u003c/img\u003e\n\n## Acknowledgments\n\nA big shout-out to the hundreds of users who tried out the release over the past couple of months. As always, we never fail to be impressed by the enthusiasm and commitment our readers have; it has served to bring out the best in us.\nWe all thank [Viacheslav Kroilov](https://github.com/metopa), for applying his exceptional software engineering skills to make EPI Judge a reality.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fadnanaziz%2Fepijudge","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fadnanaziz%2Fepijudge","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fadnanaziz%2Fepijudge/lists"}