INSERT INTO Utilisateur VALUES('admin@gmail.com','Admin','$2y$10$0uRkVGPIop.lWuF.QYXwJe8dTXPULbOadgZ49JgdFlq2Ywi3QHZHO',1);;
INSERT INTO Utilisateur VALUES('no@gmail.com','Noé','$2y$10$mZoWHkT./GEqnXnKUXrO8e8NTl7gE5QybjU/9mwty1M7KZDTAFYPi',0);
INSERT INTO Utilisateur VALUES('na@gmail.com','Nathan','$2y$10$G9eR4c36K9Sev5MYWsBfOOU24KsE2MgH.DvA7yghYC1wXo/gxxug2',0);
INSERT INTO Utilisateur VALUES('jo@gmail.com','Johan','$2y$10$hFlnpJeVVHwiwA2M6RZlJO15R6fbnYr85lvzgCcbk25KTXi/jBta6',0);
INSERT INTO Utilisateur VALUES('pascal.lafourcade@uca.fr','Pascal','$2y$10$dtyXN7Lwv0GFhP6TaMHYq.n2M02RZXpnKtpCd72HdxhE93YGxrvB6',0);

INSERT INTO Enigme VALUES(3,'CesarEncrypt','Écrire une fonction <b style="color : violet">Encrypt</b> qui prend en argument 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é.)','Alors, la fonction ord(char) de python permet de retourner l''Unicode (standard d’encodage de caractères) d''un caractère.<br/>Par exemple, ord(''a'') retourne ''97'' et ord(''b'')) retourne ''98''.','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>Par exemple A avec une clé 2 devient C.','<b>Entrée</b> :      <b>Sortie</b> :<br>''cyber'',3      fbehu',replace(replace('def EncryptVerif(text, key):\r\n    result = ""\r\n    for i in range(len(text)):\r\n        char = text[i]\r\n        if(char==" "):\r\n            result+=" "\r\n        elif (char.isupper()):\r\n            result += chr((ord(char) + key-65) % 26 + 65)\r\n        else:\r\n            result += chr((ord(char) + key - 97) % 26 + 97)\r\n    return result','\r',char(13)),'\n',char(10)),replace(replace('Import random as r\r\ndef testEncrypte(x):\r\n    Encrypt("",1)\r\n    if(Encrypt("Hello world",2)!="Jgnnq yqtnf"):\r\n        return False\r\n    if(Encrypt("Scripted",9)!="Blarycnm"):\r\n        return False\r\n    for i in range(x):\r\n        l=""\r\n        cle=r.randint(1,26)\r\n        for i in range(r.randint(1,10)):\r\n            l+=chr(r.randint(97,122))\r\n        if(Encrypt(l,cle)!=EncryptVerif(l,cle)):\r\n            return False\r\n    return True\r\n  \r\nprint(testEncrypte(5))','\r',char(13)),'\n',char(10)),2,0,0,'def Encrypt(text, key):');
INSERT INTO Enigme VALUES(4,'Chouette','Écrire une fonction <b style="color: violet;">chouette</b> qui, pour une <b style="color: #44fff6;">valeur</b> donnée, renvoie une <b style="color:yellow">liste</b> contenant toutes les combinaisons possible avec 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.',replace(replace('On cherche à savoir si la somme de 3 dés (trois variables allant de 1 à 6) est égale à une valeur donnée.\r\n<br /> On peut donc faire une boucle imbriquée pour tester toutes les combinaisons possibles. Si la somme est égale à la valeur donnée, on l''ajoute à la liste.\r\n<br /> Pour éviter les doublons, on peut trier les valeurs avant de l''ajouter à la liste.\r\n\r\n<br><code style="font-size: 18px"> for d1 in range(1, 7):<br>   for d2 in range (1, 7):<br>     #Faire...</code>','\r',char(13)),'\n',char(10)),'Il n''y a pas de rappel pour cette énigme.','<b>Entrée</b> : 7</p><p><b>Sortie</b> : [[1,1,5],[1,2,4],[1,3,3],[2,2,3]]',replace(replace('def chouetteVerif(valeur): \r\n  res=list() \r\n  for i in range(1, 7): \r\n    for j in range(i, 7): \r\n      for k in range(j, 7): \r\n        if (i+j+k) == valeur: \r\n
 res.append([i, j, k]) \r\n  return res','\r',char(13)),'\n',char(10)),replace(replace('import random as r\r\ndef test_chouette(n):\r\n  chouette(1)\r\n  listTest=[]\r\n  for i in range(0,n):\r\n    listTest.append(r.randint(3,18))\r\n  for i in listTest:\r\n    listVerif=chouette(i)\r\n    listUser=chouetteVerif(i)\r\n    for i in listUser:\r\n        if(i not in listVerif):\r\n            return False\r\n    for i in listVerif:\r\n        if(i not in listUser):\r\n
   return False\r\n  return True\r\n\r\nprint(test_chouette(5))','\r',char(13)),'\n',char(10)),6,0,0,'def chouette(valeur):');
INSERT INTO Enigme VALUES(5,'Palindrome','Écrire une fonction <b style="color: violet;">estPalindrome(var)</b> qui prend en argument une <b style="color:#44fff6">chaine de caractère</b> et qui renvoie <b style="color: green;">True</b> si c’est un palindrome et <b style="color: red;">False</b> sinon.','En python l’instruction [::-1] permet d’inverse une chaine de caractère. <br /><br />print("ae"[::-1]) -> ea.','Un palindrome est une chaine de caractère dont l''ordre des lettres reste le même, qu''on les lise de gauche à droite ou de droite à gauche.','<b style="color: violet;">estPalindrome(''12321'')</b> renvoie <b style="color: green;"></b>True</b>',replace(replace('def estPalindromeVerif(var):\r\n  if(var == var[::-1]):\r\n      return True\r\n  else:\r\n      return False','\r',char(13)),'\n',char(10)),replace(replace('import random as r\r\ndef testPalindrome(x):\r\n  l=[1,2,3,2,1]\r\n  if(estPalindrome(l)==False):\r\n    return False\r\n  l=[9,5,7,7,9]\r\n  if(estPalindrome(l)==True):\r\n    return False\r\n  l=[]\r\n  for i in range(x):\r\n    for j in range(r.randint(1,10)):\r\n      l.append(r.randint(0,9))\r\n    if(estPalindromeVerif(l)!=estPalindrome(l)):\r\n      return False\r\n    l=[]\r\n  return True\r\n\r\nprint(testPalindrome(5))','\r',char(13)),'\n',char(10)),1,0,0,'def estPalindromge(var):');
INSERT INTO Enigme VALUES(10,'CesarDecrypt','Écrire une fonction <b style="color : violet">Decrypt</b> qui prend en argument 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é.)','La fonction ord(char) de python permet de retourner l''Unicode (standard d’encodage de caractères) d''un caractère.<br/> Par exemple, ord(''a'') retourne ''97'' et ord(''b'')) retourne ''98''.','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>Par exemple A avec une clé 2 devient C.','<b>Entrée</b> :&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;<b>Sortie</b> : <br>''fbehu'',3&emsp;&emsp;&emsp;&emsp;&emsp;&nbsp;cyber',replace(replace('def DecryptVerif(text, key):\r\n    result = ""\r\n    for i in range(len(text)):\r\n        char = text[i]\r\n        if(char==" "):\r\n            result+=" "\r\n        elif (char.isupper()):\r\n            result += chr((ord(char) - key-65) % 26 + 65)\r\n        else:\r\n            result += chr((ord(char) - key - 97) % 26 + 97)\r\n    return result','\r',char(13)),'\n',char(10)),replace(replace('import random as r\r\ndef testDecrypte(x):\r\n    Decrypt("",1)\r\n    if(Decrypt("Jgnnq yqtnf",2)!="Hello world"):\r\n        return False\r\n    if(Decrypt("Blarycnm",9)!="Scripted"):\r\n        return False\r\n    for i in range(x):\r\n        l=""\r\n        cle=r.randint(1,26)\r\n        for i in range(r.randint(1,10)):\r\n            l+=chr(r.randint(97,122))\r\n        if(Decrypt(l,cle)!=DecryptVerif(l,cle)):\r\n            return False\r\n    return True\r\n  \r\nprint(testDecrypte(5))','\r',char(13)),'\n',char(10)),4,0,0,'def Decrypt(text, key):');
INSERT INTO Enigme VALUES(12,'ChuckNorris','Coder un fonction <b style="color: violet;">binaire2unaire</b> qui prend en argument un <b style="color: #44fff6;">nombre binaire</b> et qui le retourne le <b style="color: yellow;">nombre</b> codé via le codage <b>Chuck Norris</b>.','En python les chaines de carractère peuvent être utilisé comme une liste.','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','<b>Entrée</b> :&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;<b>Sortie</b> : <br>10000111&emsp;&emsp;&emsp;&emsp;&emsp;&nbsp;0 0 00 0000 0 000',replace(replace('def binaire2unitaireVerif(x):\r\n    rep=0\r\n    pre=x[0]\r\n    unitaire=""\r\n    for i in x:\r\n        if(pre==i):\r\n            rep+=1\r\n        else:\r\n
  if(pre=="1"):\r\n                unitaire=unitaire+"0 "\r\n            else:\r\n                unitaire=unitaire+"00 "\r\n            for j in range(rep):\r\n                unitaire=unitaire+"0"\r\n            unitaire=unitaire+" "\r\n            rep=1\r\n            pre=i\r\n    if(pre=="1"):\r\n        unitaire=unitaire+"0 "\r\n    else:\r\n        unitaire=unitaire+"00 " \r\n    for i in range(rep):\r\n        unitaire=unitaire+"0"\r\n    return unitaire','\r',char(13)),'\n',char(10)),replace(replace('import random as r\r\ndef testChuckNorris(x):\r\n    l="0000000"\r\n    binaire2unitaire(l)\r\n    if(binaire2unitaire(l)!="00 0000000"):\r\n        return False\r\n    l="1111111"\r\n    if(binaire2unitaire(l)!="0 0000000"):\r\n        return False\r\n    l="1101001"\r\n    if(binaire2unitaire(l)!="0 00 00 0 0 0 00 00 0 0"):\r\n        return False\r\n    l=""\r\n    for i in range(x):\r\n        for j in range(r.randint(1,10)):\r\n
   l=l+str(r.randint(0,1))\r\n        if(binaire2unitaire(l)!=binaire2unitaireVerif(l)):\r\n            return False\r\n        l=""\r\n    return True\r\n\r\nprint(testChuckNorris(5))','\r',char(13)),'\n',char(10)),3,0,0,'def binaire2unitaire(x):');
INSERT INTO Enigme VALUES(13,'Hanoi',' Écrire une fonction <b style="color: violet;">hanoi</b> permettant de résoudre le problème des <b>tours d’hanoi </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).','Pense à 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. ','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 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.','<b>Entrée</b> :3,"A","B","C"<br><b>Sortie</b> : [[''A'',''C''],[''A'',''B''],[''C'',''B''],[''A'',''C''],[''B'',''A''],[''B'',''C''],[''A'',''C'']]',replace(replace('def hanoi_rec(l,nb_disks, start, middle, end):\r\n    if(nb_disks == 1):\r\n        return l.append([start,end])\r\n    else:\r\n        hanoi_rec(l,nb_disks - 1, start, end, middle)\r\n        l.append([start,end])\r\n        hanoi_rec(l,nb_disks - 1, middle, start, end)\r\n\r\ndef hanoiVerif(nb_disks,start, middle, end):\r\n    l=[]\r\n    hanoi_rec(l,nb_disks,start, middle, end)\r\n    return l','\r',char(13)),'\n',char(10)),replace(replace('import random as r\r\ndef testhanoi(x):\r\n    hanoi(1,"A","B","C")\r\n    if(hanoi(3,"A","B","C")!=[[''A'',''C''],[''A'',''B''],[''C'',''B''],[''A'',''C''],[''B'',''A''],[''B'',''C''],[''A'',''C'']]):\r\n        return False\r\n    for i in range(x):\r\n        j=r.randint(1,4)\r\n        if(hanoi(j,"Z","E","R")!=hanoiVerif(j,"Z","E","R")):\r\n           return False\r\n    return True\r\n\r\nprint(testhanoi(5))','\r',char(13)),'\n',char(10)),7,0,0,'def hanoi(nb_disks,start, middle, end):');
INSERT INTO Enigme VALUES(14,'TrianglePascal','Écrire une fonction <b style="color: violet;">triangle_pascal</b> permettant d’afficher 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).','Il n''y a pas d''aide pour cette énigme','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  )','<b>Entrée</b> : 4<br><b>Sortie</b> : [[1],[1,1],[1,2,1],[1,3,3,1]]',replace(replace('def estTriangleDePascal(n):\r\n  if(n==0):\r\n      return []\r\n  if(n==1):\r\n      return [[1]]\r\n  triangle=[[1],[1, 1]]\r\n  columns=n\r\n  for line in range(2,n):\r\n      triangle.append([1])\r\n      for column in range(1, line):\r\n          triangle[line].append(triangle[line - 1][column - 1] + triangle[line - 1][column])\r\n      triangle[line].append(1)\r\n  return triangle','\r',char(13)),'\n',char(10)),replace(replace('import random as r\r\ndef testTriangleDePascal(n):\r\n  triangle_pascal(0)\r\n  listTest=[0,1]\r\n  for i in range(0,n):\r\n   listTest.append(r.randint(5,140))\r\n  for i in listTest:\r\n      if(triangle_pascal(i)!=estTriangleDePascal(i)):\r\n          return False\r\n  return True\r\n  \r\nprint(testTriangleDePascal(5))','\r',char(13)),'\n',char(10)),8,0,0,'def triangle_pascal(n):');
INSERT INTO Enigme VALUES(19,'Palindrome','Écrire une fonction <b style="color: violet;">estPalindrome(var)</b> qui prend en argument un <b style="color:#44fff6">entier</b> et qui renvoie <b style="color: green;">True</b> si c’est un palindrome et <b style="color: red;">False</b> sinon.','En python l’instruction [::-1] permet d’inverse une chaine de caractère. <br /><br />print("ae"[::-1]) -> ea.','Il n''y a pas de rappel pour cette enigme.','<b style="color: violet;">estPalindrome(12321)</b> renvoie <b style="color: green;"></bstyle>True</b>',replace('def estPalindromeVerif(var):\n  if(var == var[::-1]):\n      return True\n  else:\n      return False','\n',char(10)),replace('import random as r\ndef testPalindrome(x):\n  l=[1,2,3,2,1]\n  if(estPalindrome(l)==False):\n    return False\n  l=[9,5,7,7,9]\n  if(estPalindrome(l)==True):\n    return False\n  l=[]\n  for i in range(x):\n    for j in range(r.randint(1,10)):\n      l.append(r.randint(0,9))\n    if(estPalindromeVerif(l)!=estPalindrome(l)):\n      return False\n    l=[]\n  return True\n\nprint(testPalindrome(5))','\n',char(10)),0,600,100,'def estPalindrome(var):');
-- INSERT INTO Enigme VALUES(20,'CesarDecrypt','Écrire une fonction <b style="color : violet">Decrypt</b> qui prend en argument 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é.)','La fonction ord(char) de python permet de retourner l''Unicode (standard d’encodage de caractères) d''un caractère.<br/> Par exemple, ord(''a'') retourne ''97'' et ord(''b'')) retourne ''98''.','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>Par exemple A avec une clé 2 devient C.','<b>Entrée</b> :&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;<b>Sortie</b> : <br>''fbehu'',3&emsp;&emsp;&emsp;&emsp;&emsp;&nbsp;cyber',replace('def DecryptVerif(text, key):\n    result = ""\n    for i in range(len(text)):\n        char = text[i]\n        if(char==" "):\n            result+=" "\n        elif (char.isupper()):\n            result += chr((ord(char) - key-65) % 26 + 65)\n        else:\n            result += chr((ord(char) - key - 97) % 26 + 97)\n    return result','\n',char(10)),replace('import random as r\ndef testDecrypte(x):\n    Decrypt("",1)\n    if(Decrypt("Jgnnq yqtnf",2)!="Hello world"):\n        return False\n    if(Decrypt("Blarycnm",9)!="Scripted"):\n        return False\n    for i in range(x):\n        l=""\n        cle=r.randint(1,26)\n        for i in range(r.randint(1,10)):\n            l+=chr(r.randint(97,122))\n        if(Decrypt(l,cle)!=DecryptVerif(l,cle)):\n            return False\n    return True\n  \nprint(testDecrypte(5))','\n',char(10)),0,600,100,'def Decrypt(text, key):');
-- INSERT INTO Enigme VALUES(27,'Alternance','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>, prend tour à tour les caractères des deux chaines  et retourne la <b style="color: yellow;">chaine de caractère</b> trié. (cf l''exemple)','Il n''y a pas d''aide pour cette énigme','Il n''y a pas de rappel pour cette énigme','<b>Entrée</b> : "Hlowrd",  "el ol" <br><b>Sortie</b> : "Hello world" ',replace(replace('def triVerif(a,b):\r\n    s = ""\r\n    i = 0\r\n    while len(s)<len(a+b):\r\n        if(len(a)>i):\r\n            s += a[i]\r\n        if(len(b)>i):\r\n            s += b[i]\r\n        i += 1\r\n    return s','\r',char(13)),'\n',char(10)),replace(replace('import random as r\r\ndef triTest(x):\r\n    a = "Hlowrd"\r\n    b = "el ol"\r\n    if(triVerif(a,b)!=tri(a,b)):\r\n        return False\r\n    return True\r\n\r\nprint(triTest(5)) ','\r',char(13)),'\n',char(10)),5,0,0,'def trie(a,b):');