ÿþ<!DOCTYPE html> <html lang="hi"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>UP * A 2 ? 8  >  8 M  G , 2 8 > . > ( M /  M  > ( & H ( ?   - M / > 8 8 . 8 M / >  ( 0 G  0 </title> <link href="img/logo1.jpg" 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: #4361ee; --primary-dark: #3f37c9; --secondary: #4895ef; --danger: #f72585; --success: #4cc9f0; --light: #f8f9fa; --dark: #212529; --gray: #6c757d; --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', Tahoma, Geneva, Verdana, sans-serif; } body { background: linear-gradient(135deg, #f5f7fa 0%, #e2e8f0 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: 950px; 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; top: -50px; right: -50px; width: 150px; height: 150px; background: rgba(255, 255, 255, 0.1); border-radius: 50%; } .header h1 { font-size: 2rem; margin-bottom: 10px; font-weight: 700; position: relative; z-index: 1; } .header p { font-size: 1rem; opacity: 0.9; position: relative; z-index: 1; } .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); } .btn-success { background: var(--success); color: white; } .btn-success:hover { background: #3ab0d6; transform: translateY(-2px); } .btn-danger { background: var(--danger); color: white; } .btn-danger:hover { background: #d3166b; transform: translateY(-2px); } .btn-level { background: var(--light); color: var(--dark); border: 2px solid var(--gray); font-size: 1.2rem; 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: 15px; 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.95rem; font-weight: 500; } .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; } .streak-container { display: flex; justify-content: center; align-items: center; margin: 20px 0; gap: 15px; flex-wrap: wrap; } .streak-counter { background: var(--success); color: white; padding: 10px 20px; border-radius: 50px; font-weight: bold; } .date-display { font-size: 1.1rem; font-weight: 600; color: var(--primary-dark); } .progress-container { margin: 20px 0; background: #f8f9fa; padding: 20px; border-radius: var(--border-radius); } .progress-bar { height: 10px; background: #e9ecef; border-radius: 5px; overflow: hidden; margin-top: 10px; } .progress-fill { height: 100%; background: var(--success); border-radius: 5px; transition: width 0.5s ease; } .problem-of-day { background: linear-gradient(135deg, #fff5f5, #fff0f6); border-left: 4px solid var(--danger); padding: 20px; margin: 20px 0; border-radius: var(--border-radius); } .daily-summary { display: flex; justify-content: space-between; flex-wrap: wrap; gap: 15px; margin: 20px 0; } .summary-card { flex: 1; min-width: 120px; background: white; padding: 15px; border-radius: var(--border-radius); box-shadow: 0 4px 10px rgba(0,0,0,0.05); text-align: center; } .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); } .instructions { margin-bottom: 30px; padding: 20px; background: #f8f9fa; border-radius: var(--border-radius); } .instructions ol { padding-left: 20px; margin-top: 10px; } @media (max-width: 768px) { .header h1 { font-size: 1.4rem; } .btn-level { width: 160px; font-size: 1rem; } .checkbox-container { grid-template-columns: 1fr; } } @media print { .action-buttons, .streak-container, .progress-container, .problem-of-day, .daily-summary, .home-icon { display: none; } } </style> </head> <body> <div class="container" id="startContainer"> <div class="header"> <a href="up-police-constable-daily-practice-problem-generator.html" class="home-icon" ><i class="fas fa-home"></i></a> <h1>UP * A 2 ? 8  >  8 M  G , 2 8 > . > ( M /  M  > ( </h1> <p>& H ( ?   - M / > 8 8 . 8 M / >  ( 0 G  0 (9 ?  & @ . G  )</p> </div> <div class="content-area"> <div id="startScreen"> <h2 class="section-title">8 > . > ( M /  M  > ( & H ( ?   - M / > 8 8 . 8 M / >  ( 0 G  0 </h2> <div class="streak-container"> <div class="streak-counter"><i class="fas fa-fire"></i> 2  > $ > 0 : <span id="streakDays">0</span> & ? ( </div> <div class="date-display" id="currentDate"></div> </div> <div class="progress-container"> <h3> *  @ * M 0  $ ? </h3> <div class="progress-bar"><div class="progress-fill" id="progressFill" style="width: 0%"></div></div> <p id="progressText">0% * B 0 M # </p> </div> <div class="btn-group"> <button class="btn btn-primary" id="problemOfDayBtn">& ? (  @ 8 . 8 M / > </button> <button class="btn btn-success" id="customPracticeBtn"> 8 M  .  - M / > 8 </button> </div> </div> <div id="subjectSelection" class="hidden"> <h2 class="section-title">8 > . > ( M /  M  > ( 5 ? 7 /  A ( G  </h2> <div class="btn-group"><button class="btn btn-primary" id="selectGKBtn">8 > . > ( M /  M  > ( (GK)</button></div> </div> <div id="topicSelection" class="hidden"> <h2 class="section-title">5 ? 7 / K   >  / (  0 G  ( ' M / > / 5 > 0 )</h2> <form id="topicForm"> <div class="checkbox-container" id="topicsContainer"></div> </form> <div class="btn-group"> <button class="btn btn-danger" id="backToStartBtn">* M 0 > 0  - * 0 5 > * 8 </button> <button class="btn btn-success" id="generateAssignmentBtn"> - M / > 8 * M 0 6 M (  G ( 0 G   0 G  </button> </div> </div> <div id="levelSelection" class="hidden"> <h2 class="section-title"> ? ( >  8 M $ 0  A ( G  </h2> <p class="text-center"> * ( G  - M / > 8  G 2 ?   ? ( >  8 M $ 0  A ( G  :</p> <div class="level-buttons"> <button class="btn btn-level" id="level1Btn">8 M $ 0 1<br><small>, G 8 ?  </small></button> <button class="btn btn-level" id="level2Btn">8 M $ 0 2<br><small>. ' M / . </small></button> <button class="btn btn-level" id="level3Btn">8 M $ 0 3<br><small> ( M ( $ (UP * A 2 ? 8 * 0 @  M 7 > 8 M $ 0 )</small></button> </div> <div class="btn-group"> <button class="btn btn-danger" id="backToTopicsBtn">5 ? 7 / K  * 0 5 > * 8 </button> <button class="btn btn-success" id="generateFinalBtn"> - M / > 8 * M 0 6 M (  G ( 0 G   0 G  </button> </div> </div> </div> </div> <div class="container hidden" id="generatedPaperContainer"></div> <script> const { jsPDF } = window.jspdf; const startContainer = document.getElementById('startContainer'); const startScreen = document.getElementById('startScreen'); const subjectSelection = document.getElementById('subjectSelection'); const topicSelection = document.getElementById('topicSelection'); const levelSelection = document.getElementById('levelSelection'); const generatedPaperContainer = document.getElementById('generatedPaperContainer'); const problemOfDayBtn = document.getElementById('problemOfDayBtn'); const customPracticeBtn = document.getElementById('customPracticeBtn'); const selectGKBtn = document.getElementById('selectGKBtn'); const backToStartBtn = document.getElementById('backToStartBtn'); const generateAssignmentBtn = document.getElementById('generateAssignmentBtn'); const backToTopicsBtn = document.getElementById('backToTopicsBtn'); const generateFinalBtn = document.getElementById('generateFinalBtn'); const level1Btn = document.getElementById('level1Btn'); const level2Btn = document.getElementById('level2Btn'); const level3Btn = document.getElementById('level3Btn'); const homeIcon = document.getElementById('homeIcon'); const streakDays = document.getElementById('streakDays'); const currentDate = document.getElementById('currentDate'); const progressFill = document.getElementById('progressFill'); const progressText = document.getElementById('progressText'); // ========================  ' M / > / 5 > 0 * M 0 6 M ( ! G  > , G 8 ($ @ ( 8 M $ 0 K   G 8 > % ) ======================== const questions = { "8 > . > ( M /  M  > (  0  0    + G / 0 M 8 ": { level1: [ { question: "9 > 2 9 @ . G  '0 > 7 M  M 0 @ /   $ > & ? 5 8 '  ? 8  @  /  $ @ * 0 . ( > / >  > $ > 9 H ?", options: [". 9 > $ M . >  >  ' @ ", "8 0 & > 0 5 2 M 2 - - >  *  G 2 ", " 5 > 9 0 2 > 2 ( G 9 0 B ", "! I . - @ . 0 > 5   , G !  0 "], answer: "B" }, { question: "2024 . G  G20 6 ?  0 8 . M . G 2 (  ? 8 & G 6 . G   / K  ? $  ? / >  / > ?", options: ["- > 0 $ ", ", M 0 >  @ 2 ", " > * > ( ", " 0 M . ( @ "], answer: "B" }, { question: "'  & M 0 / > ( -3'  ? 8  M 0 9 * 0 $ 0 > ?", options: [".   2 ", "6 A  M 0 ", "  & M 0 . > ", ", C 9 8 M * $ ? "], answer: "C" } ], level2: [ { question: "5 ? 6 M 5 , H    G  ( A 8 > 0 , 2024 . G  - > 0 $  @ GDP 5 C & M ' ? & 0  ? $ ( @ 0 9 @ ?", options: ["5.5%", "6.8%", "7.2%", "8.1%"], answer: "C" }, { question: "9 > 2 9 @ . G   ? 8 - > 0 $ @ /  K '0 G . ( . H  M 8 G 8 G * A 0 8 M  > 0 ' 8 G 8 . M . > ( ? $  ? / >  / > ?", options: ["8 K ( . 5 >    A  ", "0 5 ?  & 0 8 ?  9 ", " 0 5 ?  &  G  0 @ 5 > 2 ", ". G ' > * >   0 "], answer: "A" } ], level3: [ { question: "9 > 2  G 8  / A  M $ 0 > 7 M  M 0 . > ( 5 5 ?  > 8 8 B   >   (HDI) . G  - > 0 $  > 8 M % > (  M / > 9 H ?", options: ["1185 >  ", "1255 >  ", "1325 >  ", "1405 >  "], answer: "C" }, { question: "'QUAD' & G 6 K   G 8 . M . ? 2 ? $ 8 H ( M /  - M / > 8  > ( > .  M / > 9 H ?", options: [". > 2 > , > 0 ", " K *   ! ? / > ", "8 . A & M 0 6  M $ ? ", ". ? $ M 0 6  M $ ? "], answer: "A" } ] }, "8 > . > ( M / 5 ?  M  > ( ": { level1: [ { question: ". > ( 5 6 0 @ 0 . G  8 , 8 G , ! < @  M 0  % ?  L ( 8 @ 9 H ?", options: ["% > / 0 I / ! ", "/  C $ (2 ? 5 0 )", "  M ( M / > 6 / ", "* @ / B 7  M 0  % ? "], answer: "B" }, { question: "5 ?  > . ? ( C  > 0 > 8 > / ( ?  ( > .  M / > 9 H ?", options: ["0 >  , K + M 2 G 5 ? ( ", "% > / . ? ( ", " 8 M  I 0 M , ?   . M 2 ", "( ? / > 8 ? ( "], answer: "C" } ], level2: [ { question: "DNA . G  * >   > ( G 5 > 2 G  M 7 > 0  (base)  L ( 8 G 9 H  ?", options: [" ! G ( ? ( ,  A  ( ? ( , 8 >   K 8 ? ( , % > / . ? ( ", " ! G ( ? ( ,  A  ( ? ( , 8 >   K 8 ? ( , / B 0 G 8 ? 2 ", " ! G ( ? ( ,  A  ( ? ( , % > / . ? ( , / B 0 G 8 ? 2 ", " ! G ( ? ( , 8 >   K 8 ? ( , / B 0 G 8 ? 2 , 0 >  , K  "], answer: "A" } ], level3: [ { question: "CRISPR $  ( @   ? 8  M 7 G $ M 0 . G  * / K   @  > $ @ 9 H ?", options: [" @ ( 8  * > & ( ", "( H ( K  G  M ( K 2 I  @ ", " C $ M 0 ? . , A & M ' ? . $ M $ > ", "  $ 0 ?  M 7  ( A 8  ' > ( "], answer: "A" } ] }, "- > 0 $ @ /  $ ? 9 > 8 ": { level1: [ { question: "8 M 5 $  $ M 0 - > 0 $  G * M 0 % .  5 0 M ( 0  ( 0 2  L ( % G ?", options: ["2 I 0 M ! . >   , G  ( ", "0 >  >  @ ", "! I . 0 >  G  & M 0 * M 0 8 > & ", " 5 > 9 0 2 > 2 ( G 9 0 B "], answer: "A" }, { question: " A * M $ 5  6  > 8  8 M % > *   L ( % > ?", options: ["  & M 0  A * M $ * M 0 % . ", "8 . A & M 0  A * M $ ", "6 M 0 @  A * M $ ", "  & M 0  A * M $ & M 5 ? $ @ / "], answer: "C" } ], level2: [ { question: "* M 2 > 8 @  > / A & M ' (1757) . G     M 0 G  K   G 8 G ( > * $ ?  L ( % G ?", options: ["0 I , 0 M   M 2 >  5 ", "2 I 0 M ! ! 2 9 L  @ ", "5 > 0 G ( 9 G 8 M  ?   M 8 ", "2 I 0 M !  0 M  ( "], answer: "A" } ], level3: [ { question: "* M 0 >  @ (  > 2  > '$  M 7 6 ? 2 > 5 ? 6 M 5 5 ? & M / > 2 / '  ? 8 0 >  M / . G  8 M % ? $ % > (5 0 M $ . > ( & G 6 )?", options: ["- > 0 $ ", "* >  ? 8 M $ > ( ", " +  > ( ? 8 M $ > ( ", ", >   M 2 > & G 6 "], answer: "B" } ] }, "- > 0 $ @ / 8  5 ? ' > (  5  0 >  5 M / 5 8 M % > ": { level1: [ { question: "- > 0 $ @ / 8  5 ? ' > (  > . 8 L & > $ H / > 0  0 ( G 5 > 2 @ 8 . ? $ ?  G  ' M /  M 7  L ( % G ?", options: [" 5 > 9 0 2 > 2 ( G 9 0 B ", "8 0 & > 0 *  G 2 ", "! I . , @ . 0 .   , G !  0 ", "! I . 0 >  G  & M 0 * M 0 8 > & "], answer: "C" }, { question: "- > 0 $  > 0 > 7 M  M 0 * $ ?  ? 8  ( A  M  G &  G $ 9 $ 0 > 7 M  M 0 @ /  * > $  > 2  K 7 ? $  0 8  $ > 9 H ?", options: [" ( A  M  G & 352", " ( A  M  G & 356", " ( A  M  G & 360", " ( A  M  G & 368"], answer: "A" } ], level2: [ { question: "8  5 ? ' > (  @  ? 8  ( A 8 B  @ . G  & 2 -, & 2 5 ? 0 K ' @  > ( B (  > * M 0 > 5 ' > ( 9 H ?", options: [" 5 @   ( A 8 B  @ ", "( L 5 @   ( A 8 B  @ ", "& 8 5 @   ( A 8 B  @ ", " M / > 0 9 5 @   ( A 8 B  @ "], answer: "C" } ], level3: [ { question: ". B 2  ' ?  > 0 K   > ( ? 2  , (  G 5 2  ? 8  * > $  > 2  G & L 0 > (  ? / >  > 8  $ > 9 H ?", options: ["0 > 7 M  M 0 @ /  * > $  > 2 ( ( A  M  G & 352)", "0 >  M /  * > $  > 2 (356)", "5 ? $ M $ @ /  * > $  > 2 (360)", " ? 8 @ . G  ( 9 @  "], answer: "A" } ] }, "- > 0 $ @ /  0 M % 5 M / 5 8 M % > ": { level1: [ { question: "- > 0 $ . G  . A & M 0 > 8 M + @ $ ? . > * ( G  > . A  M / 8 B   >    L ( 8 > 9 H ?", options: ["WPI", "CPI", "GDP Deflator", "PPI"], answer: "B" }, { question: "( > , > 0 M ! (NABARD)  > . A  M / & M & G 6 M /  M / > 9 H ?", options: [" & M / K  ?  5 ?  > 8 ", " M 0 > . @ # 5 ?  > 8  5   C 7 ? 5 ? $ M $ ", "( ? 0 M / > $ * M 0 K $ M 8 > 9 ( ", "6 G / 0 , >  > 0 ( ? / . ( "], answer: "B" } ], level2: [ { question: "- > 0 $ . G  ' * 0 G 6 (  M 0 @ ( '  > 8  ,  '  ? 8  M 7 G $ M 0 8 G 9 H ?", options: ["! G / 0 @ ", "8 , M  ? / >  ", " ( >  ", "$ G 2 "], answer: "B" } ], level3: [ { question: "- > 0 $  > '* @  . - ? 8 > ( 8 . M . > ( ( ? ' ? '  ? 8 * M 0  > 0  > 9 8 M $ >  $ 0 # 9 H ?", options: ["8 6 0 M $ (  & 9 8 M $ >  $ 0 # ", " 6 0 M $ (  & 9 8 M $ >  $ 0 # ", "* M 0 $ M /  M 7 2 > - 9 8 M $ >  $ 0 # ", "5 8 M $ A 8 , M 8 ? ! @ "], answer: "C" } ] }, "- > 0 $ @ / 8  8 M  C $ ?  5  5 ? 0 > 8 $ ": { level1: [ { question: "( C $ M / ' %  '  ? 8 0 >  M /  @ 6 > 8 M $ M 0 @ / ( C $ M / 6 H 2 @ 9 H ?", options: ["$ . ? 2 ( > ! A ", " G 0 2 ", " $ M $ 0 * M 0 & G 6 ", "  ' M 0 * M 0 & G 6 "], answer: "C" }, { question: "( > 2  & > 5 ? 6 M 5 5 ? & M / > 2 /  ? 8 0 >  M / . G  8 M % ? $ 9 H ?", options: [", ? 9 > 0 ", " $ M $ 0 * M 0 & G 6 ", ". ' M / * M 0 & G 6 ", "* 6 M  ? . ,   > 2 "], answer: "A" } ], level2: [ { question: "'8   @ $ ( >     > & . @ * A 0 8 M  > 0 '  ? 8  M 7 G $ M 0 . G  & ? / >  > $ > 9 H ?", options: ["8 > 9 ? $ M / ", "( >  M /  5  8   @ $ ", " 2  ? $ M 0 ", " ? $ M 0  2 > "], answer: "B" } ], level3: [ { question: "9 ?  & B  H 2 G  ! 0  G  ( A 8 > 0 '8  5 $ M 8 0 @ ' $ M / L 9 > 0  ? 8 8 . A & > / & M 5 > 0 > . ( > / >  > $ > 9 H ?", options: ["6 ?  ", " H ( ", ", L & M ' ", "9 ?  & B (6 M 5 G $ >  , 0  H ( )"], answer: "B" } ] }, " $ M $ 0 * M 0 & G 6 0 >  M /  @ 6 ?  M 7 > , 8  8 M  C $ ?  0 8 > . >  ?  * M 0 % >   ": { level1: [ { question: " $ M $ 0 * M 0 & G 6  > 0 >   @ / * 6 A  M / > 9 H ?", options: [", >  ", "9 ? 0 # ", ", > 0 9 8 ?   > ", "9 > % @ "], answer: "C" }, { question: " A . M - . G 2 >  ? 8 (  0 . G  2  $ > 9 H ?", options: [" 2 > 9 > , > & (* M 0 / >  0 >  )", "5 > 0 > # 8 @ ", ". % A 0 > ", "  0 > "], answer: "A" } ], level2: [ { question: "/ B * @ * A 2 ? 8  G 5 0 M $ . > ( . 9 > ( ? & G 6  (DGP)  L ( 9 H  ? ( M  > ( * 0 @  M 7 # )", options: ["5 ?  /  A . > 0 ", ". A  A 2  K / 2 ", "0 >  @ 5  A . > 0 8 ?  9 ", " . * M 0  > 6 8 ?  9 "], answer: "C" } ], level3: [ { question: " $ M $ 0 * M 0 & G 6 . G  '5 ( 8 M  G 6 ( 5 ( * M 0 K !  M  ' / K  ( >  > & M & G 6 M /  M / > 9 H ?", options: ["* 0 M /  ( , " < > ( > ", "8 M % > ( @ / 9 8 M $ 6 ? 2 M *  K , " < > 5 > & G ( > ", "! ?  ?  2   ! ? / > ", "6 ?  M 7 > 8 A ' > 0 "], answer: "B" } ] }, "- > 0 $ @ /  5  5 ? 6 M 5 - B  K 2 ": { level1: [ { question: "9 ? . > 2 /  @ 8 , 8 G   @  K  @  L ( 8 @ 9 H ?", options: ["   (    > ", "(  & > & G 5 @ ", ". >    5 0 G 8 M  ", " ( M ( * B 0 M # > "], answer: "C" }, { question: "* C % M 5 @  G  A 2  M 7 G $ M 0 + 2 * 0  2  > * M 0 $ ? 6 $  ? $ ( > 9 H ?", options: ["61%", "71%", "81%", "91%"], answer: "B" } ], level2: [ { question: " 0 M  0 G  > - > 0 $  G  ? $ ( G 0 >  M / K  8 G 9 K  0  A  0 $ @ 9 H ?", options: ["6", "7", "8", "9"], answer: "C" } ], level3: [ { question: "9 > 2 9 @ . G   K  >  / > '$ A    @ '  M 5 > 2 > . A  @  ? 8 & G 6 . G  9 H ?", options: ["  ! K ( G 6 ? / > ", " > * > ( ", "  8 2 H  ! ", ". G  M 8 ?  K "], answer: "B" } ] }, "8 >  , 0  * 0 > '  5  8 K 6 2 . @ ! ? / > 8   > 0 ": { level1: [ { question: "8 >  , 0 8 M  I  ?    >  M / >  0 M % 9 H ?", options: [" ( 2 >  ( ' K  > ' ! < @ ", " ? 8 @  @  ( 2 >  (  $ ? 5 ? ' ? / K  * 0 (  0 0  ( >  0 * 0 G 6 > (  0 ( > ", "9 H  ?   ", "5 > / 0 8 + H 2 > ( > "], answer: "B" }, { question: "- > 0 $ . G  8 >  , 0  * 0 > ' K  8 G ( ? *  ( G 5 > 2 @   G  8 @  L ( 8 @ 9 H ?", options: ["CERT-IN", "NIA", "CBI", "RAW"], answer: "A" } ], level2: [ { question: "! > 0 M  5 G , $  * 9 A   ( G  G 2 ?   ? 8 , M 0 >  0  > * / K   ? / >  > $ > 9 H ?", options: ["Tor Browser", "Chrome", "Firefox", "Edge"], answer: "A" } ], level3: [ { question: "   @  ' ? ( ? / . 2000  @ ' > 0 > 66D  ? 8  * 0 > ' 8 G 8  ,  ' ? $ 9 H ?", options: ["  ! G   ?  @ % G + M  ", "8 >  , 0 8 M  I  ?   ", "! >  >  K 0 @ ", "' K  > ' ! < @ 8 G * M 0 $ ? 0 B * # "], answer: "D" } ] } }; //  ( M /  ' M / > / K   G 2 ?  ! ? + < I 2 M  * M 0 6 M ( (8 - @ 24 5 ? 7 / K   K  5 0  0 ( G  G 2 ?  ) const allTopics = Object.keys(questions); const defaultTopics = ["- > 0 $ @ /  C 7 ?  5  5 M / > * > 0 ", " ( 8   M / > , * 0 M / > 5 0 #  0 6 9 0 @  0 # ", ". > ( 5 > ' ?  > 0 ", "5 ? . A & M 0 @  0 #  0 8  > * M 0 - > 5 ", "5 8 M $ A  5  8 G 5 >  0 (GST)", "* A 0 8 M  > 0  0 8 . M . > ( ", "& G 6 /0 >  ' > ( ? / >  /. A & M 0 >   ", ". 9 $ M 5 * B 0 M # & ? (  5  $ ? % ? / >  ", " K  G   5   ( A 8  ' > ( ", "* M 0 8 ? & M ' * A 8 M $  G   5  (  G 2 G   ", "  $ 0 ?  8 A 0  M 7 >  0  $   5 > & ", "- > 0 $  5  * ! < K 8 @ & G 6 K   G 8  ,  ' ", "0 > 7 M  M 0 @ /  5    $ 0 M 0 > 7 M  M 0 @ / 8 . 8 > . / ?  5 ? 7 / ", "0 > 7 M  M 0 @ /  5    $ 0 M 0 > 7 M  M 0 @ / 8   ( ", " $ M $ 0 * M 0 & G 6 . G  0 >  8 M 5 , * A 2 ? 8  0 8 > . > ( M / * M 0 6 > 8 ( ?  5 M / 5 8 M % > "]; defaultTopics.forEach(topic => { if (!questions[topic]) { questions[topic] = { level1: [{ question: `${topic} 8 G 8  ,  ' ? $ , A ( ? / > & @ * M 0 6 M ( : 8 9 @ 5 ?  2 M *  A ( G  d `, options: ["5 ?  2 M * A", "5 ?  2 M * B", "5 ?  2 M * C", "5 ?  2 M * D"], answer: "A" }], level2: [{ question: `${topic}  > . ' M / . 8 M $ 0  > * M 0 6 M ( : ( ? . M ( 2 ?  ? $ . G  8 G  L ( 8 9 @ 9 H ?`, options: ["A", "B", "C", "D"], answer: "B" }], level3: [{ question: `${topic}  > ( M ( $ 8 M $ 0  > * M 0 6 M ( : 8 9 @  % (  A ( G  d `, options: ["A", "B", "C", "D"], answer: "C" }] }; } }); const finalTopicList = Object.keys(questions); let selectedTopics = []; let selectedLevel = null; let practiceType = null; let userProgress = { streak: 0, lastPracticeDate: null, totalProblemsSolved: 0, topicsCompleted: 0, totalTopics: finalTopicList.length }; function loadUserProgress() { const saved = localStorage.getItem('upPoliceGKProgress'); if (saved) userProgress = JSON.parse(saved); const today = new Date().toDateString(); if (userProgress.lastPracticeDate !== today) { const yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); if (userProgress.lastPracticeDate === yesterday.toDateString()) userProgress.streak++; else userProgress.streak = 1; userProgress.lastPracticeDate = today; saveUserProgress(); } updateUI(); } function saveUserProgress() { localStorage.setItem('upPoliceGKProgress', JSON.stringify(userProgress)); } function updateUI() { streakDays.textContent = userProgress.streak; const today = new Date(); currentDate.textContent = today.toLocaleDateString('hi-IN', { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' }); const percent = Math.round((userProgress.topicsCompleted / userProgress.totalTopics) * 100); progressFill.style.width = `${percent}%`; progressText.textContent = `${percent}% * B 0 M # `; } function getRandomQuestions(topicsArray, level, count) { let allQs = []; topicsArray.forEach(topic => { if (questions[topic] && questions[topic][`level${level}`]) { allQs = allQs.concat(questions[topic][`level${level}`]); } }); allQs = allQs.sort(() => Math.random() - 0.5); return allQs.slice(0, count); } function renderTopics() { const container = document.getElementById('topicsContainer'); container.innerHTML = `<div class="checkbox-item"><input type="checkbox" id="fullSyllabus" value="full"><label for="fullSyllabus"><strong>8  * B 0 M # * > M /  M 0 . (8 - @ 5 ? 7 / )</strong></label></div>`; finalTopicList.forEach(topic => { container.innerHTML += `<div class="checkbox-item"><input type="checkbox" id="topic_${topic.replace(/\s/g, '')}" name="topic" value="${topic}"><label for="topic_${topic.replace(/\s/g, '')}">${topic}</label></div>`; }); document.getElementById('fullSyllabus')?.addEventListener('change', (e) => { document.querySelectorAll('input[name="topic"]').forEach(cb => cb.disabled = e.target.checked); }); } customPracticeBtn.addEventListener('click', () => { practiceType = 'custom'; startScreen.classList.add('hidden'); subjectSelection.classList.remove('hidden'); }); selectGKBtn.addEventListener('click', () => { renderTopics(); subjectSelection.classList.add('hidden'); topicSelection.classList.remove('hidden'); }); backToStartBtn.addEventListener('click', () => { topicSelection.classList.add('hidden'); startContainer.classList.remove('hidden'); startScreen.classList.remove('hidden'); updateUI(); }); generateAssignmentBtn.addEventListener('click', () => { const full = document.getElementById('fullSyllabus')?.checked; if (full) selectedTopics = [...finalTopicList]; else { selectedTopics = Array.from(document.querySelectorAll('input[name="topic"]:checked')).map(cb => cb.value); } if (selectedTopics.length === 0) { alert(" C * / >  . 8 G  .   5 ? 7 /  A ( G  !"); return; } topicSelection.classList.add('hidden'); levelSelection.classList.remove('hidden'); }); backToTopicsBtn.addEventListener('click', () => { levelSelection.classList.add('hidden'); topicSelection.classList.remove('hidden'); }); [level1Btn, level2Btn, level3Btn].forEach((btn, idx) => { btn.addEventListener('click', () => { [level1Btn, level2Btn, level3Btn].forEach(b => b.classList.remove('selected')); btn.classList.add('selected'); selectedLevel = idx+1; });}); generateFinalBtn.addEventListener('click', () => { if (!selectedLevel) { alert(" C * / >  ? ( >  8 M $ 0  A ( G  !"); return; } generateAssignment(); }); function generateAssignment() { startContainer.classList.add('hidden'); levelSelection.classList.add('hidden'); generatedPaperContainer.classList.remove('hidden'); const topicNames = selectedTopics.join(", "); const mcqs = getRandomQuestions(selectedTopics, selectedLevel, 10); let paperContent = ` <div class="header"> <h2>UP * A 2 ? 8  >  8 M  G , 2 8 > . > ( M /  M  > (  - M / > 8 </h2> <h3>${selectedTopics.length === finalTopicList.length ? "8  * B 0 M # * > M /  M 0 . " : topicNames.substring(0, 70)}</h3> <p>8 M $ 0 ${selectedLevel} - ${selectedLevel === 1 ? ", G 8 ?  " : selectedLevel === 2 ? ". ' M / . " : " ( M ( $ "}</p> </div> <div class="content-area"> <div class="instructions"><p><strong>( ? 0 M & G 6 :</strong></p><ol><li> 8  - M / > 8 8 G  . G  10 , 9 A 5 ?  2 M * @ / * M 0 6 M ( (MCQs) 9 H  d </li><li>* M 0 $ M / G  * M 0 6 M (  G  > 0 5 ?  2 M * 9 H   ? ( . G  8 G  G 5 2   8 9 @ 9 H d </li><li> 8  - M / > 8  K 15-20 . ? (  . G  * B 0 >  0 G  d </li><li> $ M $ 0  A   @ 8 G  * ( G $ M $ 0  >   G  d </li></ol></div> <div class="question-section"><div class="section-heading"> - M / > 8 * M 0 6 M ( </div>`; let qNum = 1; mcqs.forEach(mcq => { paperContent += `<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++; }); paperContent += `</div><div class="answer-sheet"><h3 class="section-title"> $ M $ 0  A   @ </h3> <table class="answer-table"><thead><tr><th>* M 0 6 M ( 8  .</th><th> $ M $ 0 </th><th>* M 0 6 M ( 8  .</th><th> $ M $ 0 </th></tr></thead><tbody>`; for (let i = 0; i < mcqs.length; i += 2) { paperContent += `<tr><td>${i+1}</td><td>${mcqs[i].answer}</td>`; if (i+1 < mcqs.length) paperContent += `<td>${i+2}</td><td>${mcqs[i+1].answer}</td>`; else paperContent += `<td></td><td></td>`; paperContent += `</tr>`; } paperContent += `</tbody></table></div> <div class="action-buttons"><button class="btn btn-success" id="markCompleteBtn"><i class="fas fa-check"></i> * B 0 M #  ? 9 M ( ? $  0 G  </button> <button class="btn btn-primary" id="printBtn"><i class="fas fa-print"></i> * M 0 ?    0 G  </button> <button class="btn btn-danger" id="newAssignmentBtn"><i class="fas fa-plus"></i> ( / >  - M / > 8 </button></div></div>`; generatedPaperContainer.innerHTML = paperContent; document.getElementById('markCompleteBtn')?.addEventListener('click', markPracticeComplete); document.getElementById('printBtn')?.addEventListener('click', () => window.print()); document.getElementById('newAssignmentBtn')?.addEventListener('click', backToStart); } function markPracticeComplete() { userProgress.totalProblemsSolved += 10; if (selectedTopics.length > 0 && !(selectedTopics.length === finalTopicList.length && document.getElementById('fullSyllabus')?.checked)) { let completedCount = 0; selectedTopics.forEach(t => { if (finalTopicList.includes(t)) completedCount++; }); userProgress.topicsCompleted = Math.max(userProgress.topicsCompleted, completedCount); } else if (selectedTopics.length === finalTopicList.length) userProgress.topicsCompleted = userProgress.totalTopics; saveUserProgress(); updateUI(); alert("6 > ( & > 0 !  - M / > 8 8 $ M 0 * B 0 M #  ? 9 M ( ? $  ? / >  / > d * M 0  $ ? 8 9 G  @   d "); backToStart(); } function generateProblemOfDay() { const randomTopic = finalTopicList[Math.floor(Math.random() * finalTopicList.length)]; const randomLevel = Math.floor(Math.random() * 3) + 1; selectedTopics = [randomTopic]; selectedLevel = randomLevel; startContainer.classList.add('hidden'); generatedPaperContainer.classList.remove('hidden'); const mcqs = getRandomQuestions(selectedTopics, selectedLevel, 1); let paperContent = ` <div class="header"><h2>UP * A 2 ? 8 8 > . > ( M /  M  > ( & H ( ?   - M / > 8 </h2><h3>& ? (  @ 8 . 8 M / > </h3><p>${randomTopic} " 8 M $ 0 ${randomLevel}</p></div> <div class="content-area"><div class="problem-of-day"><h3><i class="fas fa-star"></i>    @  A ( L $ @ </h3><p> * ( @ 2  > $ > 0 , ( >  0  ( G  G 2 ?   8 8 . 8 M / >  K 9 2  0 G  !</p></div> <div class="daily-summary"><div class="summary-card"><h4>5 0 M $ . > ( 2  > $ > 0 </h4><p>${userProgress.streak} & ? ( </p></div> <div class="summary-card"><h4>9 2  @   8 . 8 M / >   </h4><p>${userProgress.totalProblemsSolved}</p></div> <div class="summary-card"><h4>* M 0  $ ? </h4><p>${Math.round((userProgress.topicsCompleted / userProgress.totalTopics) * 100)}%</p></div></div> <div class="instructions"><p><strong>( ? 0 M & G 6 :</strong></p><ol><li>/ 9  *  @ & H ( ?   - M / > 8 8 . 8 M / > 9 H d </li><li> 8 G 5 . ? (  . G  9 2  0 G  d </li><li>8 . > ' > ( 8 G  >   G  d </li><li> 2 (  8 . 8 M / >  G 2 ?  5 > * 8    !</li></ol></div> <div class="question-section"><div class="section-heading">& ? (  @ 8 . 8 M / > </div>`; mcqs.forEach(mcq => { paperContent += `<div class="question"><div class="question-text">${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>`; }); paperContent += `</div><div class="answer-sheet"><h3 class="section-title">8 . > ' > ( </h3> <p><strong>8 9 @ $ M $ 0 :</strong> ${mcqs[0].answer}</p><p><strong>5 M / >  M / > :</strong> 5 ? 8 M $ C $ 5 M / >  M / >  2 M & * 2 , M ' 9 K  @ d </p></div> <div class="action-buttons"><button class="btn btn-success" id="markCompleteBtn"><i class="fas fa-check"></i> * B 0 M #  ? 9 M ( ? $  0 G  </button> <button class="btn btn-primary" id="printBtn"><i class="fas fa-print"></i> * M 0 ?    0 G  </button> <button class="btn btn-danger" id="newAssignmentBtn"><i class="fas fa-plus"></i> ( / >  - M / > 8 </button></div></div>`; generatedPaperContainer.innerHTML = paperContent; document.getElementById('markCompleteBtn')?.addEventListener('click', () => { userProgress.totalProblemsSolved++; saveUserProgress(); updateUI(); alert(", ' >  9 K ! 8 . 8 M / > * B 0 M # 9 A  d "); backToStart(); }); document.getElementById('printBtn')?.addEventListener('click', () => window.print()); document.getElementById('newAssignmentBtn')?.addEventListener('click', backToStart); } function backToStart() { generatedPaperContainer.classList.add('hidden'); startContainer.classList.remove('hidden'); topicSelection.classList.add('hidden'); levelSelection.classList.add('hidden'); subjectSelection.classList.add('hidden'); startScreen.classList.remove('hidden'); updateUI(); } problemOfDayBtn.addEventListener('click', generateProblemOfDay); homeIcon.addEventListener('click', (e) => { e.preventDefault(); backToStart(); }); document.addEventListener('DOMContentLoaded', () => { loadUserProgress(); }); </script> </body> </html>