Multi-langage (metamorph)
Vous pouvez créer une mission indépendamment du langage dans lequel elle sera résolue.
Le candidat est donc libre de choisir son langage préféré pour résoudre le problème !
Liste des langages supportés par Deadlock :
- Java 11.0.5 (openjdk)
- Kotlin 1.3.70-eap-184
- Python 3.8.2
- C/C++ 9.2.0
- Rust 1.39.0
- Go 1.12.16
- Javascript avec NodeJS 12.15.0
- Ruby 2.6.6
- Ocaml 4.08.1
Imaginons que vous souhaitez écrire une mission d'implémentation de la suite de Fibonacci.
Créer un nouveau dossier contenant un fichier entry.rs
. Ce fichier définit :
- quel(s) langage(s) sont disponibles pour l'implémentation de la résolution du candidat,
- tous les tests pour valider le code du candidat.
1 2 3 |
|
Dans le premier tableau sont énuméré tous les langages que le candidat pourra sélectionner au moment de développer la solution à la mission.
Ensuite, vous devez écrire différents tests, chacun sera exécuté seulement si le précédent réussi. Ecrivons ensemble le premier !
1 2 3 4 5 6 7 8 9 |
|
Ce test va appeler le programme du candidat avec 0
comme entrée et s'attend à avoir 1
comme sortie.
Par défaut, pour chaque langage, le candidat dispose d'un template. Vous pouvez personnaliser le template pour chaque langage :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
1 2 3 4 5 6 7 8 9 10 11 12 |
|
1 2 3 4 5 6 7 8 9 10 11 12 |
|
1 2 3 4 5 6 7 8 9 10 11 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
1 2 3 4 5 6 7 8 9 10 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
L'utilisateur doit compléter la méthode fibonacci
et le résultat sera affiché dans le stdout (console).
Continuons avec plus de tests :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
|
Tests aléatoires
Cela vous semble trop statique ?
Vous pouvez ajouter des tests plus complexe avec des entrées aléatoires en utilisant la méthode random
fournie par notre runner :
randt(n): génère un nombre aléatoire entre 0 et n exclu.
randft(n, m): gnère un nombre aléatoire entre n et m exclu.
1 2 3 4 |
|
Pas de panique, vous pouvez appeler votre propre solution au lieu d'écrire une réponse attendue statique !
1 2 3 4 5 6 7 8 |
|
solution.py
est appelée par notre interprèteur Python avec les données de input
et vous devez écrire le résultat renvoyé par votre solution dans le stdout.Par exemple pour la suite de Fibonnaci :
1 2 3 4 5 6 7 8 |
|
Ensuite la sortie stdout donnée avec la méthode print est comparée à celle résultant du programme du candidat.
Vous pouvez choisir un interprèteur parmi la liste de ceux proposé ci-après :
java | javascript | go |
rust | python | c |
kotlin | ruby | cpp |
Répétition
Qu'en est-il si vous désirez exécuter 50 tests aléatoire à la suite ?
Ce n'est pas un problème, tout ce que vous avez à faire est d'ajouter le paramètre repeat à votre test :
{
input: randt(20),
expected: call("python", "solution.py"),
repeat: 50
}
Valeur d'entrée
Ce n'est pas tout, vous pouvez aussi appeler votre propre programme pour générer les valeurs d'entrée :
{
input: call("javascript", "generate.js"),
expected: call("python", "solution.py")
}
Ouvrir un ficher
Vous pouvez également ouvrir un fichier :
{
input: open("file.txt"),
expected: call("python", "solution.py")
}
Dès que vous aurez compléter le fichier entry.rs
, il faut compléter le fichier challenge.yaml
:
version: 1.0
name: code_metamorph_fibo
label: Fibonacci
description: Implements Fibonacci algorithm
level: ewok
type: CODING
metamorph: true
xp:
programming: 1
coding:
templateDirectory: /opt/runner
successDirectory: success/
target: main.rs
editorMode: rust
Le dossier success/
contient votre solution qui sera donnée au candidat lorsqu'il aura résolu le problème de la mission.
Vous êtes libre de choisir le langage et la logique d'implémentation de votre solution.
Pour tester votre programme, vous pouvez utiliser notre CLI:
> dcli run . java # Exécute template/java/Main.java
> dcli solve . java # Exécute les tests sur template/java/Main.java
> dcli run . python # Exécute template/python/Main.py
Chaque fichier placer dans le dossier template
est donné au candidat lorsqu'il décide de changer le langage selectionné.
Par exemple, si le candidat décide d'utiliser l'interpréteur Rust, tous les fichier contenu dans template/rust
lui seront fourni.
Votre mission doit ressembler à cela :
.
├── challenge.yaml
├── entry.rs
├── runner
├── solution.js
├── success
│ └── Main.rs
└── template
├── c
│ └── Main.c
├── cpp
│ └── Main.cpp
├── go
│ └── Main.go
├── java
│ └── Main.java
├── kotlin
│ └── Main.kt
├── javascript
│ └── Main.js
├── python
│ └── Main.py
├── ruby
│ └── Main.rb
└── rust
└── Main.rs