👍 Thank you for taking the time to contribute to this project 👍
The CodingChallengesBooket is an organisation of coding challenges from the OCR GCSE/A-level Coding Challenges Booklet. FactorialFinder is only one of many code challenges you can contribute to. Of course, we must have guidelines to ensure everything on the repostiory is up-to-standard and easy for beginners to follow! These are mostly guidelines and not rules, but please aim to follow as many of these as possible.
What should I know before starting to contribute?
- Repository design
- Languages and support
- Solutions and explanations
How can I contribute?
- Reporting bugs
- Suggesting enhancements
- New solutions
Each repository in CodingChallengesBooklet aims to be simple and easy to walk through. The repository has a README.md containing the problem, and the solution (usually explained). The repository then has folders for each language used. Each folder is named after the language contained within it. Folders tend to be capitalised. Each repository also contains a .github folder with issue templates for enhancements and bug reporting.
We try to make every repository as similar as possible to make the entire organisation easy to read through. If each repository was formatted differently, it would be harder to read through each challenge as you would have to understand where everything is first.
Each language a code challenge supports has it's own folder in the code challenge repository. This makes navigating to a solution written in a language easy and straight forward. Our aim is to support as many languages as possible, however, please try to keep solutions within major programming languages. Languages that aren't widely used, or languages that were made as part of a challange/joke, are acceptable but take resources away from writing the solution in a more widely used, and therefore more useful to a beginner, programming language.
The languages listed below are preferred and more resources may be put into these languages over other smaller languages:
- Python
- JavaScript
- TypeScript
- Java
- C#
- C/C++
- Go
- Rust
- Ruby
- PHP
- Haskell
The programming paradigm is also an important factor in the consideration of solutions. Code challenges that have a mix of paradigms are more valuable than code challenges that are only written in a single paradigm.
Solutions should be a single file/project within a programming languages folder.
It's important to make note of when multiple solutions are allowed.
When a code challenge has an extension section, multiple solutions (i.e. multiple files/projects) are expected as an extension can bring considerable changes, and therefore it is easier to break up the problem, and extended problem tasks.
Extension solutions should be named the same as the original solution but with advanced
or extension
appended to the project name.
You can check pre-existing code challenge to understand further the best way to format a solution with extensions.
Solutions can also be benchmarked which itself is considered an "extension".
Benchmarked solutions should be the original solution but with benchmarking code to observe the performance of the code.
Benchmarked solutions should be named the same as the original solution but with benchmark
or benchmarked
append to the project/file.
Explanations are a part of solutions, a solution is not complete without an explanation.
Soltuions themselves should contain code comments explaining the process of the code.
This makes reading through code easier both for the challenger, and maintainers.
Each programming language folder is expected to have a README.md
detailing the problem, and solutions (explained, usually with code examples).
Please use pre-existing code challenges as a referrence.
You can support the project not only by adding new code but also by testing and ensuring all code and explanations are correct. Each repository should have an issue template for reporting bugs to the maintainers of the code challenge.
Suggesting enhancements to the project is suggesting additional detail, explanation, code examples, or repository level changes.
New solutions is a ✨ special ✨ kind of enhancement. Additional language solutions make the code challenges more accessible, therefore, these kind of enhancements are well appricated! However, these enhancements are also the most time expensive to produce.