Merge branch 'master' of https://codefirst.iut.uca.fr/git/nathan.boileau/Scripted
continuous-integration/drone/push Build is passing Details

ServeurDeTest
nathan boileau 2 years ago
commit d0ddbbda37

@ -24,4 +24,3 @@ steps:
secrets: secrets:
- source: DEPLOY_KEY - source: DEPLOY_KEY
rm: false rm: false

@ -0,0 +1,24 @@
{
"version": "0.2.0",
"configurations": [
{
"name": "C/C++ Runner: Debug Session",
"type": "cppdbg",
"request": "launch",
"args": [],
"stopAtEntry": false,
"externalConsole": true,
"cwd": "c:/wamp64/www/Scripted",
"program": "c:/wamp64/www/Scripted/build/Debug/outDebug",
"MIMode": "gdb",
"miDebuggerPath": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
}
]
}

@ -0,0 +1,36 @@
{
"C_Cpp_Runner.cCompilerPath": "gcc",
"C_Cpp_Runner.cppCompilerPath": "g++",
"C_Cpp_Runner.debuggerPath": "gdb",
"C_Cpp_Runner.cStandard": "",
"C_Cpp_Runner.cppStandard": "",
"C_Cpp_Runner.msvcBatchPath": "",
"C_Cpp_Runner.useMsvc": false,
"C_Cpp_Runner.warnings": [
"-Wall",
"-Wextra",
"-Wpedantic",
"-Wshadow",
"-Wformat=2",
"-Wconversion",
"-Wnull-dereference",
"-Wsign-conversion"
],
"C_Cpp_Runner.enableWarnings": true,
"C_Cpp_Runner.warningsAsError": false,
"C_Cpp_Runner.compilerArgs": [],
"C_Cpp_Runner.linkerArgs": [],
"C_Cpp_Runner.includePaths": [],
"C_Cpp_Runner.includeSearch": [
"*",
"**/*"
],
"C_Cpp_Runner.excludeSearch": [
"**/build",
"**/build/**",
"**/.*",
"**/.*/**",
"**/.vscode",
"**/.vscode/**"
]
}

@ -0,0 +1,2 @@
php_flag display_errors on
php_value error_reporting E_ALL

@ -0,0 +1,3 @@
display_errors = On
log_errors = Off
error_reporting = E_ALL & E_NOTICE & E_DEPRECATED & E_STRICT & E_WARNING

@ -37,7 +37,7 @@ class Autoload
$dir =array('Model/','./','Config/','Controller/','Metier/', 'Factory/'); $dir =array('Model/','./','Config/','Controller/','Metier/', 'Factory/');
foreach ($dir as $d){ foreach ($dir as $d){
$file=$rep.$d.$filename; $file=$rep.$d.$filename;
//echo $file; // echo $file."\n";
if (file_exists($file)) if (file_exists($file))
{ {
include $file; include $file;

@ -1,20 +1,10 @@
<?php <?php
//préfixe //préfixe
$rep = __DIR__ . '/../'; $rep ='';
//BD // BD
// $dsn = 'mysql:host=londres.uca.local; dbname=dbnogarnier1';
// $user = 'nogarnier1';
// $password = 'achanger';
// scripted.db
// $dsn = 'mysql:host=localhost; dbname=scripted';
// $user = 'root';
// $password = 'p';
// SQULITE3
$dsn = './scripted.db'; $dsn = './scripted.db';
// $dsn = 'C:\\wamp64\\www\\scripted.db';
//Sel de hashage //Sel de hashage
$sel = "JeSuisUnSeldeHashageEtJeSuisUniqueEtTresSecuriseEtJeSuisTresLong"; $sel = "JeSuisUnSeldeHashageEtJeSuisUniqueEtTresSecuriseEtJeSuisTresLong";
@ -23,7 +13,7 @@ $sel = "JeSuisUnSeldeHashageEtJeSuisUniqueEtTresSecuriseEtJeSuisTresLong";
//Page //Page
$vues['main'] = 'View/src/pages/Main.php'; $vues['main'] = 'View/src/pages/Main.php';
$vues['presentation'] = 'View/src/pages/Presentation.html'; $vues['presentation'] = 'View/src/pages/Presentation.html';
$vues['login'] = '/View/src/pages/LogSign/Login.php'; $vues['login'] = 'View/src/pages/LogSign/Login.php';
$vues['signUp'] = 'View/src/pages/LogSign/SignUp.php'; $vues['signUp'] = 'View/src/pages/LogSign/SignUp.php';
$vues['test'] = 'View/src/pages/FirstTests/FirstTest1.html'; $vues['test'] = 'View/src/pages/FirstTests/FirstTest1.html';
$vues['next'] = 'View/src/pages/FirstTests/FirstTest'; $vues['next'] = 'View/src/pages/FirstTests/FirstTest';
@ -33,6 +23,9 @@ $vues['chouette'] = 'View/src/pages/Enigme/Chouette.html';
$vues['cesarEncrypt'] = 'View/src/pages/Enigme/CesarEncrypt.html'; $vues['cesarEncrypt'] = 'View/src/pages/Enigme/CesarEncrypt.html';
$vues['cesarDecrypt'] = 'View/src/pages/Enigme/CesarDecrypt.html'; $vues['cesarDecrypt'] = 'View/src/pages/Enigme/CesarDecrypt.html';
$vues['chuckNorris'] = 'View/src/pages/Enigme/ChuckNorris.html'; $vues['chuckNorris'] = 'View/src/pages/Enigme/ChuckNorris.html';
$vues['hanoi'] = 'View/src/pages/Enigme/Hanoi.html';
$vues['trianglePascal'] = 'View/src/pages/Enigme/TrianglePascal.html';
$vues['doubleElement'] = 'View/src/pages/Enigme/DoubleElement.html';
//Error //Error
$vues['erreur'] = 'View/src/pages/Erreur.php'; $vues['erreur'] = 'View/src/pages/Erreur.php';

@ -0,0 +1,27 @@
<?php
Class Nettoyage{
public function clean($input)
{
// Supprime les espaces en début et fin de chaîne
$output = trim($input);
// Supprime les balises HTML
$output = strip_tags($output);
// Supprime les caractères spéciaux
// $output = htmlspecialchars($output);
return $output;
}
public function cleanEmail($input){
$output = $this->clean($input);
$output = filter_var($output, FILTER_SANITIZE_EMAIL);
return $output;
}
public function cleanInt($input){
$output = $this->clean($input);
$output = filter_var($output, FILTER_SANITIZE_NUMBER_INT);
return $output;
}
}

@ -5,26 +5,30 @@ class FrontController
{ {
try { try {
global $error, $view, $rep; global $error, $view, $rep;
$nettoyage = new Nettoyage();
session_start(); session_start();
// Check role permissions // Check role permissions
if (isset($_SESSION['role'])) { if (isset($_SESSION['role'])) {
$role = $_SESSION['role']; $role = $nettoyage->clean($_SESSION['role']);
} else { } else {
$role = "visitor"; $role = "visitor";
} }
// Check if action exists // Check if action exists
$action = $_REQUEST['action']; $action = $nettoyage->clean($_REQUEST['action']);
if ($role == "user") { if ($role == "user") {
if ($action == NULL) { if ($action == NULL) {
$_REQUEST['action'] = $action;
new UserController(); new UserController();
} else if (method_exists('UserController', $action) == false) {
$error = "Action non valide " . $action;
require($rep . $view['erreur']);
} }
// else if (method_exists('UserModel', $action) == false) {
// $error = "Action non valide " . $action;
// require($rep . $view['erreur']);
else { else {
$_REQUEST['action'] = $action;
new UserController(); new UserController();
} }
} else { } else {
$_REQUEST['action'] = $action;
new VisitorController(); new VisitorController();
} }
} catch (Exception $e) { } catch (Exception $e) {

@ -2,51 +2,61 @@
class UserController class UserController
{ {
private Connection $con; private UserModel $model;
private Nettoyage $nettoyage;
function __construct() function __construct()
{ {
try { try {
global $dsn, $rep, $vues, $error; global $dsn, $rep, $vues, $error;
$model = new UserModel(); $this->model = new UserModel();
$this->nettoyage = new Nettoyage();
$action = $_REQUEST['action']; $action = $_REQUEST['action'];
//register_event_handler('add_to_queue',array($this,"onAddToQueue")); //register_event_handler('add_to_queue',array($this,"onAddToQueue"));
switch ($action) { switch ($action) {
case NULL: case NULL:
$model->goToHome(); $this->goToHome();
break;
case "goToPresentation":
$model->goToPresentation();
break; break;
case "goToHome": case "goToHome":
$model->goToHome(); $this->goToHome();
break; break;
case "goToTest": case "goToPresentation":
$model->goToTest(); $this->goToPresentation();
break; break;
case "goToEnigme": case "goToEnigme":
$model->goToEnigme(); $this->goToEnigme();
break;
case "goToTest":
$this->goToTest();
break; break;
case "goToChouette" : case "goToChouette" :
$model->goToChouette(); $this->goToChouette();
break; break;
case "goToCesarEncrypt": case "goToCesarEncrypt":
$model->goToCesarEncrypt(); $this->goToCesarEncrypt();
break; break;
case "goToCesarDecrypt": case "goToCesarDecrypt":
$model->goToCesarDecrypt(); $this->goToCesarDecrypt();
break; break;
case "goToChuckNorris" : case "goToChuckNorris" :
$model->goToChuckNorris(); $this->goToChuckNorris();
break; break;
case "goToQueue": case "goToHanoi" :
$model->goToQueue(); $this->goToHanoi();
break;
case "goToTrianglePascal":
$this->goToTrianglePascal();
break;
case "goToDoubleElement":
$this->goToDoubleElement();
break; break;
case "goToNext": case "goToNext":
$model->goToNext(); $this->goToNext();
break;
case "goToQueue":
$this->goToQueue()();
break; break;
case "logout": case "logout":
$model->logout(); $this->logout();
break; break;
default: default:
$error = "Action non valide"; $error = "Action non valide";
@ -61,13 +71,141 @@ class UserController
require($rep . $vues['erreur']); require($rep . $vues['erreur']);
} }
} }
public function onAddToQueue(){ public function goToHome()
$model=new UserModel; {
$model->AddUserToQueueEvent(); try {
$this->goToMulti(); global $rep, $vues;
require($rep . $vues['main']);
} catch (Exception $e) {
$error = "404";
require($rep . $vues['erreur']);
}
}
public function goToPresentation()
{
try {
global $rep, $vues;
require($rep . $vues['presentation']);
} catch (Exception $e) {
$error = "404";
require($rep . $vues['erreur']);
}
}
public function goToTest()
{
try {
global $rep, $vues;
require($rep . $vues['test']);
} catch (Exception $e) {
$error = "404";
require($rep . $vues['erreur']);
}
}
public function goToEnigme()
{
try {
global $rep, $vues;
require($rep . $vues['enigme']);
} catch (Exception $e) {
$error = "404";
require($rep . $vues['erreur']);
}
}
public function goToChouette()
{
try {
global $rep, $vues;
require($rep . $vues['chouette']);
} catch (Exception $e) {
$error = "404";
require($rep . $vues['erreur']);
}
}
public function goToCesarEncrypt()
{
try {
global $rep, $vues;
require($rep . $vues['cesarEncrypt']);
} catch (Exception $e) {
$error = "404";
require($rep . $vues['erreur']);
}
}
public function goToCesarDecrypt()
{
try {
global $rep, $vues;
require($rep . $vues['cesarDecrypt']);
} catch (Exception $e) {
$error = "404";
require($rep . $vues['erreur']);
}
}
public function goToChuckNorris()
{
try {
global $rep, $vues;
require($rep . $vues['chuckNorris']);
} catch (Exception $e) {
$error = "404";
require($rep . $vues['erreur']);
}
}
public function goToHanoi()
{
try {
global $rep, $vues;
require($rep . $vues['hanoi']);
} catch (Exception $e) {
$error = "404";
require($rep . $vues['erreur']);
}
}
public function goToTrianglePascal()
{
try {
global $rep, $vues;
require($rep . $vues['trianglePascal']);
} catch (Exception $e) {
$error = "404";
require($rep . $vues['erreur']);
}
}
public function goToDoubleElement()
{
try {
global $rep, $vues;
require($rep . $vues['doubleElement']);
} catch (Exception $e) {
$error = "404";
require($rep . $vues['erreur']);
}
}
public function goToNext()
{
try {
global $rep, $vues, $error;
$num = $this->nettoyage->cleanInt($_REQUEST['num']);
require($rep . $vues['next'].$_REQUEST['num'].".html");
} catch (Exception $e) {
$error = "Erreur Inconnue";
require($rep . $vues['erreur']);
}
}
public function goToQueue()
{
try {
global $rep, $vues, $error;
//require($rep . $vues['Queue']);
$this->model->addToQueue();
} catch (Exception $e) {
$error = $e->getMessage();
require($rep . $vues['erreur']);
}
}
public function logout()
{
$_SESSION['role'] = 'visitor';
header('Location: index.php');
} }
/*public function goToMulti(){
}*/
} }

@ -2,35 +2,34 @@
class VisitorController class VisitorController
{ {
private Connection $con; private VisitorModel $model;
function __construct() function __construct()
{ {
try { try {
global $dsn, $rep, $vues, $error; global $dsn, $rep, $vues, $error;
$model = new VisitorModel(); $this->model = new VisitorModel();
$action = $_REQUEST['action']; $action = $_REQUEST['action'];
switch ($action) { switch ($action) {
case NULL: case NULL:
$model->goToHome(); $this->goToHome();
break; break;
case "signUp": case "signUp":
$model->signUp(); $this->signUp();
break; break;
case "login": case "login":
$model->login(); $this->login();
break; break;
case "goToHome": case "goToHome":
$model->goToHome(); $this->goToHome();
break; break;
case "goToLogin": case "goToLogin":
$model->goToLogin(); $this->goToLogin();
break; break;
case "goToSignUp": case "goToSignUp":
$model->goToSignUp(); $this->goToSignUp();
break; break;
case "goToQueue": case "goToQueue":
$model->goToLogin(); $this->goToLogin();
break; break;
default: default:
$error = "Action non valide"; $error = "Action non valide";
@ -45,4 +44,62 @@ class VisitorController
require($rep . $vues['erreur']); require($rep . $vues['erreur']);
} }
} }
public function goToHome()
{
try {
global $rep, $vues;
require($rep . $vues['main']);
} catch (Exception $e) {
$error = "404";
require($rep . $vues['erreur']);
}
}
public function goToLogin()
{
try {
global $rep, $vues;
require($rep . $vues['login']);
} catch (Exception $e) {
$error = "404";
require($rep . $vues['erreur']);
}
}
public function goToSignUp()
{
try {
global $rep, $vues;
require($rep . $vues['signUp']);
} catch (Exception $e) {
$error = "404";
require($rep . $vues['erreur']);
}
}
public function signUp()
{
try {
global $rep, $vues, $error;
$this->model->signUp();
$this->goToHome();
} catch (PDOException $e) {
$error = "Erreur de connexion à la base de données.";
require($rep . $vues['erreur']);
} catch (Exception $e) {
$error = $e->getMessage();
require($rep . $vues['erreur']);
}
}
public function login()
{
try {
global $rep, $vues, $error;
$this->model->login();
$this->goToHome();
} catch (PDOException $e) {
$error = "Erreur de connexion à la base de données.";
require($rep . $vues['erreur']);
} catch (Exception $e) {
$error = $e->getMessage();
require($rep . $vues['erreur']);
}
}
} }

@ -5,6 +5,8 @@ class UserModel
private EnigmeGateway $enigme_gateway; private EnigmeGateway $enigme_gateway;
private PartieGateway $partie_gateway; private PartieGateway $partie_gateway;
private UtilisateurGateway $utilisateur_gateway; private UtilisateurGateway $utilisateur_gateway;
private Nettoyage $nettoyage;
private Validation $validation;
function __construct() function __construct()
{ {
@ -13,122 +15,17 @@ class UserModel
$this->enigme_gateway = new EnigmeGateway(); $this->enigme_gateway = new EnigmeGateway();
$this->partie_gateway = new PartieGateway(); $this->partie_gateway = new PartieGateway();
$this->utilisateur_gateway = new UtilisateurGateway(); $this->utilisateur_gateway = new UtilisateurGateway();
$this->nettoyage = new Nettoyage();
$this->validation = new Validation();
} catch (Exception $e) { } catch (Exception $e) {
$error = $e->getMessage(); $error = $e->getMessage();
require($rep . $view['erreur']); require($rep . $view['erreur']);
} }
} }
public function addToQueue()
public function goToPresentation()
{
global $rep, $vues, $error;
try {
require($rep . $vues['presentation']);
} catch (Exception $e) {
$error = "Erreur Inconnue";
require($rep . $vues['erreur']);
}
}
public function goToHome()
{
global $rep, $vues, $error;
try {
require($rep . $vues['main']);
} catch (Exception $e) {
$error = "404";
require($rep . $vues['erreur']);
}
}
public function goToEnigme()
{
global $rep, $vues, $error;
try {
require($rep . $vues['enigme']);
} catch (Exception $e) {
$error = "404";
require($rep . $vues['erreur']);
}
}
public function goToChouette()
{
global $rep, $vues, $error;
try {
require($rep . $vues['chouette']);
} catch (Exception $e) {
$error = "404";
require($rep . $vues['erreur']);
}
}
public function goToCesarEncrypt()
{
global $rep, $vues, $error;
try {
require($rep . $vues['cesarEncrypt']);
} catch (Exception $e) {
$error = "404";
require($rep . $vues['erreur']);
}
}
public function goToCesarDecrypt()
{
global $rep, $vues, $error;
try {
require($rep . $vues['cesarDecrypt']);
} catch (Exception $e) {
$error = "404";
require($rep . $vues['erreur']);
}
}
public function goToChuckNorris()
{ {
global $rep, $vues, $error;
try {
require($rep . $vues['chuckNorris']);
} catch (Exception $e) {
$error = "404";
require($rep . $vues['erreur']);
}
}
public function goToTest()
{
global $rep, $vues, $error;
try {
require($rep . $vues['test']);
} catch (Exception $e) {
$error = "404";
require($rep . $vues['erreur']);
}
}
public function goToNext()
{
global $rep, $vues, $error;
try {
require($rep . $vues['next'].$_REQUEST['num'].".html");
} catch (Exception $e) {
$error = "Erreur Inconnue";
require($rep . $vues['erreur']);
}
}
public function goToQueue()
{
global $rep, $vues, $error;
try {
//require($rep . $vues['Queue']);
$this->addToQueue();
} catch (Exception $e) {
$error = $e->getMessage();
require($rep . $vues['erreur']);
}
}
public function addToQueue(){
echo '1'; echo '1';
if($this->utilisateur_gateway->isAlreadyInqueue($_SESSION['utilisateur'])) if ($this->utilisateur_gateway->isAlreadyInqueue($_SESSION['utilisateur'])) {
{
return; return;
} }
echo '2'; echo '2';
@ -136,9 +33,8 @@ class UserModel
echo '3'; echo '3';
$tabEnigme = $this->enigme_gateway->findMultiEnigma(); $tabEnigme = $this->enigme_gateway->findMultiEnigma();
$idNewPartie = $this->partie_gateway->findPartieMaxId(); $idNewPartie = $this->partie_gateway->findPartieMaxId();
$partie=$this->partie_gateway->creerPartieMulti($idNewPartie,$tabEnigme); $partie = $this->partie_gateway->creerPartieMulti($idNewPartie, $tabEnigme);
} } else {
else{
echo '4'; echo '4';
$idPartieInQueue = $this->partie_gateway->findPartieInQueue(); $idPartieInQueue = $this->partie_gateway->findPartieInQueue();
echo '5'; echo '5';
@ -148,21 +44,24 @@ class UserModel
echo '7'; echo '7';
} }
echo '8'; echo '8';
$this->utilisateur_gateway->addToQueue($_SESSION['utilisateur'],$partie); $this->utilisateur_gateway->addToQueue($_SESSION['utilisateur'], $partie);
$userGroup=$this->utilisateur_gateway->findUsersInQueue(); $userGroup = $this->utilisateur_gateway->findUsersInQueue();
//trigger_event('add_to_queue',$userGroup); //trigger_event('add_to_queue',$userGroup);
} }
public function AddUserToQueueEvent(){ public function AddUserToQueueEvent()
$userGroup=$this->utilisateur_gateway->findUsersInQueue(); {
if($userGroup.count()>=4) $userGroup = $this->utilisateur_gateway->findUsersInQueue();
{ if ($userGroup . count() >= 4) {
$this->utilisateur_gateway->launchGame(); $this->utilisateur_gateway->launchGame();
} }
} }
public function logout() public function logout()
{ {
session_unset();
session_destroy();
$_SESSION = array();
$_SESSION['role'] = 'visitor'; $_SESSION['role'] = 'visitor';
header('Location: index.php'); header('Location: index.php');
} }

@ -5,6 +5,8 @@ class VisitorModel
private EnigmeGateway $enigme_gateway; private EnigmeGateway $enigme_gateway;
private PartieGateway $partie_gateway; private PartieGateway $partie_gateway;
private UtilisateurGateway $utilisateur_gateway; private UtilisateurGateway $utilisateur_gateway;
private Nettoyage $nettoyage;
private Validation $validation;
function __construct() function __construct()
{ {
@ -13,6 +15,8 @@ class VisitorModel
$this->enigme_gateway = new EnigmeGateway(); $this->enigme_gateway = new EnigmeGateway();
$this->partie_gateway = new PartieGateway(); $this->partie_gateway = new PartieGateway();
$this->utilisateur_gateway = new UtilisateurGateway(); $this->utilisateur_gateway = new UtilisateurGateway();
$this->nettoyage = new Nettoyage();
$this->validation = new Validation();
} catch (Exception $e) { } catch (Exception $e) {
$error = $e->getMessage(); $error = $e->getMessage();
require($rep . $view['erreur']); require($rep . $view['erreur']);
@ -21,98 +25,58 @@ class VisitorModel
public function signUp() public function signUp()
{ {
global $rep, $vues, $sel, $error; global $sel, $error;
try { $email = $this->nettoyage->cleanEmail($_REQUEST['email']);
$validation = new Validation(); if (!$this->validation->ValidateEmail($email)) {
if (!$validation->ValidateEmail($_REQUEST['email'])) { $error = "Email invalides.";
$error = "Email invalides."; throw (new Exception("Email non valide"));
throw (new Exception("Email non valide")); }
} $username = $this->nettoyage->clean($_REQUEST['username']);
if (!$validation->ValidateUsername($_REQUEST['username'])) { if (!$this->validation->ValidateUsername($username)) {
$error = "Nom d'utilisateur invalides. Il ne doit pas contenir de caractère spéciaux."; $error = "Nom d'utilisateur invalides. Il ne doit pas contenir de caractère spéciaux.";
throw (new Exception("Pseudo non valide")); throw (new Exception("Pseudo non valide"));
} }
if (!$validation->ValidatePassword($_REQUEST['password'])) { $password = $this->nettoyage->clean($_REQUEST['password']);
$error = "Mots de passe invalides. Il ne doit pas dépasser 100 caractères."; if (!$this->validation->ValidatePassword($password)) {
throw (new Exception("Mot de passe non valide")); $error = "Mots de passe invalides. Il ne doit pas dépasser 100 caractères.";
} throw (new Exception("Mot de passe non valide"));
$j = $this->utilisateur_gateway->getUtilisateurByEmail($_REQUEST['email']); }
if ($j->getEmail() != "null") { $j = $this->utilisateur_gateway->getUtilisateurByEmail($email);
$error = "Email déjà utilisé."; if ($j->getEmail() != "null") {
throw (new Exception("Email déjà utilisé")); $error = "Email déjà utilisé.";
} throw (new Exception("Email déjà utilisé"));
$password = password_hash($_REQUEST['password'] . $sel, PASSWORD_DEFAULT);
$utilisateur = new Utilisateur($_REQUEST['email'], $_REQUEST['username'], $password, false);
$this->utilisateur_gateway->insert($utilisateur);
$_SESSION['role'] = 'user';
$_SESSION['utilisateur'] = $utilisateur;
require($rep . $vues['main']);
} catch (PDOException $e) {
$error = "Erreur de connexion à la base de données.";
require($rep . $vues['erreur']);
} catch (Exception $e) {
$error = $e->getMessage();
require($rep . $vues['erreur']);
} }
$password = password_hash($password . $sel, PASSWORD_DEFAULT);
$utilisateur = new Utilisateur($email, $username, $password, false);
$this->utilisateur_gateway->insert($utilisateur);
$_SESSION['role'] = 'user';
$_SESSION['utilisateur'] = $utilisateur;
} }
public function login() public function login()
{ {
global $rep, $vues, $sel, $error; global $vue, $sel, $error;
try { $email = $this->nettoyage->cleanEmail($_REQUEST['email']);
$utilisateur = $this->utilisateur_gateway->getUtilisateurByEmail($_REQUEST['email']); if (!$this->validation->ValidateEmail($email)) {
if ($utilisateur->getEmail() == "null") { $error = "Email invalides.";
$error = "Utilisateur non trouvé."; throw (new Exception("Email non valide"));
throw new Exception("Utilisateur introuvable");
}
$mdp = $this->utilisateur_gateway->getMdpByEmail($_REQUEST['email']);
if (password_verify($mdp, $_REQUEST['password'] . $sel)) {
$error = "Mot de passe incorrect.";
throw new Exception("Mot de passe invalide");
}
$estAdmin = $this->utilisateur_gateway->getEstAdminByEmail($_REQUEST['email']);
if ($estAdmin == true) {
$_SESSION['role'] = "admin";
} else {
$_SESSION['role'] = "user";
}
$_SESSION['utilisateur'] = $utilisateur;
$_SESSION['connected'] = 'true';
require($rep . $vues['main']);
} catch (Exception $e) {
require($rep . $vues['erreur']);
} }
} $utilisateur = $this->utilisateur_gateway->getUtilisateurByEmail($email);
if ($utilisateur->getEmail() == "null") {
public function goToHome() $error = "Utilisateur non trouvé.";
{ throw new Exception("Utilisateur introuvable");
global $rep, $vues, $error;
try {
require($rep . $vues['main']);
} catch (Exception $e) {
$error = "404";
require($rep . $vues['erreur']);
} }
} $mdp = $this->utilisateur_gateway->getMdpByEmail($email);
if (! password_verify($_REQUEST['password'] . $sel, $mdp)) {
public function goToLogin() $error = "Mot de passe incorrect.";
{ throw new Exception("Mot de passe invalide");
global $rep, $vues, $error;
try {
require($rep . $vues['login']);
} catch (Exception $e) {
$error = "404";
require($rep . $vues['erreur']);
} }
} $estAdmin = $this->utilisateur_gateway->getEstAdminByEmail($email);
if ($estAdmin == true) {
public function goToSignUp() $_SESSION['role'] = "admin";
{ } else {
global $rep, $vues, $error; $_SESSION['role'] = "user";
try {
require($rep . $vues['signUp']);
} catch (Exception $e) {
$error = "404";
require($rep . $vues['erreur']);
} }
$_SESSION['utilisateur'] = $utilisateur;
$_SESSION['connected'] = 'true';
} }
} }

@ -68,4 +68,3 @@ p {
font-family: "Fauna", sans-serif; font-family: "Fauna", sans-serif;
font-size: 20px; font-size: 20px;
} }

@ -0,0 +1,34 @@
//~ Function that test the user code
async function submit(){
var test = editor.getValue()+`\n
import random as r
def double_elementVerif(list):
return [i*2 for i in list]
def testDoubleElement(x):
l=[1,2,3,2,1]
if(double_element(l) != [2,4,6,4,2]):
return False
l=[9,5,7,7,9]
if(double_element(l) != [18,10,14,14,18]):
return False
l=[]
for i in range(x):
for j in range(r.randint(1,10)):
l.append(r.randint(0,9))
if(double_elementVerif(l)!=double_element(l)):
return False
l=[]
return True
print(testDoubleElement(5))
`;
exec("print ('True')", "code");
exec(test, "solution");
result.innerHTML = "Test en cours...";
await new Promise(r => setTimeout(r, 1500));
check();
}

@ -16,7 +16,6 @@ def triVerif(a,b):
return s return s
def triTest(x): def triTest(x):
tri(a,b)
a = "Hlowrd" a = "Hlowrd"
b = "el ol" b = "el ol"
if(triVerif(a,b)!=tri(a,b)): if(triVerif(a,b)!=tri(a,b)):

@ -18,12 +18,12 @@ def estTriangleDePascal(n):
return triangle return triangle
def testTriangleDePascal(n): def testTriangleDePascal(n):
TriangleDePascal(0) triangle_pascal(0)
listTest=[0,1] listTest=[0,1]
for i in range(0,n): for i in range(0,n):
listTest.append(r.randint(5,140)) listTest.append(r.randint(5,140))
for i in listTest: for i in listTest:
if(TriangleDePascal(i)!=estTriangleDePascal(i)): if(triangle_pascal(i)!=estTriangleDePascal(i)):
return False return False
return True return True

@ -70,17 +70,18 @@
Code Cesar Code Cesar
</h2> </h2>
<p> <p>
Écrire une fonction <b style="color : violet">Decrypt</b> qui prend en argument un message et une clé Écrire une fonction <b style="color : violet">Decrypt</b> qui prend en argument
et qui retourne le message décrypté avec le code <b style="color: violet;">César</b>.(les espace ne seront pas encodé.) un <b style="color: #44fff6;">message</b> et une <b style="color: #44fff6;">clé</b>
et qui retourne le message décrypté avec le code <b>César</b>.(les espace ne seront pas encodé.)
</p> </p>
<h3 class="text-left pb-3 pt-5" style="color: #44fff6">Rappel</h3> <h3 class="text-left pb-3 pt-5" style="color: #44fff6">Rappel</h3>
<p> <p>
Le code César (ou chiffre de César ) est un chiffrement par substitution, Le code <b>César</b> (ou chiffre de César ) est un chiffrement par substitution,
<br>où chaque lettre est remplacée par une autre lettre se situant un peu plus loin dans l'alphabet . <br>où chaque lettre est remplacée par une autre lettre se situant un peu plus loin dans l'alphabet .
<br>Par exemple A avec une clé 2 devient C. <br>Par exemple A avec une clé 2 devient C.
</p> </p>
<h3 class="text-left pb-3 pt-5" style="color: #44fff6">Exemple</h3> <h3 class="text-left pb-3 pt-5" style="color: #44fff6">Exemple</h3>
<p>Entrée :&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;Sortie :</p> <p><b>Entrée</b> :&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;<b>Sortie</b> :</p>
<p>'fbehu',3&emsp;&emsp;&emsp;&emsp;&emsp;&nbsp;cyber</p> <p>'fbehu',3&emsp;&emsp;&emsp;&emsp;&emsp;&nbsp;cyber</p>
<h3 <h3
class="text-left pb-3 pt-5 help" class="text-left pb-3 pt-5 help"

@ -70,17 +70,18 @@
Code Cesar Code Cesar
</h2> </h2>
<p> <p>
Écrire une fonction <b style="color : violet">Encrypt</b> qui prend en argument un message et une clé Écrire une fonction <b style="color : violet">Encrypt</b> qui prend en argument
et qui retourne le message crypté avec le code <b style="color: violet;">César</b>.(les espace ne seront pas encodé.) un <b style="color:#44fff6;">message</b> et une <b style="color:#44fff6;">clé</b>
et qui retourne le <b style="color: yellow;"> message crypté</b> avec le code <b>César</b>.(les espace ne seront pas encodé.)
</p> </p>
<h3 class="text-left pb-3 pt-5" style="color: #44fff6">Rappel</h3> <h3 class="text-left pb-3 pt-5" style="color: #44fff6">Rappel</h3>
<p> <p>
Le code César (ou chiffre de César ) est un chiffrement par substitution, Le code <b>César</b> (ou chiffre de César ) est un chiffrement par substitution,
<br>où chaque lettre est remplacée par une autre lettre se situant un peu plus loin dans l'alphabet . <br>où chaque lettre est remplacée par une autre lettre se situant un peu plus loin dans l'alphabet .
<br>Par exemple A avec une clé 2 devient C. <br>Par exemple A avec une clé 2 devient C.
</p> </p>
<h3 class="text-left pb-3 pt-5" style="color: #44fff6">Exemple</h3> <h3 class="text-left pb-3 pt-5" style="color: #44fff6">Exemple</h3>
<p>Entrée :&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;Sortie :</p> <p><b>Entrée</b> :&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;<b>Sortie</b> :</p>
<p>'fbehu',3&emsp;&emsp;&emsp;&emsp;&emsp;&nbsp;cyber</p> <p>'fbehu',3&emsp;&emsp;&emsp;&emsp;&emsp;&nbsp;cyber</p>
<h3 <h3
class="text-left pb-3 pt-5 help" class="text-left pb-3 pt-5 help"

@ -70,13 +70,15 @@
Chouette Chouette
</h2> </h2>
<p> <p>
Écrire une fonction <b style="color: violet;">chouette</b> qui, pour une valeur donnée, renvoie une <b style="color: violet;">liste</b> contenant toutes les solutions de somme de 3 dés pouvant donner cette valeur. Écrire une fonction <b style="color: violet;">chouette</b> qui, pour une <b style="color: #44fff6;">valeur</b> donnée,
</br>La valeur peut aller de 3 à 18 . renvoie une <b style="color:yellow">liste</b>
contenant toutes les solutions de somme de 3 dés pouvant donner cette <b style="color: #44fff6;">valeur</b>.
</br>La <b style="color:#44fff6;">valeur</b> peut aller de 3 à 18 .
</br>Les solutions doivent être uniques.(1,2,3) et (3,2,1) sont la même solution. </br>Les solutions doivent être uniques.(1,2,3) et (3,2,1) sont la même solution.
</p> </p>
<h3 class="text-left pb-3 pt-5" style="color: #44fff6">Exemple</h3> <h3 class="text-left pb-3 pt-5" style="color: #44fff6">Exemple</h3>
<p>Entrée : 7</p> <p><b>Entrée</b> : 7</p>
<p>Sortie : [[1,1,5],[1,2,4],[1,3,3],[2,2,3]]</p> <p><b>Sortie</b> : [[1,1,5],[1,2,4],[1,3,3],[2,2,3]]</p>
<h3 <h3
class="text-left pb-3 pt-5 help" class="text-left pb-3 pt-5 help"
style="color: #44fff6; display: none" style="color: #44fff6; display: none"

@ -70,16 +70,16 @@
Chuck Norris Chuck Norris
</h2> </h2>
<p> <p>
Coder un fonction <b style="color: violet;">binaire2unaire</b> qui prend en argument un nombre binaire Coder un fonction <b style="color: violet;">binaire2unaire</b> qui prend en argument un <b style="color: #44fff6;">nombre binaire</b>
et le code via le codage Chucknorris. et qui le retourne le <b style="color: yellow;">nombre</b> codé via le codage <b>Chuck Norris</b>.
</p> </p>
<h3 class="text-left pb-3 pt-5" style="color: #44fff6">Rappel</h3> <h3 class="text-left pb-3 pt-5" style="color: #44fff6">Rappel</h3>
<p> <p>
Dans le codage Chuck Norris, le '0' est codé '00' et le '1' est codé '0'. Puis un espace, puis ensuite autant de '0' que le message contient de '0' ou '1' successifs. Dans le codage <b>Chuck Norris</b>, le '0' est codé '00' et le '1' est codé '0'. Puis un espace, puis ensuite autant de '0' que le message contient de '0' ou '1' successifs.
<br>Par exemple, la suite "10000111" sera traduite de la façon suivante : "0 0 00 0000 0 000 <br>Par exemple, la suite "10000111" sera traduite de la façon suivante : "0 0 00 0000 0 000
</p> </p>
<h3 class="text-left pb-3 pt-5" style="color: #44fff6">Exemple</h3> <h3 class="text-left pb-3 pt-5" style="color: #44fff6">Exemple</h3>
<p>Entrée :&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;Sortie :</p> <p><b>Entrée</b> :&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;<b>Sortie</b> :</p>
<p>10000111&emsp;&emsp;&emsp;&emsp;&emsp;&nbsp;0 0 00 0000 0 000</p> <p>10000111&emsp;&emsp;&emsp;&emsp;&emsp;&nbsp;0 0 00 0000 0 000</p>
<h3 <h3
class="text-left pb-3 pt-5 help" class="text-left pb-3 pt-5 help"
@ -164,7 +164,7 @@
<h5 id="result" style="color: black"></h5> <h5 id="result" style="color: black"></h5>
</div> </div>
<div class="modal-footer"> <div class="modal-footer">
<a href="index.php?action=goToHome" class="btn" style="display: none" id="next"> <a href="index.php?action=goToHanoi" class="btn" style="display: none" id="next">
<span>NEXT</span> <span>NEXT</span>
</a> </a>
</div> </div>

@ -0,0 +1,189 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Double Element</title>
<link
rel="stylesheet"
href="https://stackpath.bootstrapcdn.com/bootstrap/5.0.0-alpha1/css/bootstrap.min.css"
integrity="sha384-r4NyP46KrjDleawBgD5tp8Y7UzmLA05oM1iAEQ17CSuDqnUK2+k9luXQOfXJCJ4I"
crossorigin="anonymous"
/>
<script
src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js"
integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo"
crossorigin="anonymous"
></script>
<script
src="https://stackpath.bootstrapcdn.com/bootstrap/5.0.0-alpha1/js/bootstrap.min.js"
integrity="sha384-oesi62hOLfzrys4LxRF63OJCXdXDipiYWBnvTl9Y9/TRlw5xlKIEHpNyvvDShgf/"
crossorigin="anonymous"
></script>
<link
rel="stylesheet"
href="https://fonts.googleapis.com/icon?family=Material+Icons"
/>
<link rel="stylesheet" href="View/src/CSS/Enigme.css" />
</head>
<body>
<div class="container-fluid px-5">
<!-- First Row -->
<div class="row py-4">
<div class="col-9 d-flex align-items-center px-0">
<a
class="material-icons pl-0"
id="home"
href="index.php?action=goToHome"
style="font-size: 40px; color: white"
>home</a
>
</div>
<button
style="background-color: transparent; border: none"
onclick="displayHelp()"
class="col-3 d-flex align-items-center"
>
<div class="col-10 text-right px-3">
<p style="font-size: 14px; color: white"><b>Besoin d'aide ?</b></p>
</div>
<div class="col-2 text-right">
<img
src="View/assets/img/Foxy.png"
alt="Logo"
class="rounded-circle moving-fox"
style="border: 1px solid #44fff6; width: 60px; height: 60px"
/>
</div>
</button>
</div>
<!-- End First Row -->
<!-- Second Row -->
<div class="row">
<!-- First Column -->
<div
class="col-3 rounded p-3"
style="background-color: #222831; min-height: 80vh; height: auto"
>
<h2 class="text-left py-3" style="color: #44fff6; font-weight: 500">
Double element
</h2>
<p>
Écrivez une fonction <b style="color : violet">double_element</b> qui prend en entrée une <b style="color: yellow;">liste de nombres</b>
et renvoie une <b style="color: yellow;">liste</b>
contenant tous les éléments de la liste d'entrée, dans le même ordre, mais en doublant chaque élément.
</p>
<h3 class="text-left pb-3 pt-5" style="color: #44fff6">Rappel</h3>
<p>
AAA
</p>
<h3 class="text-left pb-3 pt-5" style="color: #44fff6">Exemple</h3>
<p><b>Entrée</b> : [1,2,3]</p>
<p><b>Sortie</b> : [2,4,6]</p>
<h3
class="text-left pb-3 pt-5 help"
style="color: #44fff6; display: none"
>
Aide
</h3>
<p style="display: none" class="help">
AAA
</p>
</div>
<!-- End First Column -->
<!-- Second Column -->
<div class="col-5 pr-0">
<div class="ace rounded" id="editor">def double_element(list):
</div>
</div>
<!-- End Second Column -->
<!-- Third Column -->
<div class="col-4">
<textarea
id="console"
readonly
style="width: 100%; min-height: 65vh; height: auto"
class="p-3 rounded"
></textarea>
<div class="row pt-5 text-center" style="cursor: pointer">
<div class="col-6">
<a onclick="run_init()" class="btn">
<span>Run</span>
</a>
</div>
<div class="col-6">
<button
onclick="submit()"
class="btn"
data-toggle="modal"
data-target="#modal"
>
<span>Submit</span>
</button>
</div>
</div>
</div>
<!-- End Third Column -->
</div>
<!-- End Second Row -->
</div>
<!-- Modal -->
<div
class="modal fade"
id="modal"
tabindex="-1"
role="dialog"
aria-labelledby="exampleModalCenterTitle"
aria-hidden="true"
>
<div class="modal-dialog modal-dialog-centered" role="document">
<div class="modal-content">
<div class="modal-header">
<h2
class="modal-title"
id="exampleModalLongTitle"
style="color: black"
>
Results
</h2>
<button
type="button"
class="close"
data-dismiss="modal"
aria-label="Close"
>
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body">
<h5 id="result" style="color: black"></h5>
</div>
<div class="modal-footer">
<a href="index.php?action=goToHome" class="btn" style="display: none" id="next">
<span>NEXT</span>
</a>
</div>
</div>
</div>
</div>
<!-- End Modal -->
<script
src="https://ajaxorg.github.io/ace-builds/src-noconflict/ace.js"
type="text/javascript"
charset="utf-8"
></script>
<script
src="https://raw.githack.com/pythonpad/brython-runner/master/lib/brython-runner.bundle.js"
type="text/javascript"
charset="utf-8"
></script>
<script src="View/src/JS/base.js"></script>
<script src="View/src/JS/DoubleElement.js"></script>
</body>
</html>

@ -1,94 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Bootstrap Site</title>
<link
rel="stylesheet"
href="https://stackpath.bootstrapcdn.com/bootstrap/5.0.0-alpha1/css/bootstrap.min.css"
integrity="sha384-r4NyP46KrjDleawBgD5tp8Y7UzmLA05oM1iAEQ17CSuDqnUK2+k9luXQOfXJCJ4I"
crossorigin="anonymous"/>
<link rel="stylesheet" href="../../CSS/Enigmev2.css"/>
<link rel="stylesheet" href="../../CSS/Main.css">
<link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons">
<script
src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js"
integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo"
crossorigin="anonymous"></script>
<script
src="https://stackpath.bootstrapcdn.com/bootstrap/5.0.0-alpha1/js/bootstrap.min.js"
integrity="sha384-oesi62hOLfzrys4LxRF63OJCXdXDipiYWBnvTl9Y9/TRlw5xlKIEHpNyvvDShgf/"
crossorigin="anonymous"></script>
</head>
<body style="background-color: #050e15;background-image: none;">
<div class="container-fluid">
<div class="row">
<div class="col-3" style="height: auto; min-height: 100vh;">
<div class="row">
<div class="col-2 text-center pt-3">
<a id="home" href="../Home.html" >
<svg xmlns="http://www.w3.org/2000/svg" style="color: white;" width="32" height="32" fill="currentColor" class="bi bi-house-fill" viewBox="0 0 16 16">
<path d="M8.707 1.5a1 1 0 0 0-1.414 0L.646 8.146a.5.5 0 0 0 .708.708L8 2.207l6.646 6.647a.5.5 0 0 0 .708-.708L13 5.793V2.5a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5v1.293L8.707 1.5Z"/>
<path d="m8 3.293 6 6V13.5a1.5 1.5 0 0 1-1.5 1.5h-9A1.5 1.5 0 0 1 2 13.5V9.293l6-6Z"/>
</svg>
</a>
</div>
<div class="col-10 pt-1">
<h1 class="display-5" style="letter-spacing: 0.1rem;""> <!--Mettre responsive si moins de 1500px-->
Palindrome
</h1><br>
</div>
</div>
<div>
<section class="row mt-3 ">
<h2>Consigne</h2><br>
<p class="enonce">Écrire une fonction estPalindrome qui prend en argument un entier et qui renvoie True si cest un palindrome et False sinon.</p><br><br>
</section>
<section class="row mt-3">
<h2>Rappel</h2><br>
<p class="rappel">Un palindrome est un nombre qui peut se lire dans les deux sens. Par exemple 111.</p><br><br>
</section>
<section class="row mt-3">
<h2>Exemple</h2><br>
<p>Entrée :&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;Sortie :</p>
<p>[1,0,1]&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&ensp;True</p>
<p>[1,1,9,1]&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;False</p><br><br>
</section>
<section class="row mt-3">
<h2>Aide</h2><br>
<p>En python linstruction [::-1] permet dinverse une chaine de caractère. Par exemple print("ae"[::-1]) affiche : ea.</p>
</section>
</div>
</div>
<div class="col-5 h-auto py-3">
<div class='ace' id='editor'>def estPalindrome(var):
return var == var[::-1]
print(estPalindrome("abba"))
</div>
</div>
<div class="col-4 py-3">
<div class='compiler_class'>
<textarea id='console' readonly cols="100" rows="30"></textarea>
</div>
<div class="buttons">
<div>
<a onclick="run_init()" class="btn">
<span class="noAnimation">Run</span>
</a>
<a href="#m1-o" onclick="submit()" class="btn">
<span class="noAnimation">Submit</span>
</a>
</div>
</div>
</div>
</div>
</div>
<script src="https://ajaxorg.github.io/ace-builds/src-noconflict/ace.js" type="text/javascript" charset="utf-8"></script>
<script src="https://raw.githack.com/pythonpad/brython-runner/master/lib/brython-runner.bundle.js" type="text/javascript" charset="utf-8"></script>
<script src="../../JS/base.js"></script>
<script src="../../JS/palindrome.js"></script>
</body>
</html>

@ -1,95 +1,197 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"> <html lang="en">
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Hanoi</title>
<title>Palindrome</title> <link
<link rel="stylesheet" href="../../CSS/Enigme.css"/> rel="stylesheet"
<link rel="stylesheet" href="../../CSS/Home.css"> href="https://stackpath.bootstrapcdn.com/bootstrap/5.0.0-alpha1/css/bootstrap.min.css"
<link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons"> integrity="sha384-r4NyP46KrjDleawBgD5tp8Y7UzmLA05oM1iAEQ17CSuDqnUK2+k9luXQOfXJCJ4I"
<style> crossorigin="anonymous"
html{ />
background-image: url(../../../assets/img/Background5.jpg); <script
} src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js"
</style> integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo"
</head> crossorigin="anonymous"
<body> ></script>
<div class="enigme"> <script
<div class="titre_pre"> src="https://stackpath.bootstrapcdn.com/bootstrap/5.0.0-alpha1/js/bootstrap.min.js"
<div class="retour"> integrity="sha384-oesi62hOLfzrys4LxRF63OJCXdXDipiYWBnvTl9Y9/TRlw5xlKIEHpNyvvDShgf/"
<a class="material-icons" id="home" href="../Home.html" style="font-size:36px;color:white;">home</a> crossorigin="anonymous"
></script>
<link
rel="stylesheet"
href="https://fonts.googleapis.com/icon?family=Material+Icons"
/>
<link rel="stylesheet" href="View/src/CSS/Enigme.css" />
</head>
<body>
<div class="container-fluid px-5">
<!-- First Row -->
<div class="row py-4">
<div class="col-9 d-flex align-items-center px-0">
<a
class="material-icons pl-0"
id="home"
href="index.php?action=goToHome"
style="font-size: 40px; color: white"
>home</a
>
</div>
<button
style="background-color: transparent; border: none"
onclick="displayHelp()"
class="col-3 d-flex align-items-center"
>
<div class="col-10 text-right px-3">
<p style="font-size: 14px; color: white"><b>Besoin d'aide ?</b></p>
</div>
<div class="col-2 text-right">
<img
src="View/assets/img/Foxy.png"
alt="Logo"
class="rounded-circle moving-fox"
style="border: 1px solid #44fff6; width: 60px; height: 60px"
/>
</div>
</button>
</div> </div>
<div class="sign"> <!-- End First Row -->
<h1>
<span class="fast-flicker">T</span> <!-- Second Row -->
<span>our </span> <div class="row">
<span class="flicker">&nbsp;H</span> <!-- First Column -->
<span>anoi</span> <div
</h1> class="col-3 rounded p-3"
</div><br> style="background-color: #222831; min-height: 80vh; height: auto"
>
<h2 class="text-left py-3" style="color: #44fff6; font-weight: 500">
Les tours d'Hanoi
</h2>
<p>
Écrire une fonction <b style="color: violet;">hanoi</b> permettant de résoudre le problème des <b>tours dhanoi </b>
peu importe le nombre d'entrées dans la fonction. <br />
Cette fonction devra prend en paramètre le <b style="color: #44fff6;">nombre de disques</b>,
le <b style="color: #44fff6;">nom</b> de la tour de départ,
le <b style="color: #44fff6;">nom</b> la tour d'arrivée et
le <b style="color: #44fff6;">nom</b> la tour intermédiaire. <br />
Elle devra retoure une <b style="color: yellow;">liste</b> contenant les déplacements à effectuer (cf exemple ci-dessous).
</p>
<h3 class="text-left pb-3 pt-5" style="color: #44fff6">Rappel</h3>
<p>
Le problème des tours de <b>hanoi</b> est le suivant, on souhaite déplacer un certain nombre de disque de taille différente
et ils sont et doivent restés empilés de telle sorte
quaucun disque dune certaine taille n soit placé en dessous dun disque de taille plus grande
en sachant quil ny a que 3 piles.
</p>
<h3 class="text-left pb-3 pt-5" style="color: #44fff6">Exemple</h3>
<p><b>Entrée</b> :3,"A","B","C"</p>
<p><b>Sortie</b> : [['A','C'],['A','B'],['C','B'],['A','C'],['B','A'],['B','C'],['A','C']]</p>
<h3
class="text-left pb-3 pt-5 help"
style="color: #44fff6; display: none"
>
Aide
</h3>
<p style="display: none" class="help">
Pensse à utiliser une fonction récursive pour résoudre ce problème.
Pour rappel une fonction récursive est une fonction qui s'appelle elle même.
</p>
</div>
<!-- End First Column -->
<!-- Second Column -->
<div class="col-5 pr-0">
<div class="ace rounded" id="editor">def hanoi(nb_disks,start, middle, end):
</div> </div>
<h2>Consigne</h2><br> </div>
<p class="enonce"> <!-- End Second Column -->
Faire une fonction permettant de résoudre le problème des tours dhanoi peu importe le nombre d'entrées dans la fonction.
</p><br>
<h2>Rappel</h2><br>
<p class="rappel">Le problème des tours de hanoi est le suivant, on souhaite déplacer un certain nombre de disque de taille différente et ils sont et doivent restés empilés de telle sorte quaucun disque dune certaine taille n soit placé en dessous dun disque de taille plus grande en sachant quil ny a que 3 piles.
</p><br>
<h2>Exemple</h2><br>
<p>Entrée :3,"A","B","C"</p>
<p>Sortie : [['A','C'],['A','B'],['C','B'],['A','C'],['B','A'],['B','C'],['A','C']]</p>
<h2>Aide</h2><br>
<p>Une fonction récursive est une fonction qui fait appelle à elle même</p>
</div>
<div class='ace' id='editor'>def hanoi(nb_disks,start, middle, end):
l=[]
hanoi_rec(l,nb_disks,start, middle, end)
return l
def hanoi_rec(l,nb_disks, start, middle, end): <!-- Third Column -->
if nb_disks == 1: <div class="col-4">
return l.append([start,end]) <textarea
else: id="console"
hanoi_rec(l,nb_disks - 1, start, end, middle) readonly
l.append([start,end]) style="width: 100%; min-height: 65vh; height: auto"
hanoi_rec(l,nb_disks - 1, middle, start, end)</div> class="p-3 rounded"
<div class='compiler_class'> ></textarea>
<textarea id='console' readonly rows="30" cols="100"></textarea>
<div class="buttons"> <div class="row pt-5 text-center" style="cursor: pointer">
<div> <div class="col-6">
<a onclick="run_init()" class="btn"> <a onclick="run_init()" class="btn">
<span class="noAnimation">Run</span> <span>Run</span>
</a> </a>
<a href="#m1-o" onclick="submit()" class="btn"> </div>
<span class="noAnimation">Submit</span> <div class="col-6">
</a> <button
onclick="submit()"
class="btn"
data-toggle="modal"
data-target="#modal"
>
<span>Submit</span>
</button>
</div>
</div>
</div>
<!-- End Third Column -->
</div> </div>
<!-- End Second Row -->
</div> </div>
</div>
<div class="modal-container" id="m1-o" style="--m-background: transparent;"> <!-- Modal -->
<div class="modal"> <div
<div id="containerResult"> class="modal fade"
<h1 id="result"></h1> id="modal"
</div> tabindex="-1"
<div class="buttons"> role="dialog"
<div id="top"> aria-labelledby="exampleModalCenterTitle"
<a href="#" class="btn"> aria-hidden="true"
<span class="noAnimation">x</span> >
</a> <div class="modal-dialog modal-dialog-centered" role="document">
</div> <div class="modal-content">
<div id="bottom"> <div class="modal-header">
<a href="../Home.html" class="btn" id="fleche"> <h2
<span class="noAnimation">Next</span> class="modal-title"
</a> id="exampleModalLongTitle"
style="color: black"
>
Results
</h2>
<button
type="button"
class="close"
data-dismiss="modal"
aria-label="Close"
>
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body">
<h5 id="result" style="color: black"></h5>
</div>
<div class="modal-footer">
<a href="index.php?action=goToTrianglePascal" class="btn" style="display: none" id="next">
<span>NEXT</span>
</a>
</div>
</div> </div>
</div> </div>
</div> </div>
</div> <!-- End Modal -->
<script src="https://ajaxorg.github.io/ace-builds/src-noconflict/ace.js" type="text/javascript" charset="utf-8"></script>
<script src="https://raw.githack.com/pythonpad/brython-runner/master/lib/brython-runner.bundle.js" type="text/javascript" charset="utf-8"></script> <script
<script src="../../JS/base.js"></script> src="https://ajaxorg.github.io/ace-builds/src-noconflict/ace.js"
<script src="../../JS/Hanoi.js"></script> type="text/javascript"
</body> charset="utf-8"
></script>
<script
src="https://raw.githack.com/pythonpad/brython-runner/master/lib/brython-runner.bundle.js"
type="text/javascript"
charset="utf-8"
></script>
<script src="View/src/JS/base.js"></script>
<script src="View/src/JS/Hanoi.js"></script>
</body>
</html> </html>

@ -71,11 +71,12 @@
</h2> </h2>
<p> <p>
Écrire une fonction <b style="color: violet;">estPalindrome</b> qui prend en argument un Écrire une fonction <b style="color: violet;">estPalindrome</b> qui prend en argument un
entier et qui renvoie True si cest un palindrome et False sinon. <b style="color:#44fff6">entier</b> et
qui renvoie <b style="color: green;">True</b> si cest un palindrome et <b style="color: red;">False</b> sinon.
</p> </p>
<h3 class="text-left pb-3 pt-5" style="color: #44fff6">Rappel</h3> <h3 class="text-left pb-3 pt-5" style="color: #44fff6">Rappel</h3>
<p> <p>
Un <b style="color: violet;">palindrome</b> est un nombre qui reste le même si on le lit de gauche Un <b>palindrome</b> est un nombre qui reste le même si on le lit de gauche
à droite ou de droite à gauche. à droite ou de droite à gauche.
</p> </p>
<h3 class="text-left pb-3 pt-5" style="color: #44fff6">Exemple</h3> <h3 class="text-left pb-3 pt-5" style="color: #44fff6">Exemple</h3>

@ -1,102 +1,197 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"> <html lang="en">
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Triangle de Pascal</title>
<title>Palindrome</title> <link
<link rel="stylesheet" href="../../CSS/Enigme.css"/> rel="stylesheet"
<link rel="stylesheet" href="../../CSS/Home.css"> href="https://stackpath.bootstrapcdn.com/bootstrap/5.0.0-alpha1/css/bootstrap.min.css"
<link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons"> integrity="sha384-r4NyP46KrjDleawBgD5tp8Y7UzmLA05oM1iAEQ17CSuDqnUK2+k9luXQOfXJCJ4I"
<style> crossorigin="anonymous"
html{ />
background-image: url(../../../assets/img/BackgroundPalindrome.jpg); <script
} src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js"
</style> integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo"
</head> crossorigin="anonymous"
<body> ></script>
<div class="enigme"> <script
<div class="titre_pre"> src="https://stackpath.bootstrapcdn.com/bootstrap/5.0.0-alpha1/js/bootstrap.min.js"
<div class="retour"> integrity="sha384-oesi62hOLfzrys4LxRF63OJCXdXDipiYWBnvTl9Y9/TRlw5xlKIEHpNyvvDShgf/"
<a class="material-icons" id="home" href="../Home.html" style="font-size:36px;color:white;">home</a> crossorigin="anonymous"
></script>
<link
rel="stylesheet"
href="https://fonts.googleapis.com/icon?family=Material+Icons"
/>
<link rel="stylesheet" href="View/src/CSS/Enigme.css" />
</head>
<body>
<div class="container-fluid px-5">
<!-- First Row -->
<div class="row py-4">
<div class="col-9 d-flex align-items-center px-0">
<a
class="material-icons pl-0"
id="home"
href="index.php?action=goToHome"
style="font-size: 40px; color: white"
>home</a
>
</div>
<button
style="background-color: transparent; border: none"
onclick="displayHelp()"
class="col-3 d-flex align-items-center"
>
<div class="col-10 text-right px-3">
<p style="font-size: 14px; color: white"><b>Besoin d'aide ?</b></p>
</div>
<div class="col-2 text-right">
<img
src="View/assets/img/Foxy.png"
alt="Logo"
class="rounded-circle moving-fox"
style="border: 1px solid #44fff6; width: 60px; height: 60px"
/>
</div>
</button>
</div> </div>
<div class="sign"> <!-- End First Row -->
<h1>
<span class="fast-flicker">T</span> <!-- Second Row -->
<span>ria</span> <div class="row">
<span class="flicker">n</span> <!-- First Column -->
<span>gle</span> <div
</h1> class="col-3 rounded p-3"
</div><br> style="background-color: #222831; min-height: 80vh; height: auto"
>
<h2 class="text-left py-3" style="color: #44fff6; font-weight: 500">
Triangle de Pascal
</h2>
<p>
Écrire une fonction <b style="color: violet;">triangle_pascal</b> permettant dafficher le <b>triangle de Pascal</b>
jusqu'à un certain nombre <b style="color:#44fff6">n</b> de lignes.
Bien sùr <b style="color:#44fff6">n</b> sera passé en argument à la fonction.
La fonction devra renvoyer une <b style="color: yellow;">liste</b> contenant les lignes du triangle de Pascal. (cf l'exemple pour plus de détails).
</p>
<h3 class="text-left pb-3 pt-5" style="color: #44fff6">Rappel</h3>
<p>
Le triangle arithmétique de Pascal est le triangle dont la ligne d'indice n (n = 0, 1, 2...)
donne les coefficients binomiaux (n) pour p = 0, 1, 2..., n.<br/>
La construction de ce triangle de Pascal est simple,
on part de 1 à la première ligne, par convention c'est la ligne zéro (n = 0)
Pour avoir un terme de la ligne suivante, on prend le terme juste au-dessus,
et on lui additionne celui qui est juste avant, (0 si il n'y a rien).
Mathématiquement, on applique la formule :<br/>
(n+1) = (n) + ( n )
</p>
<h3 class="text-left pb-3 pt-5" style="color: #44fff6">Exemple</h3>
<p><b>Entrée</b> : 4</p>
<p><b>Sortie</b> : [[1],[1,1],[1,2,1],[1,3,3,1]]</p><br>
<h3
class="text-left pb-3 pt-5 help"
style="color: #44fff6; display: none"
>
Aide
</h3>
<p style="display: none" class="help">
Il n'y a pas d'aide pour cette énigme.
</p>
</div>
<!-- End First Column -->
<!-- Second Column -->
<div class="col-5 pr-0">
<div class="ace rounded" id="editor">def triangle_pascal(n):
</div> </div>
<h2>Consigne</h2><br> </div>
<p class="enonce"> <!-- End Second Column -->
Faire une fonction triangle_pascal permettant dafficher le triangle de Pascal jusqu'à un certain nombre n de lignes. Bien sùr n sera passé en argument à la fonction.
</p><br> <!-- Third Column -->
<h2>Exemple</h2><br> <div class="col-4">
<p>Entrée : 4</p> <textarea
<p>Sortie : [[1],[1,1],[1,2,1],[1,3,3,1]]</p><br> id="console"
<h2>Aide</h2><br> readonly
<p>Le triangle arithmétique de Pascal est le triangle dont la ligne d'indice n (n = 0, 1, 2...) donne les coefficients binomiaux (n) pour p = 0, 1, 2..., n. style="width: 100%; min-height: 65vh; height: auto"
(p) class="p-3 rounded"
La construction de ce triangle de Pascal est simple, ></textarea>
on part de 1 à la première ligne, par convention c'est la ligne zéro (n = 0)
Pour avoir un terme de la ligne suivante, on prend le terme juste au-dessus, et on lui additionne celui qui est juste avant, (0 si il n'y a rien). <div class="row pt-5 text-center" style="cursor: pointer">
Mathématiquement, on applique la formule : <div class="col-6">
(n+1) = (n) + ( n ) <a onclick="run_init()" class="btn">
( p ) (p) (p-1) <span>Run</span>
</p> </a>
</div> </div>
<div class='ace' id='editor'>def TriangleDePascal(n): <div class="col-6">
if(n==0): <button
return [] onclick="submit()"
if(n==1): class="btn"
return [[1]] data-toggle="modal"
triangle=[[1],[1, 1]] data-target="#modal"
columns=n >
for line in range(2,n): <span>Submit</span>
triangle.append([1]) </button>
for column in range(1, line): </div>
triangle[line].append(triangle[line - 1][column - 1] + triangle[line - 1][column]) </div>
triangle[line].append(1) </div>
return triangle <!-- End Third Column -->
</div>
<div class='compiler_class'>
<textarea id='console' readonly rows="30" cols="100"></textarea>
<div class="buttons">
<div>
<a onclick="run_init()" class="btn">
<span class="noAnimation">Run</span>
</a>
<a href="#m1-o" onclick="submit()" class="btn">
<span class="noAnimation">Submit</span>
</a>
</div> </div>
<!-- End Second Row -->
</div> </div>
</div>
<div class="modal-container" id="m1-o" style="--m-background: transparent;"> <!-- Modal -->
<div class="modal"> <div
<div id="containerResult"> class="modal fade"
<h1 id="result"></h1> id="modal"
</div> tabindex="-1"
<div class="buttons"> role="dialog"
<div id="top"> aria-labelledby="exampleModalCenterTitle"
<a href="#" class="btn"> aria-hidden="true"
<span class="noAnimation">x</span> >
</a> <div class="modal-dialog modal-dialog-centered" role="document">
</div> <div class="modal-content">
<div id="bottom"> <div class="modal-header">
<a href="Hanoi.html" class="btn" id="fleche"> <h2
<span class="noAnimation">Next</span> class="modal-title"
</a> id="exampleModalLongTitle"
style="color: black"
>
Results
</h2>
<button
type="button"
class="close"
data-dismiss="modal"
aria-label="Close"
>
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body">
<h5 id="result" style="color: black"></h5>
</div>
<div class="modal-footer">
<a href="index.php?action=goToHome" class="btn" style="display: none" id="next">
<span>NEXT</span>
</a>
</div>
</div> </div>
</div> </div>
</div> </div>
</div> <!-- End Modal -->
<script src="https://ajaxorg.github.io/ace-builds/src-noconflict/ace.js" type="text/javascript" charset="utf-8"></script>
<script src="https://raw.githack.com/pythonpad/brython-runner/master/lib/brython-runner.bundle.js" type="text/javascript" charset="utf-8"></script> <script
<script src="../../JS/base.js"></script> src="https://ajaxorg.github.io/ace-builds/src-noconflict/ace.js"
<script src="../../JS/TrianglePascal.js"></script> type="text/javascript"
</body> charset="utf-8"
></script>
<script
src="https://raw.githack.com/pythonpad/brython-runner/master/lib/brython-runner.bundle.js"
type="text/javascript"
charset="utf-8"
></script>
<script src="View/src/JS/base.js"></script>
<script src="View/src/JS/TrianglePascal.js"></script>
</body>
</html> </html>

@ -39,7 +39,7 @@
class="m-1 text-uppercase" class="m-1 text-uppercase"
style="color: #44fff6; font-weight: bold; font-size: 22px" style="color: #44fff6; font-weight: bold; font-size: 22px"
> >
1/12 1/10
</h5> </h5>
</div> </div>
<div class="nav-link"> <div class="nav-link">
@ -84,7 +84,6 @@
<p> <p>
Appuie sur le button <b style="color: red;">Run</b> pour executer ton code. Appuie sur le button <b style="color: red;">Run</b> pour executer ton code.
</p> </p>
<!-- <code>print("Hello World !")</code> -->
</section> </section>
</div> </div>
<div class="col-2 align-self-center"> <div class="col-2 align-self-center">

@ -39,11 +39,11 @@
class="m-1 text-uppercase" class="m-1 text-uppercase"
style="color: #44fff6; font-weight: bold; font-size: 22px" style="color: #44fff6; font-weight: bold; font-size: 22px"
> >
10/12 10/10
</h5> </h5>
</div> </div>
<div class="nav-link"> <div class="nav-link">
<a class="navbar-brand" href="index.php?action=goToEnigme">Next</a> <a class="navbar-brand" href="#" style="color: gray;">Next</a>
</div> </div>
</div> </div>
</nav> </nav>
@ -83,6 +83,25 @@
<p> <p>
Tant que la liste ne contient pas 5 éléments, on ajoute un élément. Tant que la liste ne contient pas 5 éléments, on ajoute un élément.
</p> </p>
<p>
Bien je te propose de passer ton dernier test de qualification.
Tu dois coder la fonction <b style="color: violet;">tri</b>.
Cette fonction prend en paramètre deux <b style="color: yellow;">chaine de caractère</b>,
remet les lettres dans l'orde et
retourne la <b style="color: yellow;">chaine de caractère</b>.
Voici un exemple pour que tu comprennes mieux :
</p>
<code style="font-size: 18px">
def tri(a,b) :<br/>
&nbsp;&nbsp;# ton code ici<br/><br/>
a = "Hlowrd"<br/>
b = "el ol"<br/>
print(trie(a,b)) -> retourne "Hello World"
</code>
<br></br>
<p>
La fonction <b style="color: violet;">tri</b> prend tour a tour les lettres de a et b.
</p>
</section> </section>
</div> </div>
<div class="col-2 align-self-center"> <div class="col-2 align-self-center">
@ -102,7 +121,8 @@
<div class="row mt-5"> <div class="row mt-5">
<!-- Editor --> <!-- Editor -->
<div class="col-8"> <div class="col-8">
<div class="ace rounded ace-1" id="editor" style="min-height: 40vh"></div> <div class="ace rounded ace-1" id="editor" style="min-height: 40vh">def tri(a,b):
</div>
</div> </div>
<!-- End Editor --> <!-- End Editor -->
@ -177,7 +197,7 @@
<h5 id="result" style="color: black"></h5> <h5 id="result" style="color: black"></h5>
</div> </div>
<div class="modal-footer"> <div class="modal-footer">
<a href="index.php?action=goToNext&num=9" class="btn" style="display: none" id="next"> <a href="index.php?action=goToEnigme" class="btn" style="display: none" id="next">
<span>NEXT</span> <span>NEXT</span>
</a> </a>
</div> </div>
@ -196,5 +216,6 @@
charset="utf-8" charset="utf-8"
></script> ></script>
<script src="View/src/JS/base.js"></script> <script src="View/src/JS/base.js"></script>
<script src="View/src/JS/String.js"></script>
</body> </body>
</html> </html>

@ -39,7 +39,7 @@
class="m-1 text-uppercase" class="m-1 text-uppercase"
style="color: #44fff6; font-weight: bold; font-size: 22px" style="color: #44fff6; font-weight: bold; font-size: 22px"
> >
2/12 2/10
</h5> </h5>
</div> </div>
<div class="nav-link"> <div class="nav-link">

@ -39,7 +39,7 @@
class="m-1 text-uppercase" class="m-1 text-uppercase"
style="color: #44fff6; font-weight: bold; font-size: 22px" style="color: #44fff6; font-weight: bold; font-size: 22px"
> >
3/12 3/10
</h5> </h5>
</div> </div>
<div class="nav-link"> <div class="nav-link">

@ -39,7 +39,7 @@
class="m-1 text-uppercase" class="m-1 text-uppercase"
style="color: #44fff6; font-weight: bold; font-size: 22px" style="color: #44fff6; font-weight: bold; font-size: 22px"
> >
4/12 4/10
</h5> </h5>
</div> </div>
<div class="nav-link"> <div class="nav-link">

@ -39,7 +39,7 @@
class="m-1 text-uppercase" class="m-1 text-uppercase"
style="color: #44fff6; font-weight: bold; font-size: 22px" style="color: #44fff6; font-weight: bold; font-size: 22px"
> >
5/12 5/10
</h5> </h5>
</div> </div>
<div class="nav-link"> <div class="nav-link">

@ -39,11 +39,11 @@
class="m-1 text-uppercase" class="m-1 text-uppercase"
style="color: #44fff6; font-weight: bold; font-size: 22px" style="color: #44fff6; font-weight: bold; font-size: 22px"
> >
6/12 6/10
</h5> </h5>
</div> </div>
<div class="nav-link"> <div class="nav-link">
<a class="navbar-brand" href="index.php?action=goToNext&num=7">Next</a> <a class="navbar-brand" href="#" style="color: gray;">Next</a>
</div> </div>
</div> </div>
</nav> </nav>
@ -75,7 +75,8 @@
<p> <p>
Comme d'habitue, tu peux tester ton code en cliquant sur le bouton <b style="color: red;">Run</b>. Comme d'habitue, tu peux tester ton code en cliquant sur le bouton <b style="color: red;">Run</b>.
Si tu es sur que ton code est bon, clique sur le bouton <b style="color: green;">Submit</b> Si tu es sur que ton code est bon, clique sur le bouton <b style="color: green;">Submit</b>
pour valider ton test. pour valider ton test. J'ai pris son de désactiver le bouton <b style="color:#44fff6;">Next</b>
afin que tu ne puisses pas passer à la prochaine étape avant d'avoir terminé ce test.
</p> </p>
</section> </section>
</div> </div>

@ -39,7 +39,7 @@
class="m-1 text-uppercase" class="m-1 text-uppercase"
style="color: #44fff6; font-weight: bold; font-size: 22px" style="color: #44fff6; font-weight: bold; font-size: 22px"
> >
7/12 7/10
</h5> </h5>
</div> </div>
<div class="nav-link"> <div class="nav-link">

@ -39,11 +39,11 @@
class="m-1 text-uppercase" class="m-1 text-uppercase"
style="color: #44fff6; font-weight: bold; font-size: 22px" style="color: #44fff6; font-weight: bold; font-size: 22px"
> >
8/12 8/10
</h5> </h5>
</div> </div>
<div class="nav-link"> <div class="nav-link">
<a class="navbar-brand" href="index.php?action=goToNext&num=9">Next</a> <a class="navbar-brand" href="#" style="color: gray;">Next</a>
</div> </div>
</div> </div>
</nav> </nav>

@ -39,7 +39,7 @@
class="m-1 text-uppercase" class="m-1 text-uppercase"
style="color: #44fff6; font-weight: bold; font-size: 22px" style="color: #44fff6; font-weight: bold; font-size: 22px"
> >
9/12 9/10
</h5> </h5>
</div> </div>
<div class="nav-link"> <div class="nav-link">

@ -0,0 +1,196 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>First Test</title>
<link
rel="stylesheet"
href="https://stackpath.bootstrapcdn.com/bootstrap/5.0.0-alpha1/css/bootstrap.min.css"
integrity="sha384-r4NyP46KrjDleawBgD5tp8Y7UzmLA05oM1iAEQ17CSuDqnUK2+k9luXQOfXJCJ4I"
crossorigin="anonymous"
/>
<script
src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js"
integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo"
crossorigin="anonymous"
></script>
<script
src="https://stackpath.bootstrapcdn.com/bootstrap/5.0.0-alpha1/js/bootstrap.min.js"
integrity="sha384-oesi62hOLfzrys4LxRF63OJCXdXDipiYWBnvTl9Y9/TRlw5xlKIEHpNyvvDShgf/"
crossorigin="anonymous"
></script>
<link rel="stylesheet" href="View/src/CSS/FirstTest.css" />
</head>
<body>
<nav class="navbar navbar-expand-lg navbar-dark pb-5">
<div class="container-fluid mx-0">
<div class="nav-item nav-link">
<a class="navbar-brand" href="index.php?action=goToHome">Home</a>
</div>
<div class="mx-auto d-flex">
<h5
class="m-1 text-uppercase"
style="color: #fff; font-weight: bold; font-size: 22px"
>
Test de qualification
</h5>
<h5
class="m-1 text-uppercase"
style="color: #44fff6; font-weight: bold; font-size: 22px"
>
9/10
</h5>
</div>
<div class="nav-link">
<a class="navbar-brand" href="index.php?action=goToNext&num=10">Next</a>
</div>
</div>
</nav>
<div class="container">
<!-- First Test -->
<div
class="row rounded p-3 m-3"
style="
background: #16222a; /* fallback for old browsers */
background: -webkit-linear-gradient(
to right,
#3a6073,
#16222a
); /* Chrome 10-25, Safari 5.1-6 */
background: linear-gradient(to right, #3a6073, #16222a);
"
>
<div class="row">
<div class="col-10">
<section
style="background-color: #222831; min-height: 0"
class="p-3 rounded m-0">
<p>
Durant le test précédent, tu as découvert l'instruction <b style="color : violet">for</b>.
Nous l'avons aborder que briévement, mais il est temps de l'étudier plus en détail.<br/>
La boucle <b style="color : violet">for</b> est une boucle qui permet de répéter un bloc d'instruction un nombre défini de fois.<br/>
On précise après le mot-clé <b style="color : violet">for</b> le nom dune variable
qui prendra successivement toutes les valeurs qui sont données après le mot-clé <b style="color : violet">in</b>.<br/>
Il est possible dobtenir le même résultat sans donner de liste de valeurs, mais en utilisant la fonction <b style="color : violet">range()</b>.
</p>
<p>
Voici un exemple de code.
</p>
<code style="font-size: 18px">
list = [1, 2, 3, 4, 5]<br/>
for i in list:<br/>
&nbsp;&nbsp;print(i+2)<br/>
<br/>
for j in range(5):<br/>
&nbsp;&nbsp;print(j)<br/>
<br/>
for k in range(1, 5):<br/>
&nbsp;&nbsp;print(k)<br/>
<br/>
for l in range(0, 5, 2):<br/>
&nbsp;&nbsp;print(l)<br/>
<br/>
for m in range(5, 0, -1):<br/>
&nbsp;&nbsp;print(m)<br/>
<br/>
for n in range(len("toto"))):<br/>
&nbsp;&nbsp;print(n)<br/>
</code>
<br></br>
<p>
Je te laisse expérimenter par toi même.
</p>
</section>
</div>
<div class="col-2 align-self-center">
<img
src="View/assets/img/Foxy.png"
alt="Logo"
class="img-fluid rounded-circle"
style="
border: 2px solid #44fff6;
background-image: url('View/src/assets/img/BackgroundMain.jpg');
background-size: cover;
background-position: center;
"
/>
</div>
</div>
<div class="row mt-5">
<!-- Editor -->
<div class="col-8">
<div class="ace rounded ace-1" id="editor" style="min-height: 40vh">list = [1, 2, 3, 4, 5]
print("Boucle for dans une liste : ")
for i in list:
print(i+2)
print("")
print("Boucle for dans avec range (5): ")
for j in range(5):
print(j)
print("")
print("Boucle for dans avec range (1, 5): ")
for k in range(1, 5):
print(k)
print("")
print("Boucle for dans avec range (0, 5, 2): ")
for l in range(1, 5, 2):
print(l)
print("")
print("Boucle for dans avec range (5, 0, -1): ")
for m in range(5, 0, -1):
print(m)
print("")
print("Boucle for sur un len() : ")
for n in range(len("toto")):
print(n)</div>
</div>
<!-- End Editor -->
<!-- Console -->
<div class="col-4" style="min-height: 40vh">
<textarea
id="console"
readonly
style="width: 100%; height: 60%"
class="p-3 rounded"
></textarea>
<!-- End Return Code -->
<!-- Buttons -->
<div
class="row pt-5 text-center"
style="cursor: pointer; height: 20%"
>
<div class="col">
<a onclick="run_init()" class="btn">
<span>Run</span>
</a>
</div>
</div>
<!-- End Buttons -->
</div>
<!-- End Console -->
</div>
</div>
<!-- End First Test -->
</div>
<script
src="https://ajaxorg.github.io/ace-builds/src-noconflict/ace.js"
type="text/javascript"
charset="utf-8"
></script>
<script
src="https://raw.githack.com/pythonpad/brython-runner/master/lib/brython-runner.bundle.js"
type="text/javascript"
charset="utf-8"
></script>
<script src="View/src/JS/base.js"></script>
</body>
</html>

@ -76,7 +76,7 @@
<p> <p>
Pour cela je vais te demander de réaliser des missions pour moi. Pour cela je vais te demander de réaliser des missions pour moi.
Mais tout d'abord, tu dois passer un test de qualification. Si Mais tout d'abord, tu dois passer un test de qualification. Si
vous réussissez, vous pourrez m'aider à protéger mon code tu réussis, tu pouras m'aider à protéger mon code
source. source.
</p> </p>
</section> </section>

@ -3,7 +3,7 @@ require_once('./Config/Config.php');
require_once('./Config/Autoload.php'); require_once('./Config/Autoload.php');
Autoload::charger(); Autoload::charger();
echo "test1\n"; // echo "test1\n";
// try { // try {
// $con = new Connection($dsn); // $con = new Connection($dsn);

Loading…
Cancel
Save