Introduction
Le projet est constitué de 2 fichiers principaux :
code.c : contient le code du projet pour résoudre le challenge
fake_io.c : contient les fonctions de lecture et d'écriture pour simuler les entrées/sorties du programme et ainsi pouvoir tester le code.
Le fichier de tests permet aussi de tester le code du projet avec valgrind et ddd.
Compilation
Pour compiler le projet avec le fichier de tests, utilisez la commande suivante :
gcc -Wall -Wextra -Wpedantic -o code code.c fake_io.c --include fake_io.h
Exécution
Téléchargement des fichiers de test
Vous pouvez télécharger les fichiers de test à partir du fichier Org Mode ou du script en Python suivant qui nécessite le module requests:
import requests
import os
URL = "https://www.codingame.com/training/hard/the-labyrinth"
tests_dir = "tests"
puzzle_id = URL.split("/")[-1]
r = requests.post(
"https://www.codingame.com/services/Puzzle/generateSessionFromPuzzlePrettyId",
json=[None, puzzle_id, False],
)
session_id = r.json()["handle"]
r = requests.post(
"https://www.codingame.com/services/TestSession/startTestSession", json=[session_id]
)
data = r.json()
puzzle_level = data["puzzle"]["level"]
puzzle_url = f"https://www.codingame.com/training/{puzzle_level}/{puzzle_id}"
if not os.path.exists(tests_dir):
os.makedirs(tests_dir)
puzzle_tests = data["currentQuestion"]["question"]["testCases"]
for test in puzzle_tests:
index = test["index"]
label = test["label"]
inputBinaryId = test["inputBinaryId"]
print(f"Test {index}: {label}")
r = requests.get(
"https://static.codingame.com/servlet/fileservlet", params={"id": inputBinaryId}
)
input_file = r.text
with open(f"{tests_dir}/input{index}.txt", "w") as f:
f.write(input_file)
print("Done !")
Exécution du programme
Pour exécuter le programme, téléchargez les fichiers de tests et exécutez la commande suivante :
Exécution du programme avec valgrind
valgrind --leak-check=full ./code tests/input1.txt