ÿþ<!DOCTYPE html> <html lang="hi"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>CTET Paper 2 -  # ? $  5  6 ?  M 7 > 6 > 8 M $ M 0 (Mathematics & Pedagogy)  - M / > 8 8 G   ( 0 G  0 </title> <link href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'%3E%3Ccircle cx='50' cy='50' r='45' fill='%230088cc'/%3E%3Ctext x='50' y='67' font-size='40' text-anchor='middle' fill='white' font-weight='bold'%3E %3C/text%3E%3C/svg%3E" rel="icon"> <script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/2.5.1/jspdf.umd.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/html2canvas/1.4.1/html2canvas.min.js"></script> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css"> <style> :root { --primary: #0088cc; --primary-dark: #006699; --secondary: #66ccff; --danger: #f44336; --success: #43a047; --light: #e6f7ff; --dark: #004466; --gray: #006699; --border-radius: 12px; --box-shadow: 0 4px 20px rgba(0, 0, 0, 0.1); --transition: all 0.3s ease; } * { margin: 0; padding: 0; box-sizing: border-box; font-family: 'Segoe UI', 'Noto Sans', 'Noto Sans Devanagari', system-ui, -apple-system, sans-serif; } body { background: linear-gradient(135deg, #e6f7ff 0%, #b3e0ff 100%); min-height: 100vh; display: flex; justify-content: center; align-items: center; padding: 20px; color: var(--dark); line-height: 1.6; } .container { width: 100%; max-width: 1000px; background: white; border-radius: var(--border-radius); box-shadow: var(--box-shadow); overflow: hidden; transition: var(--transition); animation: fadeIn 0.5s ease-out; } @keyframes fadeIn { from { opacity: 0; transform: translateY(20px); } to { opacity: 1; transform: translateY(0); } } .header { background: linear-gradient(135deg, var(--primary), var(--primary-dark)); color: white; padding: 30px 20px; text-align: center; position: relative; overflow: hidden; } .header::before { content: '•''; position: absolute; bottom: -30px; right: -30px; font-size: 120px; opacity: 0.15; transform: rotate(-15deg); } .header h1 { font-size: 1.6rem; margin-bottom: 10px; font-weight: 700; position: relative; z-index: 1; } .header p { font-size: 1rem; opacity: 0.9; position: relative; z-index: 1; } .header-controls { position: absolute; top: 20px; right: 20px; display: flex; gap: 12px; z-index: 5; } .header-controls .home-icon { position: relative; top: 0; left: 0; color: white; font-size: 24px; cursor: pointer; transition: var(--transition); text-decoration: none; display: inline-block; } .header-controls .home-icon:hover { transform: scale(1.1); color: rgba(255, 255, 255, 0.8); } .lang-toggle { background: rgba(255,255,255,0.15); border: 1px solid rgba(255,255,255,0.3); border-radius: 30px; color: white; padding: 6px 16px; font-size: 0.9rem; font-weight: 600; cursor: pointer; transition: var(--transition); display: flex; align-items: center; gap: 8px; } .lang-toggle:hover { background: rgba(255,255,255,0.3); } .lang-toggle i { font-size: 1rem; } .content-area { padding: 30px; } .hidden { display: none !important; } .btn { display: inline-block; padding: 12px 28px; border-radius: 50px; font-weight: 600; cursor: pointer; transition: var(--transition); border: none; text-align: center; box-shadow: 0 4px 10px rgba(0, 0, 0, 0.1); margin: 10px 5px; } .btn-primary { background: var(--primary); color: white; } .btn-primary:hover { background: var(--primary-dark); transform: translateY(-2px); box-shadow: 0 8px 15px rgba(0, 136, 204, 0.3); } .btn-success { background: var(--success); color: white; } .btn-success:hover { background: #2e7d32; transform: translateY(-2px); } .btn-danger { background: var(--danger); color: white; } .btn-danger:hover { background: #d32f2f; transform: translateY(-2px); } .btn-level { background: var(--light); color: var(--dark); border: 2px solid var(--gray); font-size: 1.1rem; padding: 15px 30px; width: 200px; } .btn-level:hover { transform: translateY(-5px); box-shadow: 0 10px 20px rgba(0, 0, 0, 0.2); } .btn-level.selected { background: var(--primary); color: white; border-color: var(--primary); } .btn-group { display: flex; flex-wrap: wrap; justify-content: center; gap: 10px; margin: 20px 0; } .level-buttons { display: flex; justify-content: center; gap: 20px; margin: 30px 0; flex-wrap: wrap; } .section-title { text-align: center; margin-bottom: 25px; color: var(--primary-dark); font-size: 1.5rem; position: relative; padding-bottom: 10px; } .section-title::after { content: ''; position: absolute; bottom: 0; left: 50%; transform: translateX(-50%); width: 80px; height: 3px; background: var(--secondary); border-radius: 3px; } .checkbox-container { display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: 12px; margin: 25px 0; max-height: 450px; overflow-y: auto; padding: 10px; border: 1px solid #eee; border-radius: 12px; } .checkbox-item { display: flex; align-items: center; } .checkbox-item input { margin-right: 10px; width: 18px; height: 18px; cursor: pointer; } .checkbox-item label { cursor: pointer; font-size: 0.85rem; } .practice-options { display: grid; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); gap: 20px; margin: 30px 0; } .option-card { background: white; border-radius: var(--border-radius); padding: 25px; box-shadow: var(--box-shadow); text-align: center; transition: var(--transition); cursor: pointer; border: 2px solid transparent; } .option-card:hover { transform: translateY(-5px); box-shadow: 0 10px 25px rgba(0, 0, 0, 0.15); } .option-card.selected { border-color: var(--primary); background: rgba(0, 136, 204, 0.05); } .option-icon { font-size: 2.5rem; color: var(--primary); margin-bottom: 15px; } .option-title { font-size: 1.2rem; font-weight: 600; margin-bottom: 10px; color: var(--primary-dark); } .option-description { color: var(--gray); font-size: 0.85rem; } .question-count-selector { display: flex; justify-content: center; align-items: center; gap: 15px; margin: 20px 0; } .count-btn { width: 40px; height: 40px; border-radius: 50%; background: var(--light); border: 2px solid var(--gray); display: flex; align-items: center; justify-content: center; cursor: pointer; font-weight: bold; transition: var(--transition); } .count-btn:hover { background: var(--primary); color: white; border-color: var(--primary); } .question-count { font-size: 1.5rem; font-weight: 600; min-width: 60px; text-align: center; } .timer-options { display: flex; justify-content: center; gap: 15px; margin: 20px 0; flex-wrap: wrap; } .timer-btn { padding: 10px 20px; background: var(--light); border: 2px solid var(--gray); border-radius: 30px; cursor: pointer; transition: var(--transition); } .timer-btn.selected { background: var(--primary); color: white; border-color: var(--primary); } .question { margin-bottom: 20px; page-break-inside: avoid; } .question-text { font-weight: 500; margin-bottom: 8px; } .option { margin-left: 20px; margin-bottom: 5px; } .action-buttons { display: flex; justify-content: center; flex-wrap: wrap; gap: 15px; margin-top: 40px; } .answer-sheet { margin-top: 40px; padding: 20px; background: #f8f9fa; border-radius: var(--border-radius); } .answer-table { width: 100%; border-collapse: collapse; margin-top: 15px; } .answer-table th, .answer-table td { border: 1px solid #ddd; padding: 8px; text-align: center; } .answer-table th { background-color: var(--primary); color: white; } .instructions { margin-bottom: 30px; padding: 20px; background: #e6f7ff; border-radius: var(--border-radius); border-left: 5px solid var(--primary); } .instructions ol { padding-left: 20px; margin-top: 10px; } .paper-header { text-align: center; margin-bottom: 20px; } .home-icon { position: absolute; top: 20px; left: 20px; color: white; font-size: 24px; cursor: pointer; transition: var(--transition); z-index: 2; } .home-icon:hover { transform: scale(1.1); } @media (max-width: 768px) { .checkbox-container { grid-template-columns: 1fr; } .level-buttons { flex-direction: column; align-items: center; } .btn-level { width: 100%; max-width: 250px; } .header h1 { font-size: 1.2rem; } .header-controls { top: 12px; right: 12px; gap: 8px; } .lang-toggle { font-size: 0.7rem; padding: 4px 12px; } } @media print { .action-buttons { display: none; } .home-icon { display: none; } .header-controls { display: none; } .question { page-break-inside: avoid; } } .text-center { text-align: center; } </style> <script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-4930137336556867" crossorigin="anonymous"></script> <script async src="https://www.googletagmanager.com/gtag/js?id=G-KMZ9RJ62EY"></script> <script> window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-KMZ9RJ62EY'); </script> </head> <body> <div class="container" id="startContainer"> <div class="header"> <div class="header-controls"> <a href="ctet-exam-paper2-practice-set-generator.html" class="home-icon" ><i class="fas fa-home"></i></a> <button class="lang-toggle" id="langToggleBtn"><i class="fas fa-globe"></i> <span id="langLabel">9 ?  & @ </span></button> </div> <br /><br /> <h1 id="mainTitle"><i class="fas fa-calculator"></i> CTET Paper 2 -  # ? $  5  6 ?  M 7 > 6 > 8 M $ M 0 (Mathematics & Pedagogy)  - M / > 8 8 G   ( 0 G  0 </h1> <p id="mainSubtitle">CTET Paper 2 (  M  * M 0 > % . ?  8 M $ 0 ) 9 G $ A  # ? $ ,  # ? $ @ /  5 ' > 0 # >    5  6 ?  M 7 # 5 ? ' ? / K   > 5 ? 7 / 5 > 0  - M / > 8 </p> </div> <div class="content-area"> <div id="startScreen"> <h2 class="section-title" id="startTitle">•'  # ? $  5  6 ?  M 7 > 6 > 8 M $ M 0 -  - M / > 8 8 G   ( 0 G  0 </h2> <p class="text-center" id="startDesc">CTET Paper 2 9 G $ A  # ? $ ,  # ? $ @ /  5 ' > 0 # >   , 8 . 8 M / > 8 . > ' > (  5  6 ?  M 7 # 5 ? ' ? / K   > 5 ? 8 M $ C $  - M / > 8 8 G  $ H / > 0  0 G  </p> <div class="btn-group"> <button class="btn btn-primary" id="startGeneratingBtn"><i class="fas fa-play"></i> <span id="startBtnText"> - M / > 8 8 G  , ( > ( > 6 A 0 B  0 G  </span></button> </div> </div> <div id="practiceTypeSelection" class="hidden"> <h2 class="section-title" id="practiceTypeTitle"> - M / > 8  > * M 0  > 0  A ( G  </h2> <p class="text-center" id="practiceTypeDesc"> * ( @ $ H / > 0 @  G  ( A 8 > 0  - M / > 8 8 G   A ( G  :</p> <div class="practice-options"> <div class="option-card" data-type="chapter-wise"> <div class="option-icon"><i class="fas fa-book-open"></i></div> <div class="option-title" id="optChapterTitle">5 ? 7 / > ( A 8 > 0  - M / > 8 </div> <div class="option-description" id="optChapterDesc"> ? 8 @ 5 ? 6 G 7 5 ? 7 /  >  9 (  - M / > 8  0 G  </div> </div> <div class="option-card" data-type="full-length"> <div class="option-icon"><i class="fas fa-file-alt"></i></div> <div class="option-title" id="optFullTitle">* B 0 M # 2  , >   G 8 M  </div> <div class="option-description" id="optFullDesc">CTET * H  0 M ( * 0  ' > 0 ? $ 50 * M 0 6 M ( K   > 8 G  </div> </div> <div class="option-card" data-type="previous-year"> <div class="option-icon"><i class="fas fa-calendar-alt"></i></div> <div class="option-title" id="optPrevTitle">* ?  2 G 5 0 M 7 K   G * M 0 6 M ( </div> <div class="option-description" id="optPrevDesc">* ?  2 @ TET * 0 @  M 7 >   * 0  ' > 0 ? $ * M 0 6 M ( </div> </div> </div> <div class="btn-group"> <button class="btn btn-danger" id="backToStartBtn"><span id="backStartBtnText">* @  G  >   </span></button> <button class="btn btn-success" id="proceedToChaptersBtn"><span id="proceedBtnText">5 ? 7 /  A ( G  ’!</span></button> </div> </div> <div id="chapterSelection" class="hidden"> <h2 class="section-title" id="chapterTitle">=ØÚÜ  # ? $  5  6 ?  M 7 > 6 > 8 M $ M 0 - 5 ? 7 /  A ( G  </h2> <form id="chapterForm"> <div class="checkbox-container" id="mathTopicsContainer"></div> </form> <div id="questionCountSection"> <h3 class="section-title" id="qCountTitle">* M 0 6 M ( K   @ 8   M / >  A ( G  </h3> <div class="question-count-selector"> <div class="count-btn" id="decreaseCount">-</div> <div class="question-count" id="questionCount">50</div> <div class="count-btn" id="increaseCount">+</div> </div> </div> <div class="btn-group"> <button class="btn btn-danger" id="backToPracticeTypeBtn"><span id="backPracticeBtnText">* @  G </span></button> <button class="btn btn-success" id="generateAssignmentBtn"><span id="generateAssignBtnText"> ? ( >  8 M $ 0  A ( G  ’!</span></button> </div> </div> <div id="levelSelection" class="hidden"> <h2 class="section-title" id="levelTitle"> ? ( >  8 M $ 0  A ( G  </h2> <p class="text-center" id="levelDesc">CTET Paper 2 * 0 @  M 7 >  G  ( A 8 > 0 8 M $ 0  A ( G  :</p> <div class="level-buttons"> <button class="btn btn-level" id="level1Btn"><span id="l1Title">Level 1</span><br><small id="l1Sub">, A ( ? / > & @ (* M 0 > 0  - ?  )</small></button> <button class="btn btn-level" id="level2Btn"><span id="l2Title">Level 2</span><br><small id="l2Sub">. ' M / . (CTET 8 M $ 0 )</small></button> <button class="btn btn-level" id="level3Btn"><span id="l3Title">Level 3</span><br><small id="l3Sub">  M  (6 ?  M 7  * > $ M 0 $ > )</small></button> </div> <div id="timerOptions"> <h3 class="section-title" id="timerTitle">8 . / 8 @ . >  A ( G  </h3> <div class="timer-options"> <div class="timer-btn" data-time="30"><span id="t30">30 . ? (  </span></div> <div class="timer-btn" data-time="45"><span id="t45">45 . ? (  </span></div> <div class="timer-btn" data-time="60" class="selected"><span id="t60">60 . ? (  </span></div> <div class="timer-btn" data-time="90"><span id="t90">90 . ? (  </span></div> </div> </div> <div class="btn-group"> <button class="btn btn-danger" id="backToChaptersBtn"><span id="backChaptersBtnText">5 ? 7 / K  * 0 5 > * 8 </span></button> <button class="btn btn-success" id="generateFinalBtn"><span id="generateFinalBtnText"> - M / > 8 8 G   ( 0 G   0 G  </span></button> </div> </div> </div> </div> <div class="container hidden" id="generatedPaperContainer"></div> <script> const { jsPDF } = window.jspdf; // ===================================================== // BILINGUAL QUESTIONS DATABASE (25 TOPICS: 17 Maths + 8 Pedagogy) - CTET Paper 2 // ===================================================== const questionBank = {}; function addQuestions(topicKey, enQ, hiQ) { if (!questionBank[topicKey]) questionBank[topicKey] = { en: { level1: [], level2: [], level3: [] }, hi: { level1: [], level2: [], level3: [] } }; const levels = ['level1', 'level2', 'level3']; enQ.forEach((q, idx) => { const levelKey = levels[idx] || 'level1'; questionBank[topicKey].en[levelKey].push(q); }); hiQ.forEach((q, idx) => { const levelKey = levels[idx] || 'level1'; questionBank[topicKey].hi[levelKey].push(q); }); } // ----- MATHEMATICS TOPICS (17) ----- // 1. Number System addQuestions('8   M / > * & M ' $ ? ', [ { question: "Which is a prime number?", options: ["17", "21", "27", "39"], answer: "A" }, { question: "LCM of 12 and 18 is:", options: ["36", "72", "108", "144"], answer: "A" }, { question: "5! = ?", options: ["120", "60", "24", "720"], answer: "A" } ], [ { question: " - >  M / 8   M / >  L ( 8 @ 9 H ?", options: ["17", "21", "27", "39"], answer: "A" }, { question: "12  0 18  > LCM 9 H :", options: ["36", "72", "108", "144"], answer: "A" }, { question: "5! = ?", options: ["120", "60", "24", "720"], answer: "A" } ] ); // 2. LCM & HCF addQuestions('2  A $ M $ . 8 . > * 5 0 M $ M /  5  . 9 $ M $ M 5 8 . > * 5 0 M $  ', [ { question: "HCF of 24 and 36 is:", options: ["12", "6", "18", "24"], answer: "A" }, { question: "LCM of 4,5,10 is:", options: ["20", "40", "10", "5"], answer: "A" }, { question: "HCF of 48 and 72 is:", options: ["24", "16", "12", "8"], answer: "A" } ], [ { question: "24  0 36  > HCF 9 H :", options: ["12", "6", "18", "24"], answer: "A" }, { question: "4,5,10  > LCM 9 H :", options: ["20", "40", "10", "5"], answer: "A" }, { question: "48  0 72  > HCF 9 H :", options: ["24", "16", "12", "8"], answer: "A" } ] ); // 3. Square, Square Root, Cube, Cube Root addQuestions('5 0 M  -5 0 M  . B 2  5   ( - ( . B 2 ', [ { question: "12² = ?", options: ["144", "122", "124", "136"], answer: "A" }, { question: ""81 = ?", options: ["9", "8", "7", "10"], answer: "A" }, { question: "5³ = ?", options: ["125", "25", "75", "100"], answer: "A" } ], [ { question: "12² = ?", options: ["144", "122", "124", "136"], answer: "A" }, { question: ""81 = ?", options: ["9", "8", "7", "10"], answer: "A" }, { question: "5³ = ?", options: ["125", "25", "75", "100"], answer: "A" } ] ); // 4. Algebra addQuestions(', @   # ? $ ', [ { question: "If x + 5 = 10, then x = ?", options: ["5", "10", "15", "20"], answer: "A" }, { question: "If 2x = 14, then x = ?", options: ["7", "14", "28", "12"], answer: "A" }, { question: "x² - 9 = ?", options: ["(x-3)(x+3)", "(x-9)(x+1)", "(x+9)(x-1)", "(x-3)(x-3)"], answer: "A" } ], [ { question: "/ & ? x + 5 = 10, $ K x = ?", options: ["5", "10", "15", "20"], answer: "A" }, { question: "/ & ? 2x = 14, $ K x = ?", options: ["7", "14", "28", "12"], answer: "A" }, { question: "x² - 9 = ?", options: ["(x-3)(x+3)", "(x-9)(x+1)", "(x+9)(x-1)", "(x-3)(x-3)"], answer: "A" } ] ); // 5. Arithmetic Problems addQuestions('    # ? $ * 0  ' > 0 ? $ 8 . 8 M / >   ', [ { question: "If a man earns ¹ 500 per day, in 6 days he earns:", options: ["¹ 3000", "¹ 2500", "¹ 3500", "¹ 4000"], answer: "A" }, { question: "A train travels 240 km in 4 hours. Speed is:", options: ["60 km/h", "50 km/h", "70 km/h", "80 km/h"], answer: "A" }, { question: "Ratio of 15 and 25 is:", options: ["3:5", "5:3", "15:25", "25:15"], answer: "A" } ], [ { question: "/ & ?    & . @ * M 0 $ ? & ? ( ¹ 500  . > $ > 9 H , 6 & ? ( K  . G   . >   > :", options: ["¹ 3000", "¹ 2500", "¹ 3500", "¹ 4000"], answer: "A" }, { question: "   M 0 G ( 240  ? . @ 4    G . G  $ /  0 $ @ 9 H d  $ ? :", options: ["60  ? . @ /   > ", "50  ? . @ /   > ", "70  ? . @ /   > ", "80  ? . @ /   > "], answer: "A" }, { question: "15  0 25  >  ( A * > $ :", options: ["3:5", "5:3", "15:25", "25:15"], answer: "A" } ] ); // 6. Geometry addQuestions(' M / > . ? $ ? ', [ { question: "Sum of angles in a triangle:", options: ["180°", "90°", "360°", "270°"], answer: "A" }, { question: "Sides in a hexagon:", options: ["6", "5", "7", "8"], answer: "A" }, { question: "Area of rectangle 5x4:", options: ["20", "9", "18", "15"], answer: "A" } ], [ { question: "$ M 0 ? - A   G  K # K   > / K  :", options: ["180°", "90°", "360°", "270°"], answer: "A" }, { question: "7  M - A   @ - A  >   :", options: ["6", "5", "7", "8"], answer: "A" }, { question: "5x4  / $  >  M 7 G $ M 0 + 2 :", options: ["20", "9", "18", "15"], answer: "A" } ] ); // 7. Mensuration addQuestions(' M 7 G $ M 0 . ? $ ? ', [ { question: "Perimeter of square side 5 cm:", options: ["20 cm", "25 cm", "15 cm", "30 cm"], answer: "A" }, { question: "Area of circle radius 7 cm (À=22/7):", options: ["154 sq cm", "44 sq cm", "88 sq cm", "77 sq cm"], answer: "A" }, { question: "Volume of cube side 3 cm:", options: ["27 cu cm", "9 cu cm", "18 cu cm", "36 cu cm"], answer: "A" } ], [ { question: "5 8 G . @ - A  > 5 > 2 G 5 0 M   > * 0 ? . > * :", options: ["20 8 G . @ ", "25 8 G . @ ", "15 8 G . @ ", "30 8 G . @ "], answer: "A" }, { question: "7 8 G . @ $ M 0 ?  M / > 5 > 2 G 5 C $ M $  >  M 7 G $ M 0 + 2 (À=22/7):", options: ["154 5 0 M  8 G . @ ", "44 5 0 M  8 G . @ ", "88 5 0 M  8 G . @ ", "77 5 0 M  8 G . @ "], answer: "A" }, { question: "3 8 G . @ - A  > 5 > 2 G  (  >  / $ ( :", options: ["27  ( 8 G . @ ", "9  ( 8 G . @ ", "18  ( 8 G . @ ", "36  ( 8 G . @ "], answer: "A" } ] ); // 8. Statistics & Data Handling addQuestions('   ! K   > * M 0 , ( M ' ( ', [ { question: "Mean of 2,4,6,8,10:", options: ["6", "5", "7", "8"], answer: "A" }, { question: "Median of 3,5,7,9,11:", options: ["7", "5", "9", "8"], answer: "A" }, { question: "Mode of 2,3,3,4,5,5,5:", options: ["5", "3", "4", "2"], answer: "A" } ], [ { question: "2,4,6,8,10  > . > ' M / :", options: ["6", "5", "7", "8"], answer: "A" }, { question: "3,5,7,9,11  @ . > ' M / ?  > :", options: ["7", "5", "9", "8"], answer: "A" }, { question: "2,3,3,4,5,5,5  > , 9 A 2  :", options: ["5", "3", "4", "2"], answer: "A" } ] ); // 9. Mathematical Operations addQuestions(' # ? $ @ / . B 2 8   M 0 ? / >   ', [ { question: "123 + 456 = ?", options: ["579", "569", "589", "599"], answer: "A" }, { question: "1000 - 254 = ?", options: ["746", "756", "736", "766"], answer: "A" }, { question: "25 × 4 = ?", options: ["80", "100", "120", "90"], answer: "B" } ], [ { question: "123 + 456 = ?", options: ["579", "569", "589", "599"], answer: "A" }, { question: "1000 - 254 = ?", options: ["746", "756", "736", "766"], answer: "A" }, { question: "25 × 4 = ?", options: ["80", "100", "120", "90"], answer: "B" } ] ); // 10. Fractions and Decimals addQuestions('. ? ( M (  5  & 6 . 2 5 8   M / >   ', [ { question: "1/2 + 1/4 = ?", options: ["3/4", "2/6", "1/6", "2/4"], answer: "A" }, { question: "2.5 + 3.7 = ?", options: ["6.2", "5.2", "6.5", "5.5"], answer: "A" }, { question: "3/5 × 2/3 = ?", options: ["2/5", "5/8", "6/15", "1/2"], answer: "A" } ], [ { question: "1/2 + 1/4 = ?", options: ["3/4", "2/6", "1/6", "2/4"], answer: "A" }, { question: "2.5 + 3.7 = ?", options: ["6.2", "5.2", "6.5", "5.5"], answer: "A" }, { question: "3/5 × 2/3 = ?", options: ["2/5", "5/8", "6/15", "1/2"], answer: "A" } ] ); // 11. Average addQuestions(' 8 $ ', [ { question: "Average of 10,20,30:", options: ["20", "15", "25", "30"], answer: "A" }, { question: "Average of first 5 natural numbers:", options: ["3", "2", "4", "5"], answer: "A" }, { question: "Sum of 6 numbers average 10:", options: ["60", "50", "70", "80"], answer: "A" } ], [ { question: "10,20,30  >  8 $ :", options: ["20", "15", "25", "30"], answer: "A" }, { question: "* 9 2 @ 5 * M 0 >  C $ ?  8   M / >    >  8 $ :", options: ["3", "2", "4", "5"], answer: "A" }, { question: "6 8   M / >    >  8 $ 10, / K  :", options: ["60", "50", "70", "80"], answer: "A" } ] ); // 12. Time and Distance addQuestions('8 . /  0 & B 0 @ ', [ { question: "Speed 60 km/h, Time 2h, Distance:", options: ["120 km", "30 km", "60 km", "180 km"], answer: "A" }, { question: "Distance 180 km, Speed 60 km/h, Time:", options: ["3 h", "2 h", "4 h", "5 h"], answer: "A" }, { question: "Speed 40 km/h, Time 5h, Distance:", options: ["200 km", "160 km", "180 km", "220 km"], answer: "A" } ], [ { question: " $ ? 60  ? . @ /   > , 8 . / 2    G , & B 0 @ :", options: ["120  ? . @ ", "30  ? . @ ", "60  ? . @ ", "180  ? . @ "], answer: "A" }, { question: "& B 0 @ 180  ? . @ ,  $ ? 60  ? . @ /   > , 8 . / :", options: ["3    G ", "2    G ", "4    G ", "5    G "], answer: "A" }, { question: " $ ? 40  ? . @ /   > , 8 . / 5    G , & B 0 @ :", options: ["200  ? . @ ", "160  ? . @ ", "180  ? . @ ", "220  ? . @ "], answer: "A" } ] ); // 13. Units and Measurement addQuestions('6 ?  M 7 > / K   5  . > * ( ', [ { question: "1 km = ? m", options: ["1000", "100", "500", "2000"], answer: "A" }, { question: "1 L = ? mL", options: ["1000", "100", "500", "2000"], answer: "A" }, { question: "1 kg = ? g", options: ["1000", "100", "500", "2000"], answer: "A" } ], [ { question: "1  ? . @ = ? . @  0 ", options: ["1000", "100", "500", "2000"], answer: "A" }, { question: "1 2 @  0 = ? . ? 2 @ 2 @  0 ", options: ["1000", "100", "500", "2000"], answer: "A" }, { question: "1  ?  M 0 > = ?  M 0 > . ", options: ["1000", "100", "500", "2000"], answer: "A" } ] ); // 14. Money addQuestions('. A & M 0 > ', [ { question: "5 rupees 50 paise in rupees:", options: ["5.50", "5.05", "5.55", "5.00"], answer: "A" }, { question: "2.75 rupees in paise:", options: ["275", "270", "280", "260"], answer: "A" }, { question: "8.40 + 3.60 = ?", options: ["12.00", "12.50", "11.00", "13.00"], answer: "A" } ], [ { question: "5 0 A * / G 50 * H 8 G  K 0 A * / G . G  :", options: ["5.50", "5.05", "5.55", "5.00"], answer: "A" }, { question: "2.75 0 A * / G  K * H 8 G . G  :", options: ["275", "270", "280", "260"], answer: "A" }, { question: "8.40 + 3.60 = ?", options: ["12.00", "12.50", "11.00", "13.00"], answer: "A" } ] ); // 15. Calendar addQuestions(' G 2 G * ! 0 ', [ { question: "Days in leap year:", options: ["366", "365", "364", "367"], answer: "A" }, { question: "10 Mar 2024 Sunday, 17 Mar 2024:", options: ["Sunday", "Monday", "Saturday", "Friday"], answer: "A" }, { question: "Days in Feb 2024:", options: ["29", "28", "30", "31"], answer: "A" } ], [ { question: "2 @ * 5 0 M 7 . G  & ? ( :", options: ["366", "365", "364", "367"], answer: "A" }, { question: "10 Mar 2024 0 5 ? 5 > 0 , 17 Mar 2024:", options: ["0 5 ? 5 > 0 ", "8 K . 5 > 0 ", "6 ( ? 5 > 0 ", "6 A  M 0 5 > 0 "], answer: "A" }, { question: "+ 0 5 0 @ 2024 . G  & ? ( :", options: ["29", "28", "30", "31"], answer: "A" } ] ); // 16. Clock and Time Table addQuestions(' ! @  0 8 . / 8 > 0 # @ ', [ { question: "Angle at 6:00 between hour and minute:", options: ["180°", "90°", "120°", "150°"], answer: "A" }, { question: "10:15 to 13:45 duration:", options: ["3h 30m", "3h", "4h", "2h 30m"], answer: "A" }, { question: "45 min = ? seconds", options: ["2700", "1800", "3600", "3000"], answer: "A" } ], [ { question: "6:00 * 0    G  0 . ? (   @ 8 A   G , @   K # :", options: ["180°", "90°", "120°", "150°"], answer: "A" }, { question: "10:15 8 G 13:45 $   5 ' ? :", options: ["3h 30m", "3h", "4h", "2h 30m"], answer: "A" }, { question: "45 . ? (  = ? 8 G   ! ", options: ["2700", "1800", "3600", "3000"], answer: "A" } ] ); // 17. Pattern addQuestions('* G   ( ', [ { question: "Next in series: 2,4,6,8,?", options: ["10", "12", "14", "16"], answer: "A" }, { question: "Next: 5,10,15,20,?", options: ["25", "30", "35", "40"], answer: "A" }, { question: "Next: 3,9,27,?", options: ["81", "54", "72", "90"], answer: "A" } ], [ { question: "6 M 0 C   2 > . G    2 > : 2,4,6,8,?", options: ["10", "12", "14", "16"], answer: "A" }, { question: "  2 > : 5,10,15,20,?", options: ["25", "30", "35", "40"], answer: "A" }, { question: "  2 > : 3,9,27,?", options: ["81", "54", "72", "90"], answer: "A" } ] ); // ----- PEDAGOGY TOPICS (8) - Updated as per user request ----- addQuestions(' # ? $  @ * M 0  C $ ? ', [ { question: "Mathematics is science of:", options: ["Pattern and order", "Nature", "Language", "Art"], answer: "A" }, { question: "Logical thinking involves:", options: ["Reasoning", "Memorization", "Creativity", "Imagination"], answer: "A" }, { question: "Not a characteristic of mathematical thinking:", options: ["Rote memorization", "Abstraction", "Logical reasoning", "Problem solving"], answer: "A" } ], [ { question: " # ? $  ? 8  > 5 ?  M  > ( 9 H ?", options: ["* H  0 M (  0 5 M / 5 8 M % > ", "* M 0  C $ ? ", "- > 7 > ", " 2 > "], answer: "A" }, { question: "$ > 0 M  ?  8 K  . G  6 > . ? 2 9 H :", options: ["$ 0 M  ", "0  ( > ", "0  ( > $ M .  $ > ", " 2 M * ( > "], answer: "A" }, { question: " # ? $ @ / 8 K   @ 5 ? 6 G 7 $ > ( 9 @  :", options: ["0  ( > ", " . B 0 M $ $ > ", "$ > 0 M  ?  $ 0 M  ", "8 . 8 M / > 8 . > ' > ( "], answer: "A" } ] ); addQuestions(' # ? $  > * > M /  M 0 . . G  8 M % > ( ', [ { question: "Math in curriculum develops:", options: ["Logical reasoning", "Physical fitness", "Artistic skills", "Social skills"], answer: "A" }, { question: "Goal of teaching math:", options: ["Problem solving", "Entertainment", "Physical development", "Memorization"], answer: "A" }, { question: "Math helps in:", options: ["Daily life", "Only exams", "Only science", "Only commerce"], answer: "A" } ], [ { question: "* > M /  M 0 . . G   # ? $ 5 ?  8 ? $  0 $ > 9 H :", options: ["$ > 0 M  ?  $ 0 M  ", "6 > 0 @ 0 ?  + ?  ( G 8 ", " 2 > $ M .   L 6 2 ", "8 > . >  ?   L 6 2 "], answer: "A" }, { question: " # ? $ 6 ?  M 7 #  > 2  M 7 M / :", options: ["8 . 8 M / > 8 . > ' > ( ", ". ( K 0   ( ", "6 > 0 @ 0 ?  5 ?  > 8 ", "0  ( > "], answer: "A" }, { question: " # ? $ 8 9 > /  9 H :", options: ["& H ( ?   @ 5 ( . G  ", " G 5 2 * 0 @  M 7 > . G  ", " G 5 2 5 ?  M  > ( . G  ", " G 5 2 5 > # ?  M / . G  "], answer: "A" } ] ); addQuestions(' # ? $  @ - > 7 > ', [ { question: "Language of mathematics:", options: ["Symbolic and precise", "Vague", "Artistic", "Poetic"], answer: "A" }, { question: "Mathematical symbol:", options: ["+", "&", "@", "#"], answer: "A" }, { question: "Math language helps in:", options: ["Clear communication", "Confusion", "Art", "Music"], answer: "A" } ], [ { question: " # ? $  @ - > 7 > 9 H :", options: ["* M 0 $ @  > $ M .   0 8  @  ", " 8 M * 7 M  ", " 2 > $ M .  ", " > 5 M / > $ M .  "], answer: "A" }, { question: " # ? $ @ / * M 0 $ @  :", options: ["+", "&", "@", "#"], answer: "A" }, { question: " # ? $ @ / - > 7 > 8 9 > /  9 H :", options: ["8 M * 7 M  8   > 0 . G  ", "- M 0 . . G  ", " 2 > . G  ", "8   @ $ . G  "], answer: "A" } ] ); addQuestions('8 > . A & > / ?   # ? $ ', [ { question: "Community math relates to:", options: ["Real life situations", "Abstract theory", "Pure numbers", "Geometry"], answer: "A" }, { question: "Example of community math:", options: ["Budgeting", "Algebra", "Calculus", "Trigonometry"], answer: "A" }, { question: "Community math helps in:", options: ["Practical problem solving", "Theoretical research", "Memorization", "Rote learning"], answer: "A" } ], [ { question: "8 > . A & > / ?   # ? $ 8  ,  ' ? $ 9 H :", options: ["5 > 8 M $ 5 ?   @ 5 ( 8 M % ? $ ? / K  8 G ", " . B 0 M $ 8 ? & M ' >  $ 8 G ", "6 A & M ' 8   M / >   8 G ", " M / > . ? $ ? 8 G "], answer: "A" }, { question: "8 > . A & > / ?   # ? $  > & > 9 0 # :", options: [",   , ( > ( > ", ", @   # ? $ ", " H 2  A 2 8 ", "$ M 0 ?  K # . ? $ ? "], answer: "A" }, { question: "8 > . A & > / ?   # ? $ 8 9 > /  9 H :", options: ["5 M / > 5 9 > 0 ?  8 . 8 M / > 8 . > ' > ( . G  ", "8 H & M ' >  $ ?  6 K ' . G  ", "0  ( G . G  ", "  8 M % @  0 # . G  "], answer: "A" } ] ); addQuestions(' # ? $ . G  . B 2 M / >   ( ', [ { question: "Evaluation in math is:", options: ["Continuous process", "One time event", "Only written test", "Only oral test"], answer: "A" }, { question: "Formative assessment is:", options: ["During instruction", "At end", "At beginning", "After exams"], answer: "A" }, { question: "Summative assessment aims to:", options: ["Assign grades", "Improve learning", "Diagnose difficulties", "Plan instruction"], answer: "A" } ], [ { question: " # ? $ . G  . B 2 M / >   ( 9 H :", options: ["8 $ $ * M 0  M 0 ? / > ", "  , > 0  @   ( > ", " G 5 2 2 ?  ? $ * 0 @  M 7 > ", " G 5 2 . L  ?  * 0 @  M 7 > "], answer: "A" }, { question: "0  ( > $ M .  . B 2 M / >   ( 9 H :", options: ["6 ?  M 7 #  G & L 0 > ( ", "  $ . G  ", "6 A 0 A  $ . G  ", "* 0 @  M 7 >  G , > & "], answer: "A" }, { question: "/ K  > $ M .  . B 2 M / >   (  > & M & G 6 M / :", options: [" M 0 G ! & G ( > ", "8 @  ( G . G  8 A ' > 0 ", " ? ( >  / K   > ( ? & > ( ", "6 ?  M 7 #  @ / K  ( > "], answer: "A" } ] ); addQuestions('6 ?  M 7 #  @ 8 . 8 M / >   ', [ { question: "Major problem in math teaching:", options: ["Lack of conceptual understanding", "Too many books", "Less time", "More teachers"], answer: "A" }, { question: "Challenge in teaching math:", options: ["Student anxiety", "High interest", "Good resources", "Motivated students"], answer: "A" }, { question: "Classroom management issue:", options: ["Diverse learning levels", "Same level", "Perfect behavior", "Full attendance"], answer: "A" } ], [ { question: " # ? $ 6 ?  M 7 # . G  * M 0 . A  8 . 8 M / > :", options: [" 5 ' > 0 # > $ M .  8 .   @  . @ ", ", 9 A $  ' ?  * A 8 M $  G  ", " . 8 . / ", " ' ?  6 ?  M 7  "], answer: "A" }, { question: " # ? $ 6 ?  M 7 # . G   A ( L $ @ :", options: [" > $ M 0 K   @  ?  $ > ", "  M  0 A  ? ", "  M  G 8  8 > ' ( ", "* M 0 G 0 ? $  > $ M 0 "], answer: "A" }, { question: "  M 7 > * M 0 ,  ' (  @ 8 . 8 M / > :", options: ["5 ? 5 ? '  ' ?  . 8 M $ 0 ", "8 . > ( 8 M $ 0 ", "* 0 ? * B 0 M # 5 M / 5 9 > 0 ", "* B 0 M # * 8 M % ? $ ? "], answer: "A" } ] ); addQuestions(' # ? $ 6 ?  M 7 # . G  $ M 0 A  ? 5 ? 6 M 2 G 7 # ', [ { question: "Error analysis helps in:", options: ["Identifying misconceptions", "Punishing", "Ignoring mistakes", "Testing memory"], answer: "A" }, { question: "Common error in math:", options: ["Misplacing decimal", "Correct placement", "Right method", "Perfect answer"], answer: "A" }, { question: "Error analysis useful for:", options: ["Remedial planning", "Ignoring", "Rote learning", "Standardized tests"], answer: "A" } ], [ { question: "$ M 0 A  ? 5 ? 6 M 2 G 7 # 8 9 > /  9 H :", options: [" 2 $ ' > 0 # >    @ * 9  > ( . G  ", "&  ! & G ( G . G  ", " 2 $ ? / K   K  ( & G  >  0 ( G . G  ", "8 M . 0 # 6  M $ ? * 0 @  M 7 # . G  "], answer: "A" }, { question: " # ? $ . G  8 > . > ( M / $ M 0 A  ? :", options: ["& 6 . 2 5  2 $ 0  ( > ", "8 9 @ 0  ( > ", "8 9 @ 5 ? ' ? ", "* 0 ? * B 0 M # $ M $ 0 "], answer: "A" }, { question: "$ M 0 A  ? 5 ? 6 M 2 G 7 # * / K  @ 9 H :", options: [" *  > 0 > $ M .  / K  ( >  G 2 ?  ", " ( & G  @  G 2 ?  ", "0  ( G  G 2 ?  ", ". > (  @  C $ * 0 @  M 7 #  G 2 ?  "], answer: "A" } ] ); addQuestions('( ? & > ( > $ M .   5  *  > 0 > $ M .  6 ?  M 7 # ', [ { question: "Diagnostic teaching identifies:", options: ["Learning difficulties", "Talents", "Physical abilities", "Interests"], answer: "A" }, { question: "Remedial teaching aims to:", options: ["Correct errors", "Punish", "Ignore", "Skip topics"], answer: "A" }, { question: "Diagnostic test is:", options: ["Specific", "General", "Comprehensive", "Standardized"], answer: "A" } ], [ { question: "( ? & G 6 > $ M .  6 ?  M 7 # * 9  > ( $ > 9 H :", options: [" ' ?  .  @  ? ( >  / >  ", "* M 0 $ ? - >   ", "6 > 0 @ 0 ?   M 7 . $ >   ", "0 A  ? / >  "], answer: "A" }, { question: " *  > 0 > $ M .  6 ?  M 7 #  > & M & G 6 M / :", options: ["$ M 0 A  ? / K   K 8 A ' > 0 ( > ", "&  ! & G ( > ", " ( & G  >  0 ( > ", "5 ? 7 /  K ! < ( > "], answer: "A" }, { question: "( ? & G 6 > $ M .  * 0 @  M 7 # 9 H :", options: ["5 ? 6 ? 7 M  ", "8 > . > ( M / ", "5 M / > *  ", ". > (  @  C $ "], answer: "A" } ] ); // ===================================================== // TOPIC KEYS & BILINGUAL NAMES - Updated for CTET Paper 2 // ===================================================== const topicKeys = [ // Mathematics (17) "8   M / > * & M ' $ ? ", "2  A $ M $ . 8 . > * 5 0 M $ M /  5  . 9 $ M $ M 5 8 . > * 5 0 M $  ", "5 0 M  -5 0 M  . B 2  5   ( - ( . B 2 ", ", @   # ? $ ", "    # ? $ * 0  ' > 0 ? $ 8 . 8 M / >   ", " M / > . ? $ ? ", " M 7 G $ M 0 . ? $ ? ", "   ! K   > * M 0 , ( M ' ( ", " # ? $ @ / . B 2 8   M 0 ? / >   ", ". ? ( M (  5  & 6 . 2 5 8   M / >   ", " 8 $ ", "8 . /  0 & B 0 @ ", "6 ?  M 7 > / K   5  . > * ( ", ". A & M 0 > ", " G 2 G * ! 0 ", " ! @  0 8 . / 8 > 0 # @ ", "* G   ( ", // Pedagogy (8) " # ? $  @ * M 0  C $ ? ", " # ? $  > * > M /  M 0 . . G  8 M % > ( ", " # ? $  @ - > 7 > ", "8 > . A & > / ?   # ? $ ", " # ? $ . G  . B 2 M / >   ( ", "6 ?  M 7 #  @ 8 . 8 M / >   ", " # ? $ 6 ?  M 7 # . G  $ M 0 A  ? 5 ? 6 M 2 G 7 # ", "( ? & > ( > $ M .   5  *  > 0 > $ M .  6 ?  M 7 # " ]; const topicNames = { hi: [ "8   M / > * & M ' $ ? ", "2  A $ M $ . 8 . > * 5 0 M $ M /  5  . 9 $ M $ M 5 8 . > * 5 0 M $  ", "5 0 M  -5 0 M  . B 2  5   ( - ( . B 2 ", ", @   # ? $ ", "    # ? $ * 0  ' > 0 ? $ 8 . 8 M / >   ", " M / > . ? $ ? ", " M 7 G $ M 0 . ? $ ? ", "   ! K   > * M 0 , ( M ' ( ", " # ? $ @ / . B 2 8   M 0 ? / >   ", ". ? ( M (  5  & 6 . 2 5 8   M / >   ", " 8 $ ", "8 . /  0 & B 0 @ ", "6 ?  M 7 > / K   5  . > * ( ", ". A & M 0 > ", " G 2 G * ! 0 ", " ! @  0 8 . / 8 > 0 # @ ", "* G   ( ", " # ? $  @ * M 0  C $ ? ", " # ? $  > * > M /  M 0 . . G  8 M % > ( ", " # ? $  @ - > 7 > ", "8 > . A & > / ?   # ? $ ", " # ? $ . G  . B 2 M / >   ( ", "6 ?  M 7 #  @ 8 . 8 M / >   ", " # ? $ 6 ?  M 7 # . G  $ M 0 A  ? 5 ? 6 M 2 G 7 # ", "( ? & > ( > $ M .   5  *  > 0 > $ M .  6 ?  M 7 # " ], en: [ "Number System", "L.C.M. and H.C.F.", "Square-Square Root and Cube-Cube Root", "Algebra", "Arithmetic Problems", "Geometry", "Mensuration", "Statistics & Data Handling", "Mathematical Operations", "Fractions and Decimal Numbers", "Average", "Time and Distance", "Units and Measurement", "Money", "Calendar", "Clock and Time Table", "Pattern", "Nature of Mathematics", "Place of Mathematics in Curriculum", "Language of Mathematics", "Community Mathematics", "Evaluation in Mathematics", "Problems of Teaching", "Error Analysis in Mathematics Teaching", "Diagnostic and Remedial Teaching" ] }; function getTopicDisplay(key, lang) { const idx = topicKeys.indexOf(key); if (idx === -1) return key; return topicNames[lang][idx] || key; } // ===================================================== // UI TRANSLATIONS // ===================================================== const uiText = { hi: { mainTitle: "•' CTET Paper 2 -  # ? $  5  6 ?  M 7 > 6 > 8 M $ M 0 (Mathematics & Pedagogy)  - M / > 8 8 G   ( 0 G  0 ", mainSubtitle: "CTET Paper 2 (  M  * M 0 > % . ?  8 M $ 0 ) 9 G $ A  # ? $ ,  # ? $ @ /  5 ' > 0 # >    5  6 ?  M 7 # 5 ? ' ? / K   > 5 ? 7 / 5 > 0  - M / > 8 ", startTitle: "•'  # ? $  5  6 ?  M 7 > 6 > 8 M $ M 0 -  - M / > 8 8 G   ( 0 G  0 ", startDesc: "CTET Paper 2 9 G $ A  # ? $ ,  # ? $ @ /  5 ' > 0 # >   , 8 . 8 M / > 8 . > ' > (  5  6 ?  M 7 # 5 ? ' ? / K   > 5 ? 8 M $ C $  - M / > 8 8 G  $ H / > 0  0 G  ", startBtn: " - M / > 8 8 G  , ( > ( > 6 A 0 B  0 G  ", practiceTypeTitle: " - M / > 8  > * M 0  > 0  A ( G  ", practiceTypeDesc: " * ( @ $ H / > 0 @  G  ( A 8 > 0  - M / > 8 8 G   A ( G  :", optChapterTitle: "5 ? 7 / > ( A 8 > 0  - M / > 8 ", optChapterDesc: " ? 8 @ 5 ? 6 G 7 5 ? 7 /  >  9 (  - M / > 8  0 G  ", optFullTitle: "* B 0 M # 2  , >   G 8 M  ", optFullDesc: "CTET * H  0 M ( * 0  ' > 0 ? $ 50 * M 0 6 M ( K   > 8 G  ", optPrevTitle: "* ?  2 G 5 0 M 7 K   G * M 0 6 M ( ", optPrevDesc: "* ?  2 @ TET * 0 @  M 7 >   * 0  ' > 0 ? $ * M 0 6 M ( ", backStartBtn: "* @  G  >   ", proceedBtn: "5 ? 7 /  A ( G  ’!", chapterTitle: "=ØÚÜ  # ? $  5  6 ?  M 7 > 6 > 8 M $ M 0 - 5 ? 7 /  A ( G  ", qCountTitle: "* M 0 6 M ( K   @ 8   M / >  A ( G  ", backPracticeBtn: "* @  G ", generateAssignBtn: " ? ( >  8 M $ 0  A ( G  ’!", levelTitle: " ? ( >  8 M $ 0  A ( G  ", levelDesc: "CTET Paper 2 * 0 @  M 7 >  G  ( A 8 > 0 8 M $ 0  A ( G  :", l1Title: "Level 1", l1Sub: ", A ( ? / > & @ (* M 0 > 0  - ?  )", l2Title: "Level 2", l2Sub: ". ' M / . (CTET 8 M $ 0 )", l3Title: "Level 3", l3Sub: "  M  (6 ?  M 7  * > $ M 0 $ > )", timerTitle: "8 . / 8 @ . >  A ( G  ", t30: "30 . ? (  ", t45: "45 . ? (  ", t60: "60 . ? (  ", t90: "90 . ? (  ", backChaptersBtn: "5 ? 7 / K  * 0 5 > * 8 ", generateFinalBtn: " - M / > 8 8 G   ( 0 G   0 G  ", langLabel: "9 ?  & @ ", fullPaper: "8 - @ 5 ? 7 / (* B 0 M # * > M /  M 0 . - 25  ' M / > / )", noTopicAlert: " C * / >  . 8 G  .   5 ? 7 /  A ( G  !", noLevelAlert: " C * / >  ? ( >  8 M $ 0  A ( G  !", noPracticeAlert: " C * / >  - M / > 8  > * M 0  > 0  A ( G  !", instructions: "=ØÌÜ ( ? 0 M & G 6 :", inst1: " 8 8 G  . G  {count} , 9 A 5 ?  2 M * @ / * M 0 6 M ( 9 H  d ", inst2: "* M 0 $ M / G  * M 0 6 M (  G  > 0 5 ?  2 M * ,  G 5 2   8 9 @ d ", inst3: "8 . / 8 @ . > : {time} . ? (  ", inst4: "CTET Paper 2 (  M  * M 0 > % . ?  8 M $ 0 )  # ? $  5  6 ?  M 7 > 6 > 8 M $ M 0 9 G $ A  - M / > 8 d ", inst5: "* M 0 $ M / G  * M 0 6 M ( 1     > 9 H ,  K  ( ?  G  ? 5 . > 0 M  ?   ( 9 @  d ", mcqHeading: "•'  # ? $  5  6 ?  M 7 > 6 > 8 M $ M 0 (Mathematics & Pedagogy) * M 0 6 M ( ", answerKey: "' $ M $ 0  A   @ (Answer Key)", qNo: "* M 0 6 M (  M 0 .", ans: " $ M $ 0 ", print: "* M 0 ?    0 G  ", download: "PDF ! > ( 2 K !  0 G  ", newSet: "( / >  - M / > 8 8 G  ", subjectLabel: " # ? $  5  6 ?  M 7 > 6 > 8 M $ M 0 ", noQuestions: "* M 0 6 M ( * 2 , M ' ( 9 @  9 H  d  C * / >  ( M / 5 ? 7 /  A ( G  d " }, en: { mainTitle: "•' CTET Paper 2 - Mathematics and Pedagogy (Maths & Pedagogy) Practice Set Generator", mainSubtitle: "Topic-wise practice for Mathematics, Mathematical Concepts, Problem Solving & Teaching Methods for CTET Paper 2 (Upper Primary Level)", startTitle: "•' Mathematics and Pedagogy - Practice Set Generator", startDesc: "Create comprehensive practice sets for CTET Paper 2 covering Mathematics, Arithmetic, Geometry, Data Handling and Pedagogy", startBtn: "Start Creating Practice Set", practiceTypeTitle: "Select Practice Type", practiceTypeDesc: "Choose practice set according to your preparation:", optChapterTitle: "Chapter-wise Practice", optChapterDesc: "Deep practice of a specific topic", optFullTitle: "Full Length Test", optFullDesc: "50 question set based on CTET pattern", optPrevTitle: "Previous Year Questions", optPrevDesc: "Questions based on previous TET exams", backStartBtn: "Back", proceedBtn: "Select Topics ’!", chapterTitle: "=ØÚÜ Mathematics and Pedagogy - Select Topics", qCountTitle: "Select Number of Questions", backPracticeBtn: "Back", generateAssignBtn: "Select Difficulty ’!", levelTitle: "Select Difficulty Level", levelDesc: "Choose level according to CTET Paper 2 exam:", l1Title: "Level 1", l1Sub: "Basic (Introductory)", l2Title: "Level 2", l2Sub: "Medium (CTET Level)", l3Title: "Level 3", l3Sub: "Advanced (Teacher Eligibility)", timerTitle: "Select Time Limit", t30: "30 min", t45: "45 min", t60: "60 min", t90: "90 min", backChaptersBtn: "Back to Topics", generateFinalBtn: "Generate Practice Set", langLabel: "English", fullPaper: "All Topics (Full Syllabus - 25 Chapters)", noTopicAlert: "Please select at least one topic!", noLevelAlert: "Please select a difficulty level!", noPracticeAlert: "Please select a practice type!", instructions: "=ØÌÜ Instructions:", inst1: "This set has {count} multiple choice questions.", inst2: "Each question has four options, only one is correct.", inst3: "Time limit: {time} minutes", inst4: "For CTET Paper 2 (Upper Primary Level) Mathematics and Pedagogy practice.", inst5: "Each question carries 1 mark, no negative marking.", mcqHeading: "•' Mathematics and Pedagogy (Maths & Pedagogy) Questions", answerKey: "' Answer Key", qNo: "Q. No.", ans: "Answer", print: "Print", download: "Download PDF", newSet: "New Practice Set", subjectLabel: "Mathematics and Pedagogy", noQuestions: "Questions not available. Please select other topics." } }; // ===================================================== // DOM REFS & STATE // ===================================================== const langToggleBtn = document.getElementById('langToggleBtn'); const langLabel = document.getElementById('langLabel'); let currentLang = 'hi'; const startContainer = document.getElementById('startContainer'); const startScreen = document.getElementById('startScreen'); const practiceTypeSelection = document.getElementById('practiceTypeSelection'); const chapterSelection = document.getElementById('chapterSelection'); const levelSelection = document.getElementById('levelSelection'); const generatedPaperContainer = document.getElementById('generatedPaperContainer'); const startGeneratingBtn = document.getElementById('startGeneratingBtn'); const backToStartBtn = document.getElementById('backToStartBtn'); const proceedToChaptersBtn = document.getElementById('proceedToChaptersBtn'); const backToPracticeTypeBtn = document.getElementById('backToPracticeTypeBtn'); const generateAssignmentBtn = document.getElementById('generateAssignmentBtn'); const backToChaptersBtn = document.getElementById('backToChaptersBtn'); const generateFinalBtn = document.getElementById('generateFinalBtn'); const level1Btn = document.getElementById('level1Btn'); const level2Btn = document.getElementById('level2Btn'); const level3Btn = document.getElementById('level3Btn'); const decreaseCount = document.getElementById('decreaseCount'); const increaseCount = document.getElementById('increaseCount'); const questionCountSpan = document.getElementById('questionCount'); const homeIconBtn = document.getElementById('homeIconBtn'); let selectedTopics = []; let selectedLevel = null; let selectedPracticeType = null; let questionCount = 50; let timeLimit = 60; // ===================================================== // UI LANGUAGE APPLICATION // ===================================================== function applyUILanguage(lang) { const t = uiText[lang]; document.getElementById('mainTitle').textContent = t.mainTitle; document.getElementById('mainSubtitle').textContent = t.mainSubtitle; document.getElementById('startTitle').textContent = t.startTitle; document.getElementById('startDesc').textContent = t.startDesc; document.getElementById('startBtnText').textContent = t.startBtn; document.getElementById('practiceTypeTitle').textContent = t.practiceTypeTitle; document.getElementById('practiceTypeDesc').textContent = t.practiceTypeDesc; document.getElementById('optChapterTitle').textContent = t.optChapterTitle; document.getElementById('optChapterDesc').textContent = t.optChapterDesc; document.getElementById('optFullTitle').textContent = t.optFullTitle; document.getElementById('optFullDesc').textContent = t.optFullDesc; document.getElementById('optPrevTitle').textContent = t.optPrevTitle; document.getElementById('optPrevDesc').textContent = t.optPrevDesc; document.getElementById('backStartBtnText').textContent = t.backStartBtn; document.getElementById('proceedBtnText').textContent = t.proceedBtn; document.getElementById('chapterTitle').textContent = t.chapterTitle; document.getElementById('qCountTitle').textContent = t.qCountTitle; document.getElementById('backPracticeBtnText').textContent = t.backPracticeBtn; document.getElementById('generateAssignBtnText').textContent = t.generateAssignBtn; document.getElementById('levelTitle').textContent = t.levelTitle; document.getElementById('levelDesc').textContent = t.levelDesc; document.getElementById('l1Title').textContent = t.l1Title; document.getElementById('l1Sub').textContent = t.l1Sub; document.getElementById('l2Title').textContent = t.l2Title; document.getElementById('l2Sub').textContent = t.l2Sub; document.getElementById('l3Title').textContent = t.l3Title; document.getElementById('l3Sub').textContent = t.l3Sub; document.getElementById('timerTitle').textContent = t.timerTitle; document.getElementById('t30').textContent = t.t30; document.getElementById('t45').textContent = t.t45; document.getElementById('t60').textContent = t.t60; document.getElementById('t90').textContent = t.t90; document.getElementById('backChaptersBtnText').textContent = t.backChaptersBtn; document.getElementById('generateFinalBtnText').textContent = t.generateFinalBtn; langLabel.textContent = t.langLabel; // Reload topics to update labels loadTopics(); // If paper is already generated, re-render if (!generatedPaperContainer.classList.contains('hidden')) { if (selectedTopics.length > 0 && selectedLevel) { generatePaper(selectedTopics, selectedLevel, currentLang); } } } // Language toggle langToggleBtn.addEventListener('click', function() { currentLang = (currentLang === 'hi') ? 'en' : 'hi'; applyUILanguage(currentLang); }); // ===================================================== // CORE LOGIC // ===================================================== function loadTopics() { const container = document.getElementById('mathTopicsContainer'); const t = uiText[currentLang]; const fullPaperLabel = (currentLang === 'hi') ? "' 8 - @ 5 ? 7 / (* B 0 M # * > M /  M 0 . - 25  ' M / > / )" : "' All Topics (Full Syllabus - 25 Chapters)"; container.innerHTML = `<div class="checkbox-item"><input type="checkbox" id="fullPaper" name="topic" value="8 - @ 5 ? 7 / "><label for="fullPaper">${fullPaperLabel}</label></div>`; topicKeys.forEach((key, idx) => { const id = `topic${idx}`; const displayName = getTopicDisplay(key, currentLang); container.innerHTML += `<div class="checkbox-item"><input type="checkbox" id="${id}" name="topic" value="${key}"><label for="${id}">•' ${displayName}</label></div>`; }); document.getElementById('fullPaper')?.addEventListener('change', (e) => { const checkboxes = document.querySelectorAll('input[name="topic"]:not(#fullPaper)'); checkboxes.forEach(cb => cb.disabled = e.target.checked); if(e.target.checked) checkboxes.forEach(cb => cb.checked = false); }); } function getSelectedTopics() { const full = document.getElementById('fullPaper'); if(full && full.checked) return [...topicKeys]; return Array.from(document.querySelectorAll('input[name="topic"]:checked')).filter(cb => cb.id !== 'fullPaper').map(cb => cb.value); } function getRandomQuestions(topics, level, count, lang) { let allQuestions = []; topics.forEach(topic => { if(questionBank[topic] && questionBank[topic][lang] && questionBank[topic][lang][`level${level}`]) { allQuestions = allQuestions.concat(questionBank[topic][lang][`level${level}`]); } }); if(allQuestions.length === 0) { const t = uiText[lang]; return Array(count).fill({ question: t.noQuestions, options: ["A", "B", "C", "D"], answer: "A" }); } allQuestions = allQuestions.sort(() => Math.random() - 0.5); return allQuestions.slice(0, Math.min(count, allQuestions.length)); } function showPracticeTypeSelection() { startScreen.classList.add('hidden'); practiceTypeSelection.classList.remove('hidden'); } function backToStart() { generatedPaperContainer.classList.add('hidden'); startContainer.classList.remove('hidden'); practiceTypeSelection.classList.add('hidden'); chapterSelection.classList.add('hidden'); levelSelection.classList.add('hidden'); startScreen.classList.remove('hidden'); selectedTopics = []; selectedLevel = null; selectedPracticeType = null; questionCount = 50; timeLimit = 60; questionCountSpan.textContent = "50"; document.querySelectorAll('.option-card').forEach(c => c.classList.remove('selected')); document.querySelectorAll('.timer-btn').forEach(b => b.classList.remove('selected')); if(document.querySelector('.timer-btn[data-time="60"]')) document.querySelector('.timer-btn[data-time="60"]').classList.add('selected'); level1Btn.classList.remove('selected'); level2Btn.classList.remove('selected'); level3Btn.classList.remove('selected'); } function backToPracticeType() { chapterSelection.classList.add('hidden'); practiceTypeSelection.classList.remove('hidden'); } function backToChapters() { levelSelection.classList.add('hidden'); chapterSelection.classList.remove('hidden'); } function showChapters() { const t = uiText[currentLang]; if(!selectedPracticeType) { alert(t.noPracticeAlert); return; } practiceTypeSelection.classList.add('hidden'); chapterSelection.classList.remove('hidden'); loadTopics(); } function showLevelSelection() { const t = uiText[currentLang]; selectedTopics = getSelectedTopics(); if(selectedTopics.length === 0) { alert(t.noTopicAlert); return; } chapterSelection.classList.add('hidden'); levelSelection.classList.remove('hidden'); } function selectLevel(level) { level1Btn.classList.remove('selected'); level2Btn.classList.remove('selected'); level3Btn.classList.remove('selected'); document.getElementById(`level${level}Btn`).classList.add('selected'); selectedLevel = level; } level1Btn.onclick = () => selectLevel(1); level2Btn.onclick = () => selectLevel(2); level3Btn.onclick = () => selectLevel(3); decreaseCount.onclick = () => { if(questionCount > 10) { questionCount -= 5; questionCountSpan.textContent = questionCount; } }; increaseCount.onclick = () => { if(questionCount < 100) { questionCount += 5; questionCountSpan.textContent = questionCount; } }; document.querySelectorAll('.option-card').forEach(card => { card.addEventListener('click', () => { document.querySelectorAll('.option-card').forEach(c => c.classList.remove('selected')); card.classList.add('selected'); selectedPracticeType = card.dataset.type; if(selectedPracticeType === 'full-length') { questionCount = 50; questionCountSpan.textContent = "50"; } else if(selectedPracticeType === 'previous-year') { questionCount = 45; questionCountSpan.textContent = "45"; } }); }); document.querySelectorAll('.timer-btn').forEach(btn => { btn.addEventListener('click', () => { document.querySelectorAll('.timer-btn').forEach(b => b.classList.remove('selected')); btn.classList.add('selected'); timeLimit = parseInt(btn.dataset.time); }); }); function getPracticeTypeName(type, lang) { const t = uiText[lang]; if(type === 'chapter-wise') return '=ØÖÜ ' + t.optChapterTitle; if(type === 'full-length') return '=ØÝÜ ' + t.optFullTitle; if(type === 'previous-year') return 'ó# ' + t.optPrevTitle; return '•' ' + t.subjectLabel; } function generatePaper(topics, level, lang) { const t = uiText[lang]; const mcqs = getRandomQuestions(topics, level, questionCount, lang); let paperHTML = ` <div class="header" style="background: linear-gradient(135deg, #0088cc, #006699);"> <h2>•' CTET Paper 2 - ${t.subjectLabel}  - M / > 8 8 G  </h2> <h3>${getPracticeTypeName(selectedPracticeType, lang)}</h3> <p>${level === 1 ? t.l1Title : level === 2 ? t.l2Title : t.l3Title} - ${level === 1 ? t.l1Sub : level === 2 ? t.l2Sub : t.l3Sub} | 8 . / : ${timeLimit} . ? (  </p> <p> A 2 * M 0 6 M ( : ${questionCount}</p> </div> <div class="content-area"> <div class="instructions"> <p><strong>${t.instructions}</strong></p> <ol> <li>${t.inst1.replace('{count}', questionCount)}</li> <li>${t.inst2}</li> <li>${t.inst3.replace('{time}', timeLimit)}</li> <li>${t.inst4}</li> <li>${t.inst5}</li> </ol> </div> <div class="question-section"> <div class="section-heading" style="font-size:1.2rem; font-weight:bold; margin-bottom:15px;">${t.mcqHeading}</div>`; let qNum = 1; mcqs.forEach(mcq => { paperHTML += `<div class="question"><div class="question-text">${qNum}. ${mcq.question}</div><div class="option">A. ${mcq.options[0]}</div><div class="option">B. ${mcq.options[1]}</div><div class="option">C. ${mcq.options[2]}</div><div class="option">D. ${mcq.options[3]}</div></div>`; qNum++; }); paperHTML += `</div><div class="answer-sheet"><h3 class="section-title">${t.answerKey}</h3><table class="answer-table"><thead><tr><th>${t.qNo}</th><th>${t.ans}</th><th>${t.qNo}</th><th>${t.ans}</th><th>${t.qNo}</th><th>${t.ans}</th></tr></thead><tbody>`; for(let i=0; i<mcqs.length; i+=3) { paperHTML += `<tr>`; for(let j=0; j<3; j++) { if(i+j < mcqs.length) paperHTML += `<td>${i+j+1}</td><td>${mcqs[i+j].answer}</td>`; else paperHTML += `<td></td><td></td>`; } paperHTML += `</tr>`; } paperHTML += `</tbody></table></div><div class="action-buttons"><button class="btn btn-primary" id="printBtn"><i class="fas fa-print"></i> ${t.print}</button><button class="btn btn-success" id="downloadBtn"><i class="fas fa-download"></i> ${t.download}</button><button class="btn btn-danger" id="newAssignmentBtn"><i class="fas fa-plus"></i> ${t.newSet}</button></div></div>`; generatedPaperContainer.innerHTML = paperHTML; generatedPaperContainer.classList.remove('hidden'); startContainer.classList.add('hidden'); document.getElementById('printBtn')?.addEventListener('click', () => window.print()); document.getElementById('downloadBtn')?.addEventListener('click', downloadPDF); document.getElementById('newAssignmentBtn')?.addEventListener('click', () => backToStart()); } async function downloadPDF() { const element = document.getElementById('generatedPaperContainer'); const tempDiv = document.createElement('div'); tempDiv.style.position = 'absolute'; tempDiv.style.left = '-9999px'; tempDiv.style.width = '794px'; tempDiv.style.backgroundColor = 'white'; tempDiv.style.padding = '20px'; tempDiv.innerHTML = element.innerHTML; document.body.appendChild(tempDiv); try { const pdf = new jsPDF('p', 'mm', 'a4'); const pageWidth = pdf.internal.pageSize.getWidth() - 25.4; let position = 12.7; let remainingHeight = tempDiv.scrollHeight; let pageNum = 1; while (remainingHeight > 0) { const canvas = await html2canvas(tempDiv, { scale: 1.5, backgroundColor: '#ffffff' }); const imgData = canvas.toDataURL('image/jpeg', 0.92); if(pageNum > 1) pdf.addPage(); pdf.addImage(imgData, 'JPEG', 12.7, 12.7, pageWidth, canvas.height * pageWidth / canvas.width); position += 277; remainingHeight -= 277 * 3.78; pageNum++; } pdf.save('CTET_Paper2_Maths_Pedagogy_Practice_Set.pdf'); } catch(e) { console.error(e); alert("PDF generation error"); } finally { if(tempDiv) document.body.removeChild(tempDiv); } } // ===================================================== // EVENT BINDINGS // ===================================================== startGeneratingBtn.onclick = showPracticeTypeSelection; backToStartBtn.onclick = backToStart; proceedToChaptersBtn.onclick = showChapters; backToPracticeTypeBtn.onclick = backToPracticeType; generateAssignmentBtn.onclick = showLevelSelection; backToChaptersBtn.onclick = backToChapters; generateFinalBtn.onclick = function() { const t = uiText[currentLang]; if(!selectedLevel) { alert(t.noLevelAlert); return; } generatePaper(selectedTopics, selectedLevel, currentLang); }; homeIconBtn.onclick = backToStart; // Default timer selection document.querySelector('.timer-btn[data-time="60"]')?.classList.add('selected'); // Initial load applyUILanguage('hi'); </script> </body> </html>