Learning data structures, algorithms, machine learning and various computer science constructs by programming practice from resources around the web.
Highly recommended to open/use this repository using Visual Studio Code.
| Language | Version | Package |
|---|---|---|
| Java | 12 | OpenJDK (AdoptOpenJDK with HotSpot) |
| Python | 3.7.2 | N/A |
- Get json data for list of extensions using the uploaded Sync file in GitHub.
- Filter by
metadata.publisherIdusing the website https://jsoneditoronline.org/. - Update list in file
.vscode/extensions.json.
- Open repository using Visual Studio Code. Recommended extensions have been provided by the repository (.vscode folder).
- Use Sourcegraph.
- A website for filtering and querying is work-in-progress.
- VSCode tasks are available via the repository (.vscode folder) for running all language specific tests. Please familiarize yourself with using tasks in VSCode.
- Please follow the template for adding problems. This is inherently tied into the mechanism for searching through problems using the planned website.
- Templates for metadata.json (problem metadata), readme.md (problem definition) and language specific solution and solution test files are available via VSCode snippets. They are all committed and available via the repository (.vscode folder). Please familiarize yourself with using snippets in VSCode.
- You are encouraged to fork this repository and submit pull requests.
- For those who may not wish to use VSCode and instead prefer a simple text editor
- I do not recommend using any sort of bloated IDE. They tend to add a lot of files simply for their specific plumbing.
- Install latest version of Java: OpenJDK (Red Hat for Windows).
- On Windows, update the Path environment variable to point to new Java install location. Look out for JAVA_HOME env var, and javapath in the Path env var.
- Update build.gradle script (
sourceCompatibilityandtargetCompatibility). - Download and update the (latest) version of gradle compatible with the new version of Java.
- In Windows, update the Path environment variable to point to new gradle install location.
- In the repository root, from admin command prompt, run
gradle wrapper --gradle-version <new gradle version>. - Make sure
distributionUrlingradle/wrapper/gradle-wrapper.propertiespoints to new gradle version. - Delete .project and .classpath files.
- Delete all contents of bin directory.
- Close VSCode.
- Clear workspace cache.
- Restart VSCode.
- Make sure new .project and .classpath files have been generated. Verify that .classpath now points to the new version of Java. This may take a good few minutes.
- Run gradlew test and code coverage tasks.
- Update CI scripts (appveyor, circle-ci, travis) to point to new Java version.
- For circle-ci, docker image tags can be viewed here.
From the project root, run .\gradlew.bat wrapper --gradle-version x.x.x. For Linux, run gradlew from the root, instead of the .bat file. Use the desired version in the command. Verify that the distributionUrl field in the file gradle-wrapper.properties has been updated to reflect the correct version. [Reference]
- Install latest version of Python.
- Run tasks for python tests, coverage reports and problems list.
- Update CI scripts (appveyor, circle-ci, travis) to point to new Python version.
| Platform | Provider | Operations | Status |
|---|---|---|---|
| Windows, Linux | AppVeyor | Build, Test | |
| Linux | Travis CI | Build, Test, Deploy to gh-pages | |
| Linux | Circle CI | Build, Test | |
| N/A | CodeClimate | Check for code maintainability | |
| N/A | CodeClimate | Check for test coverage using Circle CI | |
| N/A | Codacy | Code analysis/quality check | |
| N/A | CodeBeat | Static code analysis | |
| N/A | Codecov | Code coverage using Circle CI | |
| N/A | Coveralls | Code coverage using Circle CI | |
| N/A | FOSSA | Open Source Software Management | |
| N/A | CII Best Practices | Open source software best practices check | |
| N/A | david-dm | Check node.js dependency status | |
| N/A | david-dm | Check node.js dev dependency status |
- Problems in the repository are not necessarily solved by me. The goal is to learn. Sometimes in the interest of time, that involves understanding an existing solution rather than spending an inordinate amount of time trying to solve it by myself. Where applicable I have provided references to the original solution.
- Problems in this repository are not unique. Given that the same (or similar) problem may exist in multiple origins, more than a few problems are repeated. It is my goal to provide some sort of querying mechanism via a website for users to view only a unique instance of a problem, either from a "first or default" origin or a specified origin.
