function Abort() { throw new Error('This is not an error. This is just to abort javascript'); } function run() { const console = document.getElementById("console"); const runner = new BrythonRunner({ stdout: { write(content) { console.innerHTML += content; console.scrollTop = console.scrollHeight; }, flush() {} }, stderr: { write(content) { console.innerHTML += content; console.scrollTop = console.scrollHeight; }, flush() {} }, stdin: { async readline() { console.innerHTML += "\n"; console.scrollTop = console.scrollHeight; var userInput = prompt(); return userInput; }, flush() {} } }); var code = editor.getValue(); runner.runCode(code) } function run_init() { if (document.getElementById("console") != '') { document.getElementById("console").innerHTML = ''; run(); //setTimeout(() => {console.log("Resolve while pb")}, 1000); //setTimeout(() => {Abort()}, 5000); } else { run(); //setTimeout(() => {console.log("Resolve while pb")}, 1000); //setTimeout(() => {Abort()}, 5000); } } var editor = ace.edit("editor"); editor.setTheme("ace/theme/vibrant_ink"); editor.getSession().setMode("ace/mode/python"); editor.setFontSize("16px"); editor.container.style.height = "250px" editor.setOptions({ enableLiveAutocompletion: true, copyWithEmptySelection: true, showGutter: true, useWrapMode: true, // wrap text to view indentedSoftWrap: false, }); //Function that execute given code and return the result in a given element by id function exec(code, id) { const terminal = document.getElementById("console"); const retour = document.getElementById(id); const runner = new BrythonRunner({ stdout: { write(content) { if (id == "code"){ retourCode = content; } if (id == "solution"){ retourSolution = content; } }, flush() {} }, stderr: { write(content) { if (id == "solution"){ retourSolution = "ERROR"; } terminal.innerHTML += content; terminal.scrollTop = terminal.scrollHeight; }, flush() {} }, stdin: { async readline() { terminal.innerHTML += "\n"; terminal.scrollTop = terminal.scrollHeight; var userInput = prompt(); return userInput; }, flush() {} } }); runner.runCode(code) } //~ Function that check if the code in the editor as the same result as the solution. function check(){ if (retourSolution == "ERROR") { result.innerHTML = "Il semblerait qu'il y a une erreur dans ton code :/"; result.classList.remove('hidden'); } else if (retourSolution == retourCode) { result.innerHTML = "Bien joué"; result.classList.remove('hidden'); } else { result.innerHTML = "Mauvaise réponse"; result.classList.remove('hidden'); } } //~ Function that test the user code async function submit(){ var test = editor.getValue()+`\n import random as r def estPalindromeVerif(var): if(var == var[::-1]): return True else: return False def testPalindrome(x): l=[1,2,3,2,1] if(estPalindrome(l)==False): return False l=[9,5,7,7,9] if(estPalindrome(l)==True): return False l=[] for i in range(x): for j in range(r.randint(1,10)): l.append(r.randint(0,9)) if(estPalindromeVerif(l)!=estPalindrome(l)): return False l=[] return True print(testPalindrome(5)) `; exec("print ('True')", "code"); exec(test, "solution"); await new Promise(r => setTimeout(r, 1500)); check(); } function aide(){ if(document.getElementById("textAide").textContent == ""){ document.getElementById("textAide").textContent = "En python l’instruction [::-1] permet d’inverse une chaine de caractère. Par exemple print(\"ae\"[::-1]) affiche : ea."; } else{ document.getElementById("textAide").textContent = ""; } } function rappel(){ if(document.getElementById("textRappel").textContent == ""){ document.getElementById("textRappel").textContent = "Un palindrome est un nombre qui peut se lire dans les deux sens. Par exemple 111."; } else{ document.getElementById("textRappel").textContent = ""; } }