<div class="separator" style="clear: both;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKvIv_zaxfZaI3Tu9nNZkxXS5wFOoCTBWIM77SyrLPMUPGQtq1MyUJVeXmz3fv-4kxdNTA0RQCZumrELDNKhbUJxZJ1FaPstwOBVw0_TneSJ4e1gxQjjn20WJM1ZXKATJ_2P47pSDA0ReVzZrMNBfI00Mn8DUFbmB518Ej15uNpI_iz2AMx-PmlC0nMR0N/s1672/1000151271.png" style="display: block; padding: 1em 0; text-align: center; "><img alt="" border="0" data-original-height="941" data-original-width="1672" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKvIv_zaxfZaI3Tu9nNZkxXS5wFOoCTBWIM77SyrLPMUPGQtq1MyUJVeXmz3fv-4kxdNTA0RQCZumrELDNKhbUJxZJ1FaPstwOBVw0_TneSJ4e1gxQjjn20WJM1ZXKATJ_2P47pSDA0ReVzZrMNBfI00Mn8DUFbmB518Ej15uNpI_iz2AMx-PmlC0nMR0N/s600/1000151271.png" width="600"/></a></div><!--DOCTYPE html--> <html lang="fr"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover"> <title>Quiz de Maths – Collège</title> <style> :root{--bg:#f4f7fb;--fg:#14213d;--card:#fff;--ac:#2563b0;--ac2:#e3edfa;--ok:#1e8e4e;--okb:#dff5e8;--bad:#c62f2f;--badb:#fbe3e3;--mu:#5b6b82;--bd:#d6dfeb;--onac:#fff;box-sizing:border-box;padding-top:env(safe-area-inset-top,0px);padding-bottom:env(safe-area-inset-bottom,0px)} @media (prefers-color-scheme:dark){:root:not([data-theme="light"]){color-scheme:dark;--bg:#0f1624;--fg:#e8eefb;--card:#182238;--ac:#6ea8ff;--ac2:#22304d;--ok:#5fd18b;--okb:#17382a;--bad:#ff8080;--badb:#43212a;--mu:#9fb0cb;--bd:#2c3b5a;--onac:#0f1624}} :root[data-theme="dark"]{color-scheme:dark;--bg:#0f1624;--fg:#e8eefb;--card:#182238;--ac:#6ea8ff;--ac2:#22304d;--ok:#5fd18b;--okb:#17382a;--bad:#ff8080;--badb:#43212a;--mu:#9fb0cb;--bd:#2c3b5a;--onac:#0f1624} html{scroll-padding-top:env(safe-area-inset-top,0px)} *{box-sizing:border-box} body{margin:0;background:var(--bg);color:var(--fg);font:16px/1.6 system-ui,-apple-system,"Segoe UI",Arial,sans-serif} .w{max-width:680px;margin:0 auto;padding:16px} h1{font-size:22px;margin:8px 0 4px}h2{font-size:18px;margin:18px 0 8px} .mu{color:var(--mu);font-size:14px} .tabs{display:flex;gap:6px;margin:14px 0} .tab,.btn{border:1px solid var(--bd);background:var(--card);color:var(--fg);border-radius:12px;padding:10px 12px;font:inherit;cursor:pointer} .tab{flex:1;font-size:14px}.tab.on,.btn.p{background:var(--ac);border-color:var(--ac);color:var(--onac)} .card{background:var(--card);border:1px solid var(--bd);border-radius:14px;padding:14px;margin:10px 0;display:flex;justify-content:space-between;align-items:center;gap:10px;cursor:pointer} .card b{display:block} .badge{background:var(--ac2);color:var(--ac);border-radius:20px;padding:2px 10px;font-size:13px;white-space:nowrap} .bar{height:8px;background:var(--ac2);border-radius:8px;overflow:hidden;margin:10px 0} .bar i{display:block;height:100%;background:var(--ac);transition:width .3s} .q{background:var(--card);border:1px solid var(--bd);border-radius:14px;padding:16px;font-size:19px;margin:12px 0} .o{display:block;width:100%;text-align:start;margin:8px 0;padding:13px 14px;border:2px solid var(--bd);background:var(--card);color:var(--fg);border-radius:12px;font:inherit;font-size:18px;cursor:pointer} .o.ok{border-color:var(--ok);background:var(--okb)}.o.no{border-color:var(--bad);background:var(--badb)} .ex{background:var(--ac2);border-radius:12px;padding:12px;margin:10px 0} .top{display:flex;justify-content:space-between;align-items:center;gap:8px} .big{font-size:44px;text-align:center;margin:20px 0 4px} .row{display:flex;gap:8px;margin-top:14px}.row .btn{flex:1} </style> </head> <body> <div class="w" id="app"></div> <script> let RN=Math.random; const mb=s=>()=>{s|=0;s=s+0x6D2B79F5|0;let t=Math.imul(s^s>>>15,1|s);t=t+Math.imul(t^t>>>7,61|t)^t;return((t^t>>>14)>>>0)/4294967296}; const R=(a,b)=>a+Math.floor(RN()*(b-a+1)),P=a=>a[R(0,a.length-1)],nz=n=>R(1,n)*(R(0,1)?1:-1); const sh=a=>{a=a.slice();for(let i=a.length-1;i>0;i--){const j=R(0,i);[a[i],a[j]]=[a[j],a[i]]}return a}; const fmt=n=>{n=Math.round(n*100)/100;return(n<0?'\u2212':'')+String(Math.abs(n)).replace('.',',')}; const p=n=>'('+fmt(n)+')',M=s=>'<bdi>'+s+'</bdi>',sg=n=>n<0?'\u2212':'+',ab=Math.abs,cf=c=>c===1?'':c,g=(x,y)=>y?g(y,x%y):x,S=o=>o=='<'?'<':'>'; function mkN(q,N,wr,e,st=1){N=Math.round(N*100)/100;const s=[],z=new Set,add=v=>{const k=fmt(v);if(!z.has(k)&&s.length<4){z.add(k);s.push(v)}};add(N);wr.forEach(add);for(let k=1;s.length<4;k++){add(N+k*st);add(N-k*st)}const o=sh(s);return{q,o:o.map(fmt),a:o.indexOf(N),e}} function mkS(q,N,wr,e){const s=[N];wr.forEach(w=>{if(!s.includes(w)&&s.length<4)s.push(w)});const o=sh(s);return{q,o,a:o.indexOf(N),e}} const G={ // ----- 1ère année add:()=>{const a=R(-20,20),b=R(-20,20),s=a+b;return mkN('Calculer : '+M(p(a)+' + '+p(b)),s,[a-b,-s,s+2,s-2],'On additionne en tenant compte des signes : '+M(fmt(s)))}, cmp:()=>{let a=R(-20,20),b=R(-20,20);if(a==b)b++;const m=Math.min(a,b);return mkN('Quel est le plus petit nombre : '+M(fmt(a)+' ou '+fmt(b))+' ?',m,[Math.max(a,b),-m,0,m+1],'Sur la droite graduée, le plus petit nombre est celui qui est le plus à gauche : '+M(fmt(m)))}, frac:()=>{let a,b;do{a=R(1,9);b=R(2,10)}while(a>=b||g(a,b)>1);const k=R(2,7);return mkS('Simplifier la fraction '+M(k*a+'/'+k*b)+' (fraction irréductible).',a+'/'+b,[b+'/'+a,(a+1)+'/'+b,a+'/'+(b+1),k*a+'/'+b],'On divise le numérateur et le dénominateur par '+k+' : '+M(a+'/'+b))}, dec:()=>{let a=R(11,99)/10,b=R(11,99)/10;const pl=R(0,1);if(!pl&&a<b)[a,b]=[b,a];const s=pl?a+b:a-b;return mkN('Calculer : '+M(fmt(a)+(pl?' + ':' \u2212 ')+fmt(b)),s,[s+.1,s-.1,s+1,s*10],'On aligne les virgules : '+M(fmt(s)),.1)}, prop:()=>{const it=P(['cahiers','stylos','kg de pommes','kg d’oranges','mètres de tissu']),a=R(2,9),u=R(2,15),c=a+R(1,9),b=a*u,N=c*u;return mkN(a+' '+it+' coûtent '+b+' DH. Combien coûtent '+c+' '+it+' ?',N,[b+c,N+u,c+u,b*c],'Prix d’une unité : '+b+' ÷ '+a+' = '+u+' DH, donc '+c+' × '+u+' = '+N+' DH.')}, aire:()=>{const t=R(0,3),L=R(4,20),l=R(2,L-1),c=R(2,15),b=2*R(2,10),h=R(3,12); if(t==0)return mkN('Un rectangle a pour longueur '+L+' cm et largeur '+l+' cm. Calculer son aire (en cm²).',L*l,[2*(L+l),L+l,2*L*l,4*L],'Aire = L × l = '+L+' × '+l+' = '+L*l); if(t==1)return mkN('Un rectangle a pour longueur '+L+' cm et largeur '+l+' cm. Calculer son périmètre (en cm).',2*(L+l),[L*l,L+l,2*L*l,4*L],'Périmètre = 2 × (L + l) = '+2*(L+l)); if(t==2)return mkN('Un carré a pour côté '+c+' cm. Calculer son périmètre (en cm).',4*c,[c*c,2*c,8*c,c+4],'Périmètre = 4 × côté = '+4*c); return mkN('Un triangle a pour base '+b+' cm et pour hauteur '+h+' cm. Calculer son aire (en cm²).',b*h/2,[b*h,b+h,(b+h)/2,b*h/4],'Aire = (base × hauteur) ÷ 2 = '+b*h/2)}, ang:()=>{const t=R(0,2),x=R(10,80),y=R(20,160),a=R(30,80),b=R(30,70); if(t==0)return mkN('Deux angles sont complémentaires. L’un mesure '+x+'°. Combien mesure l’autre (en °) ?',90-x,[180-x,x,100-x],'La somme de deux angles complémentaires vaut 90°.',5); if(t==1)return mkN('Deux angles sont supplémentaires. L’un mesure '+y+'°. Combien mesure l’autre (en °) ?',180-y,[360-y,y,ab(90-y)],'La somme de deux angles supplémentaires vaut 180°.',5); return mkN('Dans un triangle, deux angles mesurent '+a+'° et '+b+'°. Combien mesure le troisième (en °) ?',180-a-b,[360-a-b,a+b,180-a],'La somme des angles d’un triangle vaut 180°.',5)}, pct:()=>{const q=P([10,20,25,50,5,15,30,40,75]),n=20*R(1,25),N=n*q/100;return mkN('Calculer '+q+' % de '+n+'.',N,[n-N,N+q,q*n/10,n/q],q+' % de '+n+' = '+n+' × '+q+' ÷ 100 = '+N)}, // ----- 2ème année mul:()=>{const a=nz(9),b=nz(9),s=a*b;return mkN('Calculer : '+M(p(a)+' × '+p(b)),s,[-s,a+b,s+a,a-b],'Deux nombres de même signe donnent un produit positif, sinon négatif : '+M(fmt(s)))}, eq:()=>{const x=R(-8,8),a=R(2,6),b=nz(9),c=a*x+b;return mkN('Résoudre l’équation : '+M(a+'x '+sg(b)+' '+ab(b)+' = '+fmt(c)),x,[x+1,x-1,-x,c],'On retranche '+M(fmt(b))+' aux deux membres puis on divise par '+a+' : '+M('x = '+fmt(x)))}, pow:()=>{const t=R(0,2),a=R(2,9);let m,n,E,w; if(t==0){m=R(3,7);n=R(2,5);E=m+n;w=m*n}else if(t==1){n=R(2,5);m=n+R(2,5);E=m-n;w=m+n}else{m=R(2,5);n=R(2,4);E=m*n;w=m+n} const ex=x=>a+'<sup>'+x+'</sup>',s=[ex(m)+(t==0?' × ':' ÷ ')+ex(n),'('+ex(m)+')<sup>'+n+'</sup>']; return mkS('Écrire sous la forme '+a+'<sup>k</sup> : '+(t==2?s[1]:s[0]),ex(E),[ex(w),ex(E+1),ex(E-1),ex(E+2)],t==0?'On additionne les exposants : '+m+' + '+n+' = '+E:t==1?'On soustrait les exposants : '+m+' − '+n+' = '+E:'On multiplie les exposants : '+m+' × '+n+' = '+E)}, rac:()=>{const k=R(2,20),j=R(2,12),l=R(2,12); return R(0,1)?mkN('Calculer : '+M('√'+k*k),k,[k*k/2,2*k,k+1,k-1],'Car '+M(k+'² = '+k*k)):mkN('Calculer : '+M('√'+j*j+' + √'+l*l),j+l,[j*l,j*j+l*l,j+l+1,j+l-1],'√'+j*j+' = '+j+' et √'+l*l+' = '+l)}, dev:()=>{const k=R(2,9),a=nz(9),A=ab(a),K=ab(k*a);return mkS('Développer : '+M(k+'(x '+sg(a)+' '+A+')'),k+'x '+sg(a)+' '+K,[k+'x '+sg(a)+' '+A,k+'x '+sg(-a)+' '+K,'x '+sg(a)+' '+K],'On multiplie chaque terme par '+k+' : '+k+' × x et '+k+' × '+p(a))}, moy:()=>{const v=[R(5,18),R(5,18),R(5,18),R(5,18)],s=v.reduce((x,y)=>x+y),x=(5-s%5)%5+5*R(1,3),L=sh([...v,x]),N=(s+x)/5;return mkN('Calculer la moyenne de la série : '+M(L.join(' ; ')),N,[N+1,N-1,Math.max(...L),Math.min(...L)],'Somme ÷ effectif = '+(s+x)+' ÷ 5 = '+N)}, pyth:()=>{const[a,b,c]=P([[3,4,5],[5,12,13],[8,15,17],[7,24,25],[20,21,29]]).map(v=>v*R(1,4)),t=R(0,2), q=t==0?['AB = '+a+' cm et AC = '+b+' cm','BC',c]:t==1?['BC = '+c+' cm et AB = '+a+' cm','AC',b]:['BC = '+c+' cm et AC = '+b+' cm','AB',a]; return mkN('Le triangle ABC est rectangle en A, avec '+q[0]+'. Calculer '+q[1]+' (en cm).',q[2],[a+b,c+1,c-1,c-a],t==0?'BC² = '+a+'² + '+b+'² = '+c*c+', donc BC = '+c:'Dans le triangle rectangle, hypoténuse² = somme des carrés des deux autres côtés. Résultat : '+q[2])}, cer:()=>{const t=R(0,2),r=R(1,20),r2=R(1,12),d=R(2,40); if(t==0)return mkN('Un cercle a pour rayon '+r+' cm. Calculer son périmètre (π ≈ 3,14).',6.28*r,[3.14*r,6.28*r*r,12.56*r],'P = 2 × π × r = 2 × 3,14 × '+r+' = '+fmt(6.28*r)); if(t==1)return mkN('Un disque a pour rayon '+r2+' cm. Calculer son aire (π ≈ 3,14).',3.14*r2*r2,[6.28*r2,3.14*r2,6.28*r2*r2],'A = π × r² = 3,14 × '+r2+'² = '+fmt(3.14*r2*r2)); return mkN('Un cercle a pour diamètre '+d+' cm. Calculer son périmètre (π ≈ 3,14).',3.14*d,[6.28*d,3.14*d*d/4,d/2,3.14*d/2],'P = π × d = 3,14 × '+d+' = '+fmt(3.14*d))}, // ----- 3ème année id:()=>{const k=R(1,4),a=nz(9),A=cf(k*k),B=2*k*ab(a),C=a*a;return mkS('Développer : '+M('('+cf(k)+'x '+sg(a)+' '+ab(a)+')²'),A+'x² '+sg(a)+' '+B+'x + '+C,[A+'x² + '+C,A+'x² '+sg(-a)+' '+B+'x + '+C,A+'x² '+sg(a)+' '+B+'x \u2212 '+C],'(a + b)² = a² + 2ab + b² avec a = '+cf(k)+'x et b = '+fmt(a))}, sys:()=>{const x=R(1,15),y=R(1,15),t=R(0,1);return mkN('Résoudre : '+M('x + y = '+(x+y))+' et '+M('x \u2212 y = '+fmt(x-y))+'. Quelle est la valeur de '+(t?'y':'x')+' ?',t?y:x,[x+y,x-y,t?x:y,(t?y:x)+1],'En additionnant : 2x = '+2*x+', donc x = '+x+' et y = '+y)}, lin:()=>{const a=nz(9),k=nz(9);return R(0,1)?mkN('f est la fonction linéaire '+M('f(x) = '+fmt(a)+'x')+'. Calculer '+M('f('+fmt(k)+')')+'.',a*k,[a+k,-a*k,a-k,k/a],'f('+fmt(k)+') = '+p(a)+' × '+p(k)+' = '+fmt(a*k)):mkN('f est linéaire et '+M('f('+fmt(k)+') = '+fmt(a*k))+'. Quel est son coefficient ?',a,[a*k+k,-a,a*k-k,a*k*k],'Coefficient = f(x) ÷ x = '+fmt(a*k)+' ÷ '+p(k)+' = '+fmt(a))}, aff:()=>{const a=nz(6),b=nz(9),k=R(-5,5),N=a*k+b;return mkN('Soit '+M('f(x) = '+fmt(a)+'x '+sg(b)+' '+ab(b))+'. Calculer '+M('f('+fmt(k)+')')+'.',N,[a*k-b,a+k+b,(a+b)*k,-N],'f('+fmt(k)+') = '+p(a)+' × '+p(k)+' '+sg(b)+' '+ab(b)+' = '+fmt(N))}, thales:()=>{const a=R(2,8),t=R(2,4),u=R(2,9),b=a*t,c=t*u;return mkN('Dans le triangle ABC, M ∈ [AB] et N ∈ [AC] avec (MN) // (BC). On donne AM = '+a+', AB = '+b+' et AC = '+c+'. Calculer AN.',u,[a*u,b-a,c-u,u+a],'Thalès : AM/AB = AN/AC, donc AN = '+a+' × '+c+' ÷ '+b+' = '+u)}, trig:()=>{let[a,b,c]=P([[3,4,5],[5,12,13],[8,15,17],[7,24,25]]).map(v=>v*R(1,3));if(R(0,1))[a,b]=[b,a];const f=P(['cos','sin','tan']), A={cos:a+'/'+c,sin:b+'/'+c,tan:b+'/'+a}[f];return mkS('ABC est rectangle en A, avec AB = '+a+', AC = '+b+' et BC = '+c+'. Donner '+f+' B\u0302 sous forme de fraction.',A,[a+'/'+c,b+'/'+c,b+'/'+a,a+'/'+b,c+'/'+a,c+'/'+b].filter(x=>x!=A),{cos:'cos = côté adjacent ÷ hypoténuse',sin:'sin = côté opposé ÷ hypoténuse',tan:'tan = côté opposé ÷ côté adjacent'}[f]+' (pour l’angle B)')}, proba:()=>{const r=R(1,9),b=R(1,9),v=R(1,9),c=R(0,2),n=[r,b,v][c],T=r+b+v;return mkS('Une urne contient '+r+' boule(s) rouge(s), '+b+' bleue(s) et '+v+' verte(s). On tire une boule au hasard. Quelle est la probabilité d’obtenir une boule '+['rouge','bleue','verte'][c]+' ?',n+'/'+T,[n+'/'+(T-n),(T-n)+'/'+T,'1/'+T,n+'/'+(T+1),T+'/'+n],'P = cas favorables ÷ cas possibles = '+n+'/'+T)}, ineq:()=>{const a=P([-6,-5,-4,-3,-2,2,3,4,5,6]),x=R(-8,8),b=nz(9),op=P(['<','>']),c=a*x+b,s=a>0?op:op=='<'?'>':'<',f=s=='<'?'>':'<'; return mkS('Résoudre l’inéquation : '+M(fmt(a)+'x '+sg(b)+' '+ab(b)+' '+S(op)+' '+fmt(c)),'x '+S(s)+' '+fmt(x),['x '+S(f)+' '+fmt(x),'x '+S(s)+' '+fmt(x+1),'x '+S(f)+' '+fmt(-x),'x '+S(s)+' '+fmt(-x),'x '+S(f)+' '+fmt(x-1)],'On isole x'+(a<0?' ; en divisant par un nombre négatif, le sens de l’inégalité change.':'.'))} }; const L=(k,t,d,g)=>({id:'l'+k,k,t,d,g}); const LV={ 1:{n:'1ère année',L:[L(1,'Additionner des relatifs','Numérique',G.add),L(2,'Comparer des relatifs','Numérique',G.cmp),L(3,'Simplifier des fractions','Numérique',G.frac),L(4,'Calculs avec les décimaux','Numérique',G.dec),L(5,'Proportionnalité','Numérique',G.prop),L(6,'Périmètres et aires','Géométrie',G.aire),L(7,'Angles','Géométrie',G.ang),L(8,'Pourcentages','Numérique',G.pct)]}, 2:{n:'2ème année',L:[L(9,'Multiplier des relatifs','Numérique',G.mul),L(10,'Équations du 1er degré','Algèbre',G.eq),L(11,'Puissances','Numérique',G.pow),L(12,'Racines carrées','Numérique',G.rac),L(13,'Développer','Algèbre',G.dev),L(14,'Moyenne statistique','Statistiques',G.moy),L(15,'Théorème de Pythagore','Géométrie',G.pyth),L(16,'Cercle et disque','Géométrie',G.cer)]}, 3:{n:'3ème année',L:[L(17,'Identités remarquables','Algèbre',G.id),L(18,'Systèmes d’équations','Algèbre',G.sys),L(19,'Fonctions linéaires','Fonctions',G.lin),L(20,'Fonctions affines','Fonctions',G.aff),L(21,'Théorème de Thalès','Géométrie',G.thales),L(22,'Trigonométrie','Géométrie',G.trig),L(23,'Probabilités','Probabilités',G.proba),L(24,'Inéquations','Algèbre',G.ineq)]} }; function pool(l){if(l.P)return l.P;const z=new Set,A=[];for(let i=0;A.length<50&&i<800;i++){RN=mb(l.k*1000+i);const q=l.g();RN=Math.random;if(!z.has(q.q)){z.add(q.q);A.push(q)}}return l.P=A} let lv=1,st=null,prog={}; try{prog=JSON.parse(localStorage.getItem('qm')||'{}')}catch(e){} const save=()=>{try{localStorage.setItem('qm',JSON.stringify(prog))}catch(e){}}; const $=document.getElementById('app'); function home(){let tot=0;for(const k in LV)LV[k].L.forEach(l=>tot+=pool(l).length); let h=`<h1>🧮 Quiz de Maths</h1><div class="mu">${tot} questions · 3 niveaux · correction et explication immédiates</div><div class="tabs">`+Object.keys(LV).map(k=>`<button class="tab ${k==lv?'on':''}" onclick="lv=${k};home()">${LV[k].n}</button>`).join('')+`</div><button class="btn p" style="width:100%" onclick="start(${lv},-1)">📝 Contrôle du niveau (20 questions mélangées)</button><h2>Leçons</h2>`; LV[lv].L.forEach((l,i)=>{const b=prog[l.id];h+=`<div class="card" onclick="start(${lv},${i})"><div><b>${l.t}</b><span class="mu">${l.d} · ${pool(l).length} questions</span></div><span class="badge">${b?'Meilleur : '+b[0]+'/'+b[1]:'Commencer'}</span></div>`}); $.innerHTML=h} function start(l,i){let t,id,qs;if(i<0){t='Contrôle · '+LV[l].n;id='c'+l;qs=sh([].concat(...LV[l].L.map(pool))).slice(0,20)}else{const X=LV[l].L[i];t=X.t;id=X.id;qs=sh(pool(X)).slice(0,10)} st={t,id,l,i,qs,n:qs.length,k:0,sc:0,d:false};quiz()} function quiz(){const q=st.qs[st.k]; $.innerHTML=`<div class="top"><button class="btn" onclick="home()">← Accueil</button><span class="mu">${st.t}</span></div><div class="bar"><i style="width:${st.k/st.n*100}%"></i></div><div class="mu">Question ${st.k+1} sur ${st.n}</div><div class="q">${q.q}</div>`+q.o.map((o,j)=>`<button class="o" onclick="pick(${j})">${o}</button>`).join('')+'<div id="fb"></div>'} function pick(j){if(st.d)return;st.d=true;const q=st.qs[st.k],b=document.querySelectorAll('.o'); b[q.a].classList.add('ok');if(j===q.a)st.sc++;else b[j].classList.add('no'); document.getElementById('fb').innerHTML=`<div class="ex">${j===q.a?'✅ Bravo !':'❌ Ce n’est pas la bonne réponse.'} ${q.e||''}</div><button class="btn p" style="width:100%" onclick="next()">${st.k<st.n-1?'Question suivante':'Voir le résultat'}</button>`} function next(){st.d=false;if(st.k<st.n-1){st.k++;quiz()}else end()} function end(){const s=st.sc,r=s/st.n,o=prog[st.id];if(!o||o[0]/o[1]<=r){prog[st.id]=[s,st.n];save()} $.innerHTML=`<div class="big">${r>=.9?'🏆':r>=.6?'👏':'💪'}</div><h1 style="text-align:center">${s} / ${st.n}</h1><p class="mu" style="text-align:center">${r>=.9?'Excellent ! Tu maîtrises cette leçon.':r>=.6?'Bon résultat, essaie de faire mieux.':'Courage ! Relis la leçon et recommence.'}</p><div class="row"><button class="btn p" onclick="start(${st.l},${st.i})">Recommencer</button><button class="btn" onclick="home()">Accueil</button></div>`} home(); </script> </body> </html>