You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

175 lines
4.4 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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 linstruction [::-1] permet dinverse 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 = "";
}
}