1
1
mirror of https://github.com/theoludwig/programming-challenges.git synced 2024-11-09 22:08:58 +01:00
programming-challenges/.github/CONTRIBUTING.md
2020-07-05 15:48:51 +02:00

3.9 KiB

💡 Contributing

Types of contributions :

Challenge instructions

After running the command npm run create-challenge (see Installation & Usage part of README.md).

You should have a new folder called the name of your challenge in challenges folder.

Structure and purpose of each files :

  • README.md : explain what the solution function should do (the instructions).

  • input-output.json : An array of possible input/output. This file allows you to test solutions.

    Example of file :

    [
        {
            "input": ["arg"],
            "output": "Hello world arg!"
        },
        {
            "input": ["Divlo"],
            "output": "Hello world Divlo!"
        }
    ]
    

    Each object has a "input" key, an array where each item is an argument passed to the solution function when it's executed. The "output" key is the expected output with the given input.

  • solutions folder where there are all solutions for this specific challenge.

Solution for an already existing challenge

After running the command npm run create-solution (see Installation & Usage part of README.md).

You should have a new folder called the name of your solution in the challenge folder then you can write your solution in the solution file. You need to name your parameters of the function (see the instruction of the challenge).

When you feel it's right, you would need to test your code against input-output.json file to see if it's a valid solution.. Run this command npm run test [challenge-name] [solution-name].

Language available for testing the code

Before to add a new language, you should understand :

/scripts/languages-wrapper folder contains all the files needed to execute solutions. Each programming challenge has a execute file, this execute file will be copied in the temp folder with the solution file.

Steps to add a new language :

  1. Code the execute file in the appropriate language

    Algorithm of the execute file :

    • Import the solution function (same directory, ignore errors)
    • Read the ./input.json files and convert it as JSON (not plain text string)
    • Execute the solution function imported with the inputs as arguments
    • Create and write a new file called ./output.json, with the output result of the solution function

    Example in javascript with node.js (execute.js) :

    const path = require('path')
    const fs = require('fs').promises
    const solution = require('./solution')
    
    const inputPath = path.join(__dirname, 'input.json')
    const outputPath = path.join(__dirname, 'output.json')
    
    const main = async () => {
        const inputFile = await fs.readFile(inputPath)
        const inputJSON = JSON.parse(inputFile)
    
        const result = solution.apply(null, inputJSON)
        await fs.writeFile(outputPath, JSON.stringify(result))
    }
    
    main()
    
  2. Add the language in the _languages.json file as a new object of the array. Example for JavaScript :

    {
        "name": "JavaScript",
        "extension": ".js",
        "launch": "node"
    }
    
  3. Create a new solution file with the default basic boilerplate code in /scripts/languages-wrapper/templates. Example : solution.js:

    function solution () {
    
    }
    
    module.exports = solution
    
  4. Add the language in the language available in README.md file.

Spelling error

Correct spelling errors, in the README or CONTRIBUTING files.

Thank you for your support!