diff --git a/frontend/textbooks/algebra_10_ch1.html b/frontend/textbooks/algebra_10_ch1.html index c2962ba..084aaae 100644 --- a/frontend/textbooks/algebra_10_ch1.html +++ b/frontend/textbooks/algebra_10_ch1.html @@ -254,7 +254,7 @@ a{color:inherit;text-decoration:none}
§ 10

Синус, косинус, тангенс суммы и разности

§ 11

Формулы двойного аргумента

§ 12

Преобразование суммы в произведение

-
Финал главы

Итоги. 6 боссов главы 1

+
Финал главы

Итоги. 6 боссов главы 1

@@ -383,7 +383,7 @@ const PARAS = [ { id:'p10',num:'§ 10', name:'Сумма и разность', sub:'sin(α±β)' }, { id:'p11',num:'§ 11', name:'Двойной аргумент', sub:'sin 2α' }, { id:'p12',num:'§ 12', name:'Сумма → произведение', sub:'sin α + sin β' }, - { id:'final1', num:'★', name:'Финал главы', sub:'6 боссов', final:true }, + { id:'final1', num:'★', name:'Финал главы', sub:'6 боссов', final:true }, ]; function buildParaSelector(){ @@ -573,7 +573,7 @@ function buildSidebar(id){ html+='

Подсказка

'+tip.html+'
'; if(STATE.achievements.size>0){ html+='

Достижения

'; - [...STATE.achievements.values()].slice(-4).forEach(text=>{ html+='
✓ '+text+'
'; }); + [...STATE.achievements.values()].slice(-4).forEach(text=>{ html+='
✓ '+text+'
'; }); html+='
'; } box.innerHTML=html; @@ -690,7 +690,7 @@ function makeBoss(paraId, bossDef){ const q=document.getElementById(idP+'-q'); const fb=document.getElementById(idP+'-fb'); if(st.defeated){ - stageEl.textContent='✓ Побеждён'; fill.style.width='100%'; + stageEl.textContent='✓ Побеждён'; fill.style.width='100%'; q.innerHTML='Босс повержен!'; document.getElementById(idP+'-go').disabled=true; document.getElementById(idP+'-go').style.opacity=.5; @@ -1141,9 +1141,9 @@ function buildP2(){ /* IV3: возможно ли */ (function(){ const Q=[ - { e:'$\\sin\\alpha = 5/13$ и $\\cos\\alpha = 12/13$ одновременно', ok:true, why:'$(5/13)^2 + (12/13)^2 = 169/169 = 1$ ✓' }, + { e:'$\\sin\\alpha = 5/13$ и $\\cos\\alpha = 12/13$ одновременно', ok:true, why:'$(5/13)^2 + (12/13)^2 = 169/169 = 1$ ✓' }, { e:'$\\sin\\alpha = -0{,}3$ и $\\cos\\alpha = 0{,}4$ одновременно', ok:false, why:'$0{,}09 + 0{,}16 = 0{,}25 \\ne 1$.' }, - { e:'$\\sin\\alpha = 0{,}8$ и $\\cos\\alpha = 0{,}6$ одновременно', ok:true, why:'$0{,}64 + 0{,}36 = 1$ ✓' }, + { e:'$\\sin\\alpha = 0{,}8$ и $\\cos\\alpha = 0{,}6$ одновременно', ok:true, why:'$0{,}64 + 0{,}36 = 1$ ✓' }, { e:'$\\sin\\alpha = \\sqrt{3}$', ok:false, why:'$\\sqrt{3} \\approx 1{,}73 > 1$.' }, { e:'$\\cos\\alpha = -1$', ok:true, why:'$\\cos\\pi = -1$.' }, { e:'$\\sin\\alpha = 2$', ok:false, why:'$|\\sin\\alpha| \\le 1$.' }, @@ -1421,7 +1421,7 @@ function buildP4(){ title:'Босс §4 — Тождества', steps:[ { q:'Чему равно $\\sin^2 30° + \\cos^2 30°$?', verify:(v)=>+v===1, hint:'Основное тождество, всегда равно 1.' }, - { q:'$\\sin\\alpha = 5/13$ и $\\cos\\alpha = 12/13$. Возможно? «да»/«нет»', verify:(v)=>String(v).trim().toLowerCase().startsWith('д'), hint:'$25/169 + 144/169 = 1$ ✓.' }, + { q:'$\\sin\\alpha = 5/13$ и $\\cos\\alpha = 12/13$. Возможно? «да»/«нет»', verify:(v)=>String(v).trim().toLowerCase().startsWith('д'), hint:'$25/169 + 144/169 = 1$ ✓.' }, { q:'$\\sin\\alpha = -3/5$, $\\alpha \\in (\\pi; 3\\pi/2)$. Найди $\\cos\\alpha$ как дробь (введи -4/5).', verify:(v)=>{const s=String(v).replace(/\\s/g,''); return s==='-4/5'||+v===-0.8;}, hint:'$\\cos^2 = 16/25$, в III четверти $\\cos < 0$.' }, { q:'Если $\\tg\\alpha = 0{,}75$, то $\\ctg\\alpha = ?$ (введи в виде десятичной дроби).', verify:(v)=>Math.abs(+v - 4/3) < 0.01, hint:'$\\ctg = 1/\\tg = 1/0{,}75 = 4/3 \\approx 1{,}33$.' }, { q:'Упрости: $(1 + \\tg^2\\alpha) \\cdot \\cos^2\\alpha$. Чему равно?', verify:(v)=>+v===1, hint:'$1 + \\tg^2 = 1/\\cos^2$, значит произведение $= 1$.' }, @@ -2272,7 +2272,7 @@ function buildP8(){ { q:'Сколько корней у $\\sin x = 0{,}5$ на промежутке $[0;\\,2\\pi]$?', verify:(v)=>+v===2, hint:'$x_1 = \\pi/6$ и $x_2 = 5\\pi/6$ — обе в промежутке.' }, { q:'Реши $\\cos x = -1$. Введи корень в $[0;\\,2\\pi]$ как pi (если ответ $\\pi$).', verify:(v)=>{const s=String(v).replace(/\\s/g,'').toLowerCase(); return s==='pi'||s==='π';}, hint:'$\\cos\\pi = -1$.' }, { q:'Реши $2\\cos^2 x + 3\\cos x + 1 = 0$. Сколько корней в $[0;\\,2\\pi)$?', verify:(v)=>+v===3, hint:'$t = \\cos x$: $2t^2+3t+1=0$, $t = -1$ или $t = -1/2$. cos=−1: x=π. cos=−1/2: x=2π/3, 4π/3. Итого 3.' }, - { q:'Решает ли значение $x = \\dfrac{\\pi}{2}$ уравнение $\\sin x \\cos x = 0$? «да» или «нет»', verify:(v)=>String(v).trim().toLowerCase().startsWith('д'), hint:'$\\cos(\\pi/2) = 0$, произведение = 0 ✓.' }, + { q:'Решает ли значение $x = \\dfrac{\\pi}{2}$ уравнение $\\sin x \\cos x = 0$? «да» или «нет»', verify:(v)=>String(v).trim().toLowerCase().startsWith('д'), hint:'$\\cos(\\pi/2) = 0$, произведение = 0 ✓.' }, { q:'Реши $\\tg x = 1$. Введи наименьший положительный корень как pi/n.', verify:(v)=>{const s=String(v).replace(/\\s/g,'').toLowerCase(); return s==='pi/4'||s==='π/4';}, hint:'$\\arctg 1 = \\pi/4$, серия $x = \\pi/4 + \\pi n$.' }, ] }); @@ -2969,15 +2969,15 @@ function buildFinal1(){ /* === Hero card === */ html += '
' - +'
' + +'
' +'
' +'
ФИНАЛ ГЛАВЫ 1
' +'

6 интегрированных боссов

' +'

Каждый босс проверяет синтез нескольких параграфов главы. Победи всех — получи ачивку «Магистр тригонометрии» и +150 XP.

' +'
' - +'
★ 6 боссов
' + +'
★ 6 боссов
' +'
+ до 300 XP
' - +'
★ Финальная ачивка
' + +'
★ Финальная ачивка
' +'
'; /* === Overall progress === */ @@ -2995,7 +2995,7 @@ function buildFinal1(){ /* === Celebration === */ html += ' @@ -326,7 +326,7 @@ const PARAS = [ { id:'p15', num:'§ 15', name:'Преобразования', sub:'вынесение, рационализация' }, { id:'p16', num:'§ 16', name:'y = ⁿ√x', sub:'свойства и графики' }, { id:'p17', num:'§ 17', name:'Иррац. уравнения', sub:'возведение в степень' }, - { id:'final2', num:'★', name:'Финал главы', sub:'4 босса', final:true }, + { id:'final2', num:'★', name:'Финал главы', sub:'4 босса', final:true }, ]; function buildParaSelector(){ @@ -431,7 +431,7 @@ function buildSidebar(id){ html+='

Подсказка

'+tip.html+'
'; if(STATE.achievements.size>0){ html+='

Достижения

'; - [...STATE.achievements.values()].slice(-4).forEach(text=>{ html+='
✓ '+text+'
'; }); + [...STATE.achievements.values()].slice(-4).forEach(text=>{ html+='
✓ '+text+'
'; }); html+='
'; } box.innerHTML=html; @@ -547,7 +547,7 @@ function makeBoss(paraId, bossDef){ const q=document.getElementById(idP+'-q'); const fb=document.getElementById(idP+'-fb'); if(st.defeated){ - stageEl.textContent='✓ Побеждён'; fill.style.width='100%'; + stageEl.textContent='✓ Побеждён'; fill.style.width='100%'; q.innerHTML='Босс повержен!'; document.getElementById(idP+'-go').disabled=true; document.getElementById(idP+'-go').style.opacity=.5; @@ -1223,7 +1223,7 @@ function buildP17(){
  1. Возводим в квадрат: $x + 3 = 25$.
  2. $x = 22$.
  3. -
  4. Проверка: $\\sqrt{22 + 3} = \\sqrt{25} = 5$ ✓.
  5. +
  6. Проверка: $\\sqrt{22 + 3} = \\sqrt{25} = 5$ ✓.

Уравнение с подвохом. $\\sqrt{x - 1} = x - 7$.

Возводим в квадрат: $x - 1 = (x - 7)^2 = x^2 - 14x + 49$.

@@ -1231,7 +1231,7 @@ function buildP17(){

Проверка:

Ответ: $x = 10$.

`); @@ -1369,15 +1369,15 @@ function buildFinal2(){ /* === Hero card === */ html += '
' - +'
' + +'
' +'
' +'
ФИНАЛ ГЛАВЫ 2
' +'

4 интегрированных босса

' +'

Каждый босс проверяет синтез знаний главы. Победи всех — получи ачивку «Магистр корней» и +100 XP.

' +'
' - +'
★ 4 босса
' + +'
★ 4 босса
' +'
+ до 200 XP
' - +'
★ Финальная ачивка
' + +'
★ Финальная ачивка
' +'
'; /* === Overall progress === */ @@ -1394,7 +1394,7 @@ function buildFinal2(){ /* === Celebration === */ html += ' @@ -252,7 +252,7 @@ const ACH_LABELS = { p22_done:'Наиб./наим. значения — освоены!', ch3_done:'Глава 3 — Производная пройдена!', deriv_master:'Магистр производных! +150 XP', - alg10_master:'★ Алгебра 10 пройдена полностью!', + alg10_master:'★ Алгебра 10 пройдена полностью!', }; function loadProgress(){ @@ -331,7 +331,7 @@ const PARAS = [ { id:'p20', num:'§ 20', name:'Касательная, монотонность', sub:'геом. смысл' }, { id:'p21', num:'§ 21', name:'Исследование функций', sub:'экстремумы' }, { id:'p22', num:'§ 22', name:'Наиб. и наим. значения', sub:'на отрезке' }, - { id:'final3', num:'★', name:'Финал главы', sub:'5 боссов', final:true }, + { id:'final3', num:'★', name:'Финал главы', sub:'5 боссов', final:true }, ]; function buildParaSelector(){ @@ -437,7 +437,7 @@ function buildSidebar(id){ html+='

Подсказка

'+tip.html+'
'; if(STATE.achievements.size>0){ html+='

Достижения

'; - [...STATE.achievements.values()].slice(-4).forEach(text=>{ html+='
✓ '+text+'
'; }); + [...STATE.achievements.values()].slice(-4).forEach(text=>{ html+='
✓ '+text+'
'; }); html+='
'; } box.innerHTML=html; @@ -553,7 +553,7 @@ function makeBoss(paraId, bossDef){ const q=document.getElementById(idP+'-q'); const fb=document.getElementById(idP+'-fb'); if(st.defeated){ - stageEl.textContent='✓ Побеждён'; fill.style.width='100%'; + stageEl.textContent='✓ Побеждён'; fill.style.width='100%'; q.innerHTML='Босс повержен!'; document.getElementById(idP+'-go').disabled=true; document.getElementById(idP+'-go').style.opacity=.5; @@ -1379,15 +1379,15 @@ function buildFinal3(){ let html = ''; html += '
' - +'
' + +'
' +'
' +'
ФИНАЛ ГЛАВЫ 3
' +'

5 интегрированных боссов

' +'

Каждый босс проверяет синтез знаний главы. Победи всех — получи ачивку «Магистр производных» и +150 XP.
А если уже завершил Главы 1 и 2 — получишь финальную ачивку «Алгебра 10 пройдена!».

' +'
' - +'
★ 5 боссов
' + +'
★ 5 боссов
' +'
+ до 250 XP
' - +'
★ Курсовая ачивка
' + +'
★ Курсовая ачивка
' +'
'; html += '
' @@ -1402,10 +1402,10 @@ function buildFinal3(){ html += '
'; html += ''; @@ -1476,7 +1476,7 @@ function buildFinal3(){ const q=document.getElementById('bb-'+b.n+'-q'); const fb=document.getElementById('bb-'+b.n+'-fb'); if(st.defeated){ - stageEl.textContent='✓ Побеждён'; + stageEl.textContent='✓ Побеждён'; fill.style.width='100%'; q.innerHTML='Босс повержен!'; document.getElementById('bb-'+b.n+'-go').disabled=true; diff --git a/frontend/textbooks/algebra_11_ch1.html b/frontend/textbooks/algebra_11_ch1.html index fc8a740..eab389f 100644 --- a/frontend/textbooks/algebra_11_ch1.html +++ b/frontend/textbooks/algebra_11_ch1.html @@ -265,7 +265,7 @@ input[type=range]:active{box-shadow:0 0 0 4px var(--pri-soft);border-radius:8px}
§ 1

Степень с рациональным показателем

§ 2

Степенная функция

§ 3

Определение логарифма

-

Финал главы

+

Финал главы

@@ -294,7 +294,7 @@ const PARAS = [ { id:'p1', num:'§ 1', name:'Степень с рациональным показателем', sub:'$a^{m/n} = \\sqrt[n]{a^m}$' }, { id:'p2', num:'§ 2', name:'Степенная функция', sub:'$y = x^\\alpha$' }, { id:'p3', num:'§ 3', name:'Определение логарифма', sub:'$\\log_a b = c$' }, - { id:'final1', num:'★', name:'Финал главы', sub:'Итоги · боссы главы 1', final:true } + { id:'final1', num:'★', name:'Финал главы', sub:'Итоги · боссы главы 1', final:true } ]; PARAS.forEach(p => { STATE.progress[p.id] = 0; }); @@ -1829,7 +1829,7 @@ function buildFinal1(){ if(BOSS_STATE[idx].defeated){ card.style.background = 'linear-gradient(135deg,var(--sec-acc-soft),var(--pri-soft))'; card.classList.add('glow'); - goBtn.disabled = true; goBtn.style.opacity = .55; goBtn.textContent = '✓ Повержен'; + goBtn.disabled = true; goBtn.style.opacity = .55; goBtn.textContent = '✓ Повержен'; ansInp.disabled = true; } goBtn.addEventListener('click', ()=>{ @@ -1843,7 +1843,7 @@ function buildFinal1(){ feedback(fb, true, '✓ Босс '+b.n+' повержен! +10 XP. '+b.hint); addXp(10, 'boss-ch1-'+b.n); bumpProgress('final1', 18); - goBtn.disabled = true; goBtn.style.opacity = .55; goBtn.textContent = '✓ Повержен'; + goBtn.disabled = true; goBtn.style.opacity = .55; goBtn.textContent = '✓ Повержен'; ansInp.disabled = true; card.style.background = 'linear-gradient(135deg,var(--sec-acc-soft),var(--pri-soft))'; card.classList.add('glow','pulse'); diff --git a/frontend/textbooks/algebra_11_ch2.html b/frontend/textbooks/algebra_11_ch2.html index 9d84125..2c0a14d 100644 --- a/frontend/textbooks/algebra_11_ch2.html +++ b/frontend/textbooks/algebra_11_ch2.html @@ -245,7 +245,7 @@ input[type=range]:active{box-shadow:0 0 0 4px var(--pri-soft);border-radius:8px}
§ 4

Показательная функция

§ 5

Показательные уравнения

§ 6

Показательные неравенства

-

Финал главы

+

Финал главы

@@ -274,7 +274,7 @@ const PARAS = [ { id:'p4', num:'§ 4', name:'Показательная функция', sub:'$y = a^x$' }, { id:'p5', num:'§ 5', name:'Показательные уравнения', sub:'$a^{f(x)} = a^{g(x)}$' }, { id:'p6', num:'§ 6', name:'Показательные неравенства', sub:'$a^x > b$' }, - { id:'final2', num:'★', name:'Финал главы', sub:'Итоги · боссы главы 2', final:true } + { id:'final2', num:'★', name:'Финал главы', sub:'Итоги · боссы главы 2', final:true } ]; PARAS.forEach(p => { STATE.progress[p.id] = 0; }); @@ -2122,7 +2122,7 @@ function buildFinal2(){ if(BOSS_STATE[idx].defeated){ card.style.background = 'linear-gradient(135deg,var(--sec-acc-soft),var(--pri-soft))'; card.classList.add('glow'); - goBtn.disabled = true; goBtn.style.opacity = .55; goBtn.textContent = '✓ Повержен'; + goBtn.disabled = true; goBtn.style.opacity = .55; goBtn.textContent = '✓ Повержен'; ansInp.disabled = true; } goBtn.addEventListener('click', ()=>{ @@ -2136,7 +2136,7 @@ function buildFinal2(){ feedback(fb, true, '✓ Босс '+b.n+' повержен! +10 XP. '+b.hint); addXp(10, 'boss-ch2-'+b.n); bumpProgress('final2', 18); - goBtn.disabled = true; goBtn.style.opacity = .55; goBtn.textContent = '✓ Повержен'; + goBtn.disabled = true; goBtn.style.opacity = .55; goBtn.textContent = '✓ Повержен'; ansInp.disabled = true; card.style.background = 'linear-gradient(135deg,var(--sec-acc-soft),var(--pri-soft))'; card.classList.add('glow','pulse'); diff --git a/frontend/textbooks/algebra_11_ch3.html b/frontend/textbooks/algebra_11_ch3.html index 968e526..b4e6f20 100644 --- a/frontend/textbooks/algebra_11_ch3.html +++ b/frontend/textbooks/algebra_11_ch3.html @@ -267,7 +267,7 @@ input[type=range]:active{box-shadow:0 0 0 4px var(--pri-soft);border-radius:8px}
§ 8

Логарифмическая функция

§ 9

Логарифмические уравнения

§ 10

Логарифмические неравенства

-

Финал главы

+

Финал главы

@@ -297,7 +297,7 @@ const PARAS = [ { id:'p8', num:'§ 8', name:'Логарифмическая функция', sub:'$y = \\log_a x$' }, { id:'p9', num:'§ 9', name:'Логарифмические уравнения', sub:'$\\log_a f = \\log_a g$' }, { id:'p10', num:'§ 10', name:'Логарифмические неравенства', sub:'$\\log_a f > b$' }, - { id:'final3', num:'★', name:'Финал главы', sub:'Итоги · боссы главы 3', final:true } + { id:'final3', num:'★', name:'Финал главы', sub:'Итоги · боссы главы 3', final:true } ]; PARAS.forEach(p => { STATE.progress[p.id] = 0; }); @@ -2682,7 +2682,7 @@ function buildFinal3(){ if(BOSS_STATE[idx].defeated){ card.style.background = 'linear-gradient(135deg,var(--sec-acc-soft),var(--pri-soft))'; card.classList.add('glow'); - goBtn.disabled = true; goBtn.style.opacity = .55; goBtn.textContent = '✓ Повержен'; + goBtn.disabled = true; goBtn.style.opacity = .55; goBtn.textContent = '✓ Повержен'; ansInp.disabled = true; } goBtn.addEventListener('click', ()=>{ @@ -2696,7 +2696,7 @@ function buildFinal3(){ feedback(fb, true, '✓ Босс '+b.n+' повержен! +10 XP. '+b.hint); addXp(10, 'boss-ch3-'+b.n); bumpProgress('final3', 18); - goBtn.disabled = true; goBtn.style.opacity = .55; goBtn.textContent = '✓ Повержен'; + goBtn.disabled = true; goBtn.style.opacity = .55; goBtn.textContent = '✓ Повержен'; ansInp.disabled = true; card.style.background = 'linear-gradient(135deg,var(--sec-acc-soft),var(--pri-soft))'; card.classList.add('glow','pulse'); diff --git a/frontend/textbooks/algebra_11_hub.html b/frontend/textbooks/algebra_11_hub.html index 6025c6a..97fd9b2 100644 --- a/frontend/textbooks/algebra_11_hub.html +++ b/frontend/textbooks/algebra_11_hub.html @@ -534,7 +534,7 @@ var FIN_BOSSES = [ title: 'Графический синтез', tag: 'Гл. 2 + Гл. 3', q: 'Сколько решений имеет уравнение $2^x = 6 - x$?', - hint: '$y = 2^x$ возрастает, $y = 6 - x$ убывает. При $x = 2$: $4 = 4$ ✓. Пересечение возр. и убыв. графиков.', + hint: '$y = 2^x$ возрастает, $y = 6 - x$ убывает. При $x = 2$: $4 = 4$ ✓. Пересечение возр. и убыв. графиков.', ans: 1, step: '1' }, diff --git a/frontend/textbooks/geometry_10_r2.html b/frontend/textbooks/geometry_10_r2.html index 1c1824e..c791818 100644 --- a/frontend/textbooks/geometry_10_r2.html +++ b/frontend/textbooks/geometry_10_r2.html @@ -239,7 +239,7 @@ const PARAS = [ { id:'p1', num:'§ 4', name:'Расположение прямых', sub:'Пересек. · парал. · скрещ.' }, { id:'p2', num:'§ 5', name:'Прямая и плоскость', sub:'3 случая · признак $a \\parallel \\alpha$' }, { id:'p3', num:'§ 6', name:'Две плоскости', sub:'Признак $\\alpha \\parallel \\beta$' }, - { id:'final', num:'★', name:'Финал раздела', sub:'4 интегрированных босса', final:true } + { id:'final', num:'★', name:'Финал раздела', sub:'4 интегрированных босса', final:true } ]; PARAS.forEach(p => { STATE.progress[p.id] = 0; }); diff --git a/frontend/textbooks/geometry_10_r3.html b/frontend/textbooks/geometry_10_r3.html index 0bf42aa..e62695a 100644 --- a/frontend/textbooks/geometry_10_r3.html +++ b/frontend/textbooks/geometry_10_r3.html @@ -241,7 +241,7 @@ const PARAS = [ { id:'p2', num:'§ 8', name:'Расстояния', sub:'Точка → плоскость, скрещ.' }, { id:'p3', num:'§ 9', name:'Угол + ТТП', sub:'Наклонная, проекция, ТТП' }, { id:'p4', num:'§ 10', name:'⊥-плоскости', sub:'Двугранный угол, признак' }, - { id:'final', num:'★', name:'Финал раздела', sub:'5 интегр. боссов', final:true } + { id:'final', num:'★', name:'Финал раздела', sub:'5 интегр. боссов', final:true } ]; PARAS.forEach(p => { STATE.progress[p.id] = 0; }); diff --git a/frontend/textbooks/geometry_10_r4.html b/frontend/textbooks/geometry_10_r4.html index e0f08b2..863daf2 100644 --- a/frontend/textbooks/geometry_10_r4.html +++ b/frontend/textbooks/geometry_10_r4.html @@ -244,7 +244,7 @@ const PARAS = [ { id:'p2', num:'§ 12', name:'Векторы', sub:'$\\vec{a}+\\vec{b}, k\\vec{a}$, базис' }, { id:'p3', num:'§ 13', name:'Скаляр. произв.', sub:'$\\vec{a}\\cdot\\vec{b} = x_1x_2+y_1y_2+z_1z_2$' }, { id:'p4', num:'§ 14', name:'Применение метода', sub:'Куб в координатах · углы' }, - { id:'final', num:'★', name:'Финал курса', sub:'Мега-ачивка stereo10_master', final:true } + { id:'final', num:'★', name:'Финал курса', sub:'Мега-ачивка stereo10_master', final:true } ]; PARAS.forEach(p => { STATE.progress[p.id] = 0; }); @@ -258,7 +258,7 @@ const ACH_LABELS = { p4_done:'§14 — применение метода освоено', start:'Начало раздела 4!', r4_done:'Раздел 4 пройден!', - master:'★ Геометрия 10 пройдена!' + master:'★ Геометрия 10 пройдена!' }; function loadProgress(){ @@ -775,7 +775,7 @@ function buildP4(){ function buildFinal(){ const box = document.getElementById('final-body'); if(!box) return; let html = ''; - html += '

Финал курса · 4 интегрированных босса

Победи 4 финальных босса (координаты, векторы, скаляр., сборная). После — ачивка stereo10_r4_master + 120 XP.

★ Если все 4 ачивки разделов получены — выдаётся МЕГА-АЧИВКА stereo10_master + 200 XP супер-бонус.

'; + html += '

Финал курса · 4 интегрированных босса

Победи 4 финальных босса (координаты, векторы, скаляр., сборная). После — ачивка stereo10_r4_master + 120 XP.

★ Если все 4 ачивки разделов получены — выдаётся МЕГА-АЧИВКА stereo10_master + 200 XP супер-бонус.

'; html += '
'; html += '
'; @@ -819,10 +819,10 @@ function checkFinalComplete(){ ach.push('stereo10_master'); localStorage.setItem('geometry10_achievements', JSON.stringify(ach)); addXp(200, 'master'); - achievement('master', '★ Геометрия 10 пройдена!'); - megaHtml = '
★★★ ГЕОМЕТРИЯ 10 ПРОЙДЕНА! ★★★
Все 4 раздела освоены. Стереометрия — твоя сила. Главная ачивка курса stereo10_master + 200 XP мега-бонус.
'; + achievement('master', '★ Геометрия 10 пройдена!'); + megaHtml = '
★★★ ГЕОМЕТРИЯ 10 ПРОЙДЕНА! ★★★
Все 4 раздела освоены. Стереометрия — твоя сила. Главная ачивка курса stereo10_master + 200 XP мега-бонус.
'; } else if(hasAll){ - megaHtml = '
★ Главная ачивка stereo10_master уже получена. Геометрия 10 пройдена!
'; + megaHtml = '
★ Главная ачивка stereo10_master уже получена. Геометрия 10 пройдена!
'; } else { const missing = []; if(ach.indexOf('stereo10_r1_master')<0) missing.push('R1'); diff --git a/frontend/textbooks/geometry_11_ch1.html b/frontend/textbooks/geometry_11_ch1.html index 4b61063..8141120 100644 --- a/frontend/textbooks/geometry_11_ch1.html +++ b/frontend/textbooks/geometry_11_ch1.html @@ -267,7 +267,7 @@ input[type=range]:active{box-shadow:0 0 0 4px var(--pri-soft);border-radius:8px}
§ 1

Призма

§ 2

Цилиндр

-

Финал раздела

+

Финал раздела

@@ -295,7 +295,7 @@ const _TB_SLUG = 'geometry-11-ch1'; const PARAS = [ { id:'p1', num:'§ 1', name:"Призма", sub:'$S_{бок}=Pl$, $V=S_{осн}h$' }, { id:'p2', num:'§ 2', name:"Цилиндр", sub:'$S_{бок}=2\\pi Rh$, $V=\\pi R^2h$' }, - { id:'final1', num:'★', name:"Финал раздела", sub:'Итоги · боссы раздела 1', final:true } + { id:'final1', num:'★', name:"Финал раздела", sub:'Итоги · боссы раздела 1', final:true } ]; PARAS.forEach(p => { STATE.progress[p.id] = 0; }); diff --git a/frontend/textbooks/geometry_11_ch2.html b/frontend/textbooks/geometry_11_ch2.html index 170321f..697473b 100644 --- a/frontend/textbooks/geometry_11_ch2.html +++ b/frontend/textbooks/geometry_11_ch2.html @@ -267,7 +267,7 @@ input[type=range]:active{box-shadow:0 0 0 4px var(--pri-soft);border-radius:8px}
§ 3

Пирамида

§ 4

Конус

-

Финал раздела

+

Финал раздела

@@ -295,7 +295,7 @@ const _TB_SLUG = 'geometry-11-ch2'; const PARAS = [ { id:'p3', num:'§ 3', name:"Пирамида", sub:'$V=\\frac{1}{3}S_{осн}h$' }, { id:'p4', num:'§ 4', name:"Конус", sub:'$S_{бок}=\\pi Rl$' }, - { id:'final2', num:'★', name:"Финал раздела", sub:'Итоги · боссы раздела 2', final:true } + { id:'final2', num:'★', name:"Финал раздела", sub:'Итоги · боссы раздела 2', final:true } ]; PARAS.forEach(p => { STATE.progress[p.id] = 0; }); diff --git a/frontend/textbooks/geometry_11_ch3.html b/frontend/textbooks/geometry_11_ch3.html index f82714a..c9b7071 100644 --- a/frontend/textbooks/geometry_11_ch3.html +++ b/frontend/textbooks/geometry_11_ch3.html @@ -269,7 +269,7 @@ input[type=range]:active{box-shadow:0 0 0 4px var(--pri-soft);border-radius:8px}
§ 5

Сфера

§ 6

Шар

§ 7

Правильные многогранники

-

Финал раздела

+

Финал раздела

@@ -298,7 +298,7 @@ const PARAS = [ { id:'p5', num:'§ 5', name:"Сфера", sub:'$(x-a)^2+(y-b)^2+(z-c)^2=R^2$' }, { id:'p6', num:'§ 6', name:"Шар", sub:'$S=4\\pi R^2$, $V=\\frac{4}{3}\\pi R^3$' }, { id:'p7', num:'§ 7', name:"Правильные многогранники", sub:'5 платоновых тел' }, - { id:'final3', num:'★', name:"Финал раздела", sub:'Итоги · боссы раздела 3', final:true } + { id:'final3', num:'★', name:"Финал раздела", sub:'Итоги · боссы раздела 3', final:true } ]; PARAS.forEach(p => { STATE.progress[p.id] = 0; }); @@ -1724,11 +1724,11 @@ function buildP7(){ + '

где $V$ — число вершин, $E$ — рёбер, $F$ — граней.

' + '

Проверка для платоновых тел:

' + '' + '

Двойственные пары.

' + '

Если в исходном теле соединить центры соседних граней — получится двойственный многогранник. Числа $F$ и $V$ у двойственной пары меняются местами, число рёбер $E$ сохраняется.

' diff --git a/frontend/textbooks/geometry_11_ch4.html b/frontend/textbooks/geometry_11_ch4.html index b8bfc61..51b0a03 100644 --- a/frontend/textbooks/geometry_11_ch4.html +++ b/frontend/textbooks/geometry_11_ch4.html @@ -271,7 +271,7 @@ input[type=range]:active{box-shadow:0 0 0 4px var(--pri-soft);border-radius:8px}
§ 9

Геометрические величины

§ 10

Координаты и векторы

§ 11

Геометрические построения

-

Финал раздела

+

Финал раздела

@@ -301,7 +301,7 @@ const PARAS = [ { id:'p9', num:'§ 9', name:"Геометрические величины", sub:'площади, объёмы' }, { id:'p10', num:'§ 10', name:"Координаты и векторы", sub:'3D: $\\vec{a}=(x;y;z)$' }, { id:'p11', num:'§ 11', name:"Геометрические построения", sub:'циркуль и линейка' }, - { id:'final4', num:'★', name:"Финал раздела", sub:'Итоги · боссы раздела 4', final:true } + { id:'final4', num:'★', name:"Финал раздела", sub:'Итоги · боссы раздела 4', final:true } ]; PARAS.forEach(p => { STATE.progress[p.id] = 0; });