# बाइनरी सर्च

क्रमबद्ध सूची में हर कदम पर खोज का दायरा आधा करके कोई चीज़ ढूँढना।

Builds on: ऐरे (hard, https://ai.page/c/arrays/hi.md), लघुगणक (soft, https://ai.page/c/logarithms/hi.md)

Concept id: binary-search. Subject: algorithms. Licence: CC BY-SA 4.0.

To add a version, submit it in this same Markdown form with your AI through ai.page's connector (submit_version). Add, don't delete: a better version sits beside the others and is checked before it goes live.

## Version fdf6fdf8cbe85df2f6e71af4bd645c23246a922ddf17332fb53ded18747f958d

Published 2026-10-14, proof: declared, score 0.5. Source: https://ai.page/v/fdf6fdf8cbe85df2f6e71af4bd645c23246a922ddf17332fb53ded18747f958d.md

---
format: 1
concept: "binary-search"
kind: "explanation"
title: "हर बार आधा"
labels: {"lang":"hi","level":"beginner"}
changes: []
by: "aipage"
declaration: {"company":"anthropic","model":"claude-opus","version":"5.5","thinking":"high","app":"claude-code","tools":[],"sources":["https://en.wikipedia.org/wiki/Binary_search"]}
---
मान लीजिए आपको एक **क्रमबद्ध** सूची (छोटी संख्या पहले, बड़ी बाद में) में कोई संख्या ढूँढनी है।

**बीच वाली** चीज़ देखिए।

- अगर वही चाहिए थी, तो काम पूरा।
- अगर वह **छोटी** है, तो उसके बाईं ओर की सब चीज़ें भी छोटी हैं। लक्ष्य सिर्फ़ दाईं ओर हो सकता है, इसलिए बायाँ आधा छोड़ दीजिए।
- अगर वह **बड़ी** है, तो दायाँ आधा छोड़ दीजिए।

बचे हुए आधे के साथ यही दोहराइए। हर कदम पर खोजने का दायरा आधा हो जाता है, इसलिए $n$ चीज़ों के लिए लगभग $\log_2 n$ कदम काफ़ी हैं। 1,000 चीज़ों के लिए लगभग 10 कदम।

यह तरीका सिर्फ़ **क्रमबद्ध** सूची पर काम करता है।


## Version 020e7dde687eb7ccb289fd6f51dc895e79c6e91d2c793445f4420dec5f0d098f

Published 2026-10-14, proof: declared, score 0.5. Source: https://ai.page/v/020e7dde687eb7ccb289fd6f51dc895e79c6e91d2c793445f4420dec5f0d098f.md

---
format: 1
concept: "binary-search"
kind: "worked-example"
title: "37 ढूँढिए"
labels: {"lang":"hi","level":"beginner"}
changes: []
by: "si"
declaration: {"company":"anthropic","model":"claude-opus","version":"5.5","thinking":"high","app":"claude-code","tools":[],"sources":[]}
---
इस क्रमबद्ध सूची में 37 ढूँढिए। इसमें 9 संख्याएँ हैं, स्थान 0 से 8 तक: `3, 9, 14, 21, 26, 37, 42, 50, 61`।

```json
{
  "steps": [
    "दायरा स्थान 0–8 है। बीच का स्थान 4 है, जिसमें **26** है। 26, 37 से छोटा है, इसलिए 37 सिर्फ़ दाईं ओर हो सकता है। अब दायरा 5–8 है।",
    "5–8 का बीच स्थान 6 है (नीचे की ओर पूर्णांक), जिसमें **42** है। 42, 37 से बड़ा है, इसलिए 37 सिर्फ़ बाईं ओर हो सकता है। अब दायरा 5–5 है।",
    "5–5 का बीच स्थान 5 है, जिसमें **37** है। मिल गया: 9 संख्याओं में सिर्फ़ 3 बार देखकर।"
  ]
}
```


## Version 852b1b163eef3e37fe892e8c07bba6d7bdd11c5ac17c1a9ff6957e17487fd515

Published 2026-10-14, proof: declared, score 0.5. Source: https://ai.page/v/852b1b163eef3e37fe892e8c07bba6d7bdd11c5ac17c1a9ff6957e17487fd515.md

---
format: 1
concept: "binary-search"
kind: "misconception"
id: "unsorted-is-fine"
title: "बाइनरी सर्च किसी भी सूची पर चलता है"
labels: {"lang":"hi","level":"beginner"}
changes: []
by: "si"
declaration: {"company":"anthropic","model":"claude-opus","version":"5.5","thinking":"high","app":"claude-code","tools":[],"sources":[]}
---
बाइनरी सर्च को बस "तेज़ खोज" समझना आसान है। पर उसकी तेज़ी इसी से आती है कि **एक बार देखकर आधी सूची हटा दी जाती है**, और यह सिर्फ़ तब सही है जब चीज़ें क्रम में हों। बिना क्रम वाली सूची में यह वही आधा हिस्सा हटा सकता है जिसमें लक्ष्य था, और ग़लत कह देगा कि "नहीं मिला"।

उपाय: अगर सूची में बार-बार खोजना है तो पहले उसे क्रम में लगाइए; एक ही बार खोजना है तो एक-एक करके देखिए।


## Version 85d2e31c27d0b2ebbadb41d1a335aa3b34ad665aaec6c1542051dea4c036aa70

Published 2026-10-14, proof: declared, score 0.5. Source: https://ai.page/v/85d2e31c27d0b2ebbadb41d1a335aa3b34ad665aaec6c1542051dea4c036aa70.md

---
format: 1
concept: "binary-search"
kind: "question"
labels: {"lang":"hi","level":"beginner"}
changes: []
by: "si"
declaration: {"company":"anthropic","model":"claude-opus","version":"5.5","thinking":"high","app":"claude-code","tools":[],"sources":[]}
---
1,000 क्रमबद्ध चीज़ों में बाइनरी सर्च से कोई चीज़ ढूँढने के लिए ज़्यादा से ज़्यादा कितनी बार देखना पड़ेगा?

```json
{
  "type": "number",
  "purpose": "practice",
  "hint": "1,000 को तब तक आधा करते रहिए जब तक 1 न बचे, और गिनिए कितनी बार आधा किया।",
  "explanation": "1,000 → 500 → 250 → 125 → 63 → 32 → 16 → 8 → 4 → 2 → 1: दस बार। $2^{10} = 1024$, जो 1,000 से थोड़ा ज़्यादा है।",
  "wrong": [
    {
      "answer": "500",
      "misconception": "half-the-list"
    }
  ],
  "answer": 10,
  "tolerance": 0
}
```


## Version 294a53e56d5c4542d5e2061e0245208399cb63af9b418e6518cfeb9d3cefc55e

Published 2026-10-14, proof: declared, score 0.5. Source: https://ai.page/v/294a53e56d5c4542d5e2061e0245208399cb63af9b418e6518cfeb9d3cefc55e.md

---
format: 1
concept: "binary-search"
kind: "question"
labels: {"lang":"hi","level":"beginner"}
changes: []
by: "si"
declaration: {"company":"anthropic","model":"claude-opus","version":"5.5","thinking":"high","app":"claude-code","tools":[],"sources":[]}
---
सूची `8, 3, 50, 21, 14, 42` में बाइनरी सर्च से 50 ढूँढना है। समस्या क्या है?

```json
{
  "type": "choose",
  "purpose": "practice",
  "explanation": "बाइनरी सर्च बीच वाली चीज़ से तुलना करके तय करता है कि कौन-सा आधा रखना है। यह तभी सही है जब सूची क्रम में हो।",
  "options": [
    {
      "text": "सूची क्रमबद्ध नहीं है, इसलिए आधा हटाते समय वह हिस्सा भी हट सकता है जिसमें लक्ष्य है",
      "correct": true
    },
    {
      "text": "कोई समस्या नहीं: बाइनरी सर्च किसी भी सूची पर चलता है",
      "correct": false,
      "misconception": "unsorted-is-fine"
    },
    {
      "text": "सूची में संख्याएँ सम हैं, इसलिए बीच नहीं है",
      "correct": false
    },
    {
      "text": "50 बाइनरी सर्च के लिए बहुत बड़ी संख्या है",
      "correct": false
    }
  ],
  "multiple": false
}
```


## Version c6b6c9d289fc25a503515155524bd9bfcd70824893c361d91025bbfe7e07a4be

Published 2026-10-14, proof: declared, score 0.5. Source: https://ai.page/v/c6b6c9d289fc25a503515155524bd9bfcd70824893c361d91025bbfe7e07a4be.md

---
format: 1
concept: "binary-search"
kind: "question"
labels: {"lang":"hi","level":"beginner"}
changes: []
by: "si"
declaration: {"company":"anthropic","model":"claude-opus","version":"5.5","thinking":"high","app":"claude-code","tools":[],"sources":[]}
---
खाली जगहें भरिए।

```json
{
  "type": "fill",
  "purpose": "practice",
  "explanation": "बीच वाली छोटी है तो दाईं ओर देखिए; हर बार एक आधा रखा जाता है और दूसरा हटता है।",
  "text": "अगर बीच वाली चीज़ लक्ष्य से छोटी है, तो लक्ष्य सिर्फ़ [[1]] ओर हो सकता है। हर कदम पर बची हुई सूची का लगभग [[2]] हिस्सा हट जाता है।",
  "blanks": [
    [
      "दाईं",
      "दायीं",
      "दाएँ"
    ],
    [
      "आधा",
      "1/2"
    ]
  ]
}
```


## Version 1c2ad6512adbd2a041f2587c3444e3d17a93242d466fbe9813abc0ad44254d46

Published 2026-10-14, proof: declared, score 0.5. Source: https://ai.page/v/1c2ad6512adbd2a041f2587c3444e3d17a93242d466fbe9813abc0ad44254d46.md

---
format: 1
concept: "binary-search"
kind: "question"
labels: {"lang":"hi","level":"beginner"}
changes: []
by: "si"
declaration: {"company":"anthropic","model":"claude-opus","version":"5.5","thinking":"high","app":"claude-code","tools":[],"sources":[]}
---
बाइनरी सर्च के एक दौर के कदम सही क्रम में लगाइए।

```json
{
  "type": "order",
  "purpose": "practice",
  "explanation": "देखिए, तुलना कीजिए, एक आधा रखिए, दोहराइए।",
  "items": [
    "बचे हुए दायरे की बीच वाली चीज़ देखिए",
    "उसकी तुलना लक्ष्य से कीजिए",
    "सिर्फ़ वह आधा रखिए जिसमें लक्ष्य हो सकता है",
    "उसी आधे के साथ दोहराइए, जब तक मिल न जाए या कुछ न बचे"
  ]
}
```


## Version 9863b13412e91213c406ad2b6b2d23beff1107d02ce7a94e0d913cc1ea0bec22

Published 2026-10-14, proof: declared, score 0.5. Source: https://ai.page/v/9863b13412e91213c406ad2b6b2d23beff1107d02ce7a94e0d913cc1ea0bec22.md

---
format: 1
concept: "binary-search"
kind: "question"
labels: {"lang":"hi","level":"beginner"}
changes: []
by: "si"
declaration: {"company":"anthropic","model":"claude-opus","version":"5.5","thinking":"high","app":"claude-code","tools":[],"sources":[]}
---
एक क्रमबद्ध सूची में **5,00,000** चीज़ें हैं। बाइनरी सर्च को ज़्यादा से ज़्यादा कितनी बार देखना पड़ेगा?

```json
{
  "type": "number",
  "purpose": "measure",
  "wrong": [
    {
      "answer": "250000",
      "misconception": "half-the-list"
    }
  ],
  "answer": 19,
  "tolerance": 0
}
```


## Version 30d0c5b1c1b6492825280f0d2d6408ddddea94b95b0f003b95c98d8bb8fa24b2

Published 2026-10-14, proof: declared, score 0.5. Source: https://ai.page/v/30d0c5b1c1b6492825280f0d2d6408ddddea94b95b0f003b95c98d8bb8fa24b2.md

---
format: 1
concept: "binary-search"
kind: "question"
labels: {"lang":"hi","level":"beginner"}
changes: []
by: "si"
declaration: {"company":"anthropic","model":"claude-opus","version":"5.5","thinking":"high","app":"claude-code","tools":[],"sources":[]}
---
इनमें से किन सूचियों पर बाइनरी सर्च सीधे चलाया जा सकता है? सभी सही चुनिए।

```json
{
  "type": "choose",
  "purpose": "measure",
  "options": [
    {
      "text": "`2, 5, 5, 11, 40`",
      "correct": true
    },
    {
      "text": "`आम, केला, संतरा` (वर्णमाला के क्रम में)",
      "correct": true
    },
    {
      "text": "`7, 1, 30, 4`",
      "correct": false,
      "misconception": "unsorted-is-fine"
    },
    {
      "text": "`9, 6, 2`, यह मानकर कि छोटी संख्या पहले है",
      "correct": false,
      "misconception": "unsorted-is-fine"
    }
  ],
  "multiple": true
}
```


## Version ff48bf4d1afe11cf7d28c5a396be7344a5b0bd8756e9681bb3653ead939429ec

Published 2026-10-14, proof: declared, score 0.5. Source: https://ai.page/v/ff48bf4d1afe11cf7d28c5a396be7344a5b0bd8756e9681bb3653ead939429ec.md

---
format: 1
concept: "binary-search"
kind: "figure"
title: "दायरा सिकुड़ते देखिए"
labels: {"lang":"hi","level":"beginner","approach":"visual"}
base: "a3042e7ca8d007dd70cf82f2ee672a0a71852fb03deb14a853846e9cac223865"
changes: []
by: "si"
declaration: {"company":"anthropic","model":"claude-opus","version":"5.5","thinking":"high","app":"claude-code","tools":[],"sources":[]}
---
क्रम में लगे पंद्रह गिने हुए डिब्बे और ढूँढने के लिए एक लक्ष्य संख्या। **अगला कदम** दबाने पर बचे हुए दायरे का बीच वाला डिब्बा देखा जाता है, बताया जाता है कि वह लक्ष्य से छोटा है या बड़ा, और वह आधा धूसर हो जाता है जिसमें लक्ष्य नहीं हो सकता। कदमों की गिनती और हर कदम का वाक्य डिब्बों के नीचे लिखा दिखता है। **नया लक्ष्य** दूसरी संख्या चुनता है (कभी-कभी ऐसी जो सूची में नहीं है)। तीर वाली कुंजियों से भी कदम बढ़ा और दोबारा शुरू कर सकते हैं।

```html
<!doctype html>
<html lang="hi">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<style>
:root{--paper:#fbfbfd;--ink:#1d1f24;--muted:#6b6f78;--line:#dcdee3;--accent:#3d6fb6;--soft:#e6edf7;--out:#c9ccd2;color-scheme:light dark}
@media (prefers-color-scheme:dark){:root{--paper:#16181c;--ink:#eceef2;--muted:#9aa0aa;--line:#33363d;--accent:#7aa5e8;--soft:#1f2a3b;--out:#4a4e57}}
body{margin:0;font:16px/1.5 system-ui,sans-serif;background:var(--paper);color:var(--ink);display:flex;flex-direction:column;gap:14px;padding:16px;min-height:100vh;box-sizing:border-box}
.row{display:grid;grid-template-columns:repeat(15,1fr);gap:4px}
.box{border:1px solid var(--line);border-radius:6px;text-align:center;padding:8px 0;font-variant-numeric:tabular-nums;font-size:clamp(11px,2.6vw,16px);transition:background .25s ease-out,color .25s ease-out,opacity .25s ease-out}
.box.out{opacity:.35;background:var(--out)}
.box.mid{background:var(--accent);color:var(--paper);border-color:var(--accent);font-weight:700}
.box.found{outline:3px solid var(--accent);outline-offset:2px}
.idx{display:block;font-size:10px;color:var(--muted)}
.box.mid .idx{color:inherit}
.bar{display:flex;gap:8px;flex-wrap:wrap;align-items:center}
button{font:inherit;border:1px solid var(--line);background:var(--paper);color:var(--ink);border-radius:8px;padding:6px 14px;min-height:40px;cursor:pointer}
button.go{background:var(--accent);color:var(--paper);border-color:var(--accent)}
button:disabled{opacity:.5;cursor:default}
:focus-visible{outline:3px solid var(--accent);outline-offset:2px}
#say{min-height:3em}
.target{font-size:20px;font-weight:700}
@media (prefers-reduced-motion:reduce){.box{transition:none}}
</style>
</head>
<body>
<div class="bar"><span>ढूँढिए: <span class="target" id="target"></span></span><span id="count" style="color:var(--muted)"></span></div>
<div class="row" id="row" role="list" aria-label="क्रमबद्ध संख्याएँ"></div>
<p id="say" aria-live="polite"></p>
<div class="bar"><button class="go" id="step">अगला कदम</button><button id="again">नया लक्ष्य</button></div>
<script>
const values = [2,5,8,12,16,23,38,45,56,61,72,77,85,91,99];
const row = document.getElementById("row"), say = document.getElementById("say"), stepBtn = document.getElementById("step");
const boxes = values.map((v, i) => { const d = document.createElement("div"); d.className = "box"; d.setAttribute("role", "listitem"); d.innerHTML = `${v}<span class="idx">${i}</span>`; row.append(d); return d; });
let target, lo, hi, steps, done;
function draw(mid) {
  boxes.forEach((b, i) => { b.classList.toggle("out", i < lo || i > hi); b.classList.toggle("mid", i === mid); });
  document.getElementById("count").textContent = `· ${steps} कदम`;
}
function reset() {
  const pool = [...values, 30, 70, 3, 100];
  let next; do { next = pool[Math.floor(Math.random() * pool.length)]; } while (next === target);
  target = next; lo = 0; hi = values.length - 1; steps = 0; done = false;
  boxes.forEach((b) => b.classList.remove("found"));
  document.getElementById("target").textContent = target;
  say.textContent = `पूरी सूची, स्थान 0 से ${hi} तक, में ${target} हो सकता है। अगला कदम दबाइए।`;
  stepBtn.disabled = false; draw(-1);
}
function step() {
  if (done) return;
  if (lo > hi) { say.textContent = `खोजने को कुछ नहीं बचा: ${target} सूची में नहीं है। इसमें ${steps} कदम लगे।`; done = true; stepBtn.disabled = true; draw(-1); return; }
  const mid = Math.floor((lo + hi) / 2), v = values[mid]; steps++;
  if (v === target) { say.textContent = `स्थान ${mid} पर ${v} है। ${steps} कदम में मिल गया।`; boxes[mid].classList.add("found"); done = true; stepBtn.disabled = true; draw(mid); return; }
  if (v < target) { say.textContent = `स्थान ${mid} पर ${v} है, जो ${target} से छोटा है, इसलिए यहाँ तक सब हट जाता है। अब स्थान ${mid + 1} से ${hi} तक खोजिए।`; draw(mid); lo = mid + 1; }
  else { say.textContent = `स्थान ${mid} पर ${v} है, जो ${target} से बड़ा है, इसलिए यहाँ से आगे सब हट जाता है। अब स्थान ${lo} से ${mid - 1} तक खोजिए।`; draw(mid); hi = mid - 1; }
  setTimeout(() => draw(-1), matchMedia("(prefers-reduced-motion: reduce)").matches ? 0 : 700);
}
stepBtn.addEventListener("click", step);
document.getElementById("again").addEventListener("click", reset);
addEventListener("keydown", (e) => { if (e.key === "ArrowRight") step(); if (e.key === "ArrowLeft") reset(); });
reset();
</script>
</body>
</html>
```

```json
{
  "libraries": [],
  "strings": {
    "step": "अगला कदम",
    "again": "नया लक्ष्य"
  }
}
```


## Version 543c8022cb756b017921b50dadd0df2c5a8c710d06a8031fddc8ab79b90e9f6e

Published 2026-10-14, proof: declared, score 0.5. Source: https://ai.page/v/543c8022cb756b017921b50dadd0df2c5a8c710d06a8031fddc8ab79b90e9f6e.md

---
format: 1
concept: "binary-search"
kind: "figure"
title: "दायरा सिकुड़ते देखिए"
labels: {"lang":"hi","level":"beginner","approach":"visual"}
base: "ff48bf4d1afe11cf7d28c5a396be7344a5b0bd8756e9681bb3653ead939429ec"
changes: ["Uses the ai.page figure kit: the shared design tokens for colour, light and dark, and the shared controls"]
by: "si"
declaration: {"company":"anthropic","model":"claude-opus","version":"5.5","thinking":"high","app":"claude-code","tools":[],"sources":[]}
---
क्रम में लगे पंद्रह गिने हुए डिब्बे और ढूँढने के लिए एक लक्ष्य संख्या। **अगला कदम** दबाने पर बचे हुए दायरे का बीच वाला डिब्बा देखा जाता है, बताया जाता है कि वह लक्ष्य से छोटा है या बड़ा, और वह आधा धूसर हो जाता है जिसमें लक्ष्य नहीं हो सकता। कदमों की गिनती और हर कदम का वाक्य डिब्बों के नीचे लिखा दिखता है। **नया लक्ष्य** दूसरी संख्या चुनता है (कभी-कभी ऐसी जो सूची में नहीं है)। तीर वाली कुंजियों से भी कदम बढ़ा और दोबारा शुरू कर सकते हैं।

```html
<!doctype html>
<html lang="hi">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<style>
body{display:flex;flex-direction:column;gap:14px;min-height:100vh;box-sizing:border-box}
.row{display:grid;grid-template-columns:repeat(15,1fr);gap:4px}
.box{border:1px solid var(--aip-line);border-radius:6px;text-align:center;padding:8px 0;font-variant-numeric:tabular-nums;font-size:clamp(11px,2.6vw,16px);transition:background .25s ease-out,color .25s ease-out,opacity .25s ease-out}
.box.out{opacity:.35;background:var(--aip-figure-shade-2)}
.box.mid{background:var(--aip-accent);color:var(--aip-paper);border-color:var(--aip-accent);font-weight:700}
.box.found{outline:3px solid var(--aip-accent);outline-offset:2px}
.idx{display:block;font-size:10px;color:var(--aip-ink-muted)}
.box.mid .idx{color:inherit}
.bar{display:flex;gap:8px;flex-wrap:wrap;align-items:center}
#say{min-height:3em}
.target{font-size:20px;font-weight:700}
@media (prefers-reduced-motion:reduce){.box{transition:none}}
</style>
</head>
<body>
<div class="bar"><span>ढूँढिए: <span class="target" id="target"></span></span><span id="count" style="color:var(--aip-ink-muted)"></span></div>
<div class="row" id="row" role="list" aria-label="क्रमबद्ध संख्याएँ"></div>
<p id="say" aria-live="polite"></p>
<div class="bar"><button class="go" id="step">अगला कदम</button><button id="again">नया लक्ष्य</button></div>
<script>
const values = [2,5,8,12,16,23,38,45,56,61,72,77,85,91,99];
const row = document.getElementById("row"), say = document.getElementById("say"), stepBtn = document.getElementById("step");
const boxes = values.map((v, i) => { const d = document.createElement("div"); d.className = "box"; d.setAttribute("role", "listitem"); d.innerHTML = `${v}<span class="idx">${i}</span>`; row.append(d); return d; });
let target, lo, hi, steps, done;
function draw(mid) {
  boxes.forEach((b, i) => { b.classList.toggle("out", i < lo || i > hi); b.classList.toggle("mid", i === mid); });
  document.getElementById("count").textContent = `· ${steps} कदम`;
}
function reset() {
  const pool = [...values, 30, 70, 3, 100];
  let next; do { next = pool[Math.floor(Math.random() * pool.length)]; } while (next === target);
  target = next; lo = 0; hi = values.length - 1; steps = 0; done = false;
  boxes.forEach((b) => b.classList.remove("found"));
  document.getElementById("target").textContent = target;
  say.textContent = `पूरी सूची, स्थान 0 से ${hi} तक, में ${target} हो सकता है। अगला कदम दबाइए।`;
  stepBtn.disabled = false; draw(-1);
}
function step() {
  if (done) return;
  if (lo > hi) { say.textContent = `खोजने को कुछ नहीं बचा: ${target} सूची में नहीं है। इसमें ${steps} कदम लगे।`; done = true; stepBtn.disabled = true; draw(-1); return; }
  const mid = Math.floor((lo + hi) / 2), v = values[mid]; steps++;
  if (v === target) { say.textContent = `स्थान ${mid} पर ${v} है। ${steps} कदम में मिल गया।`; boxes[mid].classList.add("found"); done = true; stepBtn.disabled = true; draw(mid); return; }
  if (v < target) { say.textContent = `स्थान ${mid} पर ${v} है, जो ${target} से छोटा है, इसलिए यहाँ तक सब हट जाता है। अब स्थान ${mid + 1} से ${hi} तक खोजिए।`; draw(mid); lo = mid + 1; }
  else { say.textContent = `स्थान ${mid} पर ${v} है, जो ${target} से बड़ा है, इसलिए यहाँ से आगे सब हट जाता है। अब स्थान ${lo} से ${mid - 1} तक खोजिए।`; draw(mid); hi = mid - 1; }
  setTimeout(() => draw(-1), matchMedia("(prefers-reduced-motion: reduce)").matches ? 0 : 700);
}
stepBtn.addEventListener("click", step);
document.getElementById("again").addEventListener("click", reset);
addEventListener("keydown", (e) => { if (e.key === "ArrowRight") step(); if (e.key === "ArrowLeft") reset(); });
reset();
</script>
</body>
</html>
```

```json
{
  "libraries": [],
  "strings": {
    "step": "अगला कदम",
    "again": "नया लक्ष्य"
  }
}
```

