From 453ad1b116a1710c992ed3abeeb8e6b276a04884 Mon Sep 17 00:00:00 2001
From: Pierre
Date: Sat, 22 Oct 2022 19:18:21 +0200
Subject: [PATCH] Python hanoi + pascal Mise en page
---
EnigmePython/hanoi.py | 21 ++++-
WEB/src/JS/Hanoi.js | 37 ++++++++
WEB/src/JS/TrianglePascal.js | 38 +++++++++
WEB/src/JS/cesarDecrypt.js | 4 +-
WEB/src/pages/Enigme/CesarDecrypt.html | 15 ++--
WEB/src/pages/Enigme/CesarEncrypt.html | 13 ++-
WEB/src/pages/Enigme/Chouette.html | 3 +
WEB/src/pages/Enigme/ChuckNorris.html | 7 +-
WEB/src/pages/Enigme/Hanoi.html | 95 +++++++++++++++++++++
WEB/src/pages/Enigme/TrianglePascal.html | 102 +++++++++++++++++++++++
10 files changed, 309 insertions(+), 26 deletions(-)
create mode 100644 WEB/src/JS/Hanoi.js
create mode 100644 WEB/src/JS/TrianglePascal.js
create mode 100644 WEB/src/pages/Enigme/Hanoi.html
create mode 100644 WEB/src/pages/Enigme/TrianglePascal.html
diff --git a/EnigmePython/hanoi.py b/EnigmePython/hanoi.py
index 455e8dc9..f0476896 100644
--- a/EnigmePython/hanoi.py
+++ b/EnigmePython/hanoi.py
@@ -1,17 +1,32 @@
+import random as r
def hanoi(nb_disks,start, middle, end):
l=[]
hanoi_rec(l,nb_disks,start, middle, end)
return l
+def hanoiVerif(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):
- if nb_disks == 1:
+ if(nb_disks == 1):
return l.append([start,end])
else:
hanoi_rec(l,nb_disks - 1, start, end, middle)
l.append([start,end])
hanoi_rec(l,nb_disks - 1, middle, start, end)
-
-print(hanoi(4,"A","B","C"))
+def testhanoi(x):
+ if(hanoi(3,"A","B","C")!=[['A','C'],['A','B'],['C','B'],['A','C'],['B','A'],['B','C'],['A','C']]):
+ return False
+ for i in range(x):
+ j=r.randint(1,4)
+ if(hanoi(j,"Z","E","R")!=hanoiVerif(j,"Z","E","R")):
+ return False
+ return True
+
+print(testhanoi(5))
diff --git a/WEB/src/JS/Hanoi.js b/WEB/src/JS/Hanoi.js
new file mode 100644
index 00000000..845484c5
--- /dev/null
+++ b/WEB/src/JS/Hanoi.js
@@ -0,0 +1,37 @@
+//~ Function that test the user code
+
+async function submit(){
+ var test = editor.getValue()+`\n
+import random as r
+def hanoi_rec(l,nb_disks, start, middle, end):
+ if(nb_disks == 1):
+ return l.append([start,end])
+ else:
+ hanoi_rec(l,nb_disks - 1, start, end, middle)
+ l.append([start,end])
+ hanoi_rec(l,nb_disks - 1, middle, start, end)
+
+def hanoiVerif(nb_disks,start, middle, end):
+ l=[]
+ hanoi_rec(l,nb_disks,start, middle, end)
+ return l
+
+def testhanoi(x):
+ if(hanoi(3,"A","B","C")!=[['A','C'],['A','B'],['C','B'],['A','C'],['B','A'],['B','C'],['A','C']]):
+ return False
+ for i in range(x):
+ j=r.randint(1,4)
+ if(hanoi(j,"Z","E","R")!=hanoiVerif(j,"Z","E","R")):
+ return False
+ return True
+
+print(testhanoi(5))
+ `;
+ exec("print ('True')", "code");
+ exec(test, "solution");
+ result.innerHTML = "Test en cours...";
+ await new Promise(r => setTimeout(r, 1500));
+ check();
+}
+
+
\ No newline at end of file
diff --git a/WEB/src/JS/TrianglePascal.js b/WEB/src/JS/TrianglePascal.js
new file mode 100644
index 00000000..73b9a44c
--- /dev/null
+++ b/WEB/src/JS/TrianglePascal.js
@@ -0,0 +1,38 @@
+//~ Function that test the user code
+
+async function submit(){
+ var test = editor.getValue()+`\n
+import random as r
+def estTriangleDePascal(n):
+ if(n==0):
+ return []
+ if(n==1):
+ return [[1]]
+ triangle=[[1],[1, 1]]
+ columns=n
+ for line in range(2,n):
+ triangle.append([1])
+ for column in range(1, line):
+ triangle[line].append(triangle[line - 1][column - 1] + triangle[line - 1][column])
+ triangle[line].append(1)
+ return triangle
+
+def testTriangleDePascal(n):
+ listTest=[0,1]
+ for i in range(0,n):
+ listTest.append(r.randint(5,140))
+ for i in listTest:
+ if(TriangleDePascal(i)!=estTriangleDePascal(i)):
+ return False
+ return True
+
+print(testTriangleDePascal(5))
+ `;
+ exec("print ('True')", "code");
+ exec(test, "solution");
+ result.innerHTML = "Test en cours...";
+ await new Promise(r => setTimeout(r, 1500));
+ check();
+}
+
+
\ No newline at end of file
diff --git a/WEB/src/JS/cesarDecrypt.js b/WEB/src/JS/cesarDecrypt.js
index ec4b11c4..19526772 100644
--- a/WEB/src/JS/cesarDecrypt.js
+++ b/WEB/src/JS/cesarDecrypt.js
@@ -16,9 +16,9 @@ def DecryptVerif(text, key):
return result
def testDecrypte(x):
- if(Decrypt("Hello world",2)!="Jgnnq yqtnf"):
+ if(Decrypt("Jgnnq yqtnf",2)!="Hello world"):
return False
- if(Decrypt("Scripted",9)!="Blarycnm"):
+ if(Decrypt("Blarycnm",9)!="Scripted"):
return False
for i in range(x):
l=""
diff --git a/WEB/src/pages/Enigme/CesarDecrypt.html b/WEB/src/pages/Enigme/CesarDecrypt.html
index c5a115e3..5d08542f 100644
--- a/WEB/src/pages/Enigme/CesarDecrypt.html
+++ b/WEB/src/pages/Enigme/CesarDecrypt.html
@@ -32,19 +32,16 @@
Consigne
Écrire une fonction Decrypt qui prend en argument un essage crypté et une clé et qui retourne le message decrypté avec le code César.(les espace ne seront pas encodé.)
-
+
Rappel
-
Le code César (ou chiffre de César ) est un chiffrement par substitution,
- où chaque lettre est remplacée par une autre lettre se situant un peu plus loin dans l'alphabet .
- Par exemple A avec une clé 2 devient C.
-
+
Le code César (ou chiffre de César ) est un chiffrement par substitution, où chaque lettre est remplacée par une autre lettre se situant un peu plus loin dans l'alphabet. Par exemple A avec une clé 2 devient C.
+
Exemple
Entrée : Sortie :
-
[cyber,3] fbehu
+
'fbehu',3 cyber
Aide
- La fonction ord(char) de python permet de retourner l’Unicode(standard d’encodage de caractères) d'un caractère.
- Par exemple, ord('a') retourné '97' et ord('b’) retourne 98.
+ La fonction ord(char) de python permet de retourner l’Unicode (standard d’encodage de caractères) d'un caractère. Par exemple, ord('a') retourné '97' et ord('b’) retourne 98.
Écrire une fonction Encrypt qui prend en argument un message et une clé et qui retourne le message crypté avec le code César.(les espace ne seront pas encodé.)
-
+
Rappel
-
Le code César (ou chiffre de César ) est un chiffrement par substitution,
- où chaque lettre est remplacée par une autre lettre se situant un peu plus loin dans l'alphabet .
- Par exemple A avec une clé 2 devient C.
-
+
Le code César (ou chiffre de César ) est un chiffrement par substitution, où chaque lettre est remplacée par une autre lettre se situant un peu plus loin dans l'alphabet. Par exemple A avec une clé 2 devient C.
+
Exemple
Entrée : Sortie :
-
[fbehu,3] cyber
+
[fbehu,3] cyber
Aide
- La fonction ord(char) de python permet de retourner l’Unicode(standard d’encodage de caractères) d'un caractère.
- Par exemple, ord('a') retourné '97' et ord('b’) retourne 98.
+ La fonction ord(char) de python permet de retourner l’Unicode (standard d’encodage de caractères) d'un caractère. Par exemple, ord('a') retourné '97' et ord('b’) retourne 98.
def Encrypt(text, key):
diff --git a/WEB/src/pages/Enigme/Chouette.html b/WEB/src/pages/Enigme/Chouette.html
index fff36013..99764671 100644
--- a/WEB/src/pages/Enigme/Chouette.html
+++ b/WEB/src/pages/Enigme/Chouette.html
@@ -35,6 +35,9 @@
La valeur peut aller de 3 à 18 .
Les solutions doivent être uniques.(1,2,3) et (3,2,1) sont la même solution.
+
Exemple
+
Entrée : 7
+
Sortie : [[1,1,5],[1,2,4],[1,3,3],[2,2,3]]
Aide
On cherche à savoir si la somme de 3 dés (trois variables allant de 1 à 6) est égale à une valeur donné.
Pour cela on peut utiliser la structure suivante on d1 ( le premier dé) va varier de 1 à 6.
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.
- Par exemple, la suite "10000111" sera traduite de la façon suivante : "0 0 00 0000 0 000
Exemple
-
Entrée : Sortie :
-
10000111 0 0 00 0000 0 000
+
Entrée : 10000111
+
Sortie : 0 0 00 0000 0 000
Aide
-
?
+
En python une chaine de caractères se comporte comme une liste, il est donc possible d'utilisé les indexes pour accéder à un element
+ Faire une fonction permettant de résoudre le problème des tours d’hanoi peu importe le nombre d'entrées dans la fonction.
+
+
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 qu’aucun disque d’une certaine taille n soit placé en dessous d’un disque de taille plus grande en sachant qu’il n’y a que 3 piles.
+
+ Faire une fonction triangle_pascal permettant d’afficher le triangle de Pascal jusqu'à un certain nombre n de lignes. Bien sùr n sera passé en argument à la fonction.
+
+
Exemple
+
Entrée : 4
+
Sortie : [[1],[1,1],[1,2,1],[1,3,3,1]]
+
Aide
+
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.
+ (p)
+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 :
+(n+1) = (n) + ( n )
+( p ) (p) (p-1)
+
+
+
def TriangleDePascal(n):
+ if(n==0):
+ return []
+ if(n==1):
+ return [[1]]
+ triangle=[[1],[1, 1]]
+ columns=n
+ for line in range(2,n):
+ triangle.append([1])
+ for column in range(1, line):
+ triangle[line].append(triangle[line - 1][column - 1] + triangle[line - 1][column])
+ triangle[line].append(1)
+ return triangle
+