# 01 — Math-Based Programming Fundamentals (programming-এর জন্য অঙ্ক)

> এটা পুরো data structures journey-র **শূন্যতম অধ্যায়** — classic data structure (array, linked list, tree...) ধরার আগে যে গণিত-চিন্তাটা দরকার, সেটাই এখানে beginner থেকে advanced পর্যন্ত সাজানো। 12টি level ও 150টি সমস্যা-নোট; ভিত্তি থেকে ঐচ্ছিক advanced অনুশীলনের পথ — সংখ্যার সাথে খেলা থেকে শুরু করে Codeforces-ধাঁচের hard pattern পর্যন্ত।

## এই section এ কী আছে?

প্রোগ্রামিং শেখার শুরুতে অনেকেই সরাসরি data structure-এ ঝাঁপ দেয়, আর তারপর আটকে যায় — কারণ ভিতের অঙ্কটা নড়বড়ে। এই section সেই ফাঁকটা ভরে। এখানে তুমি শিখবে:

- একটা সংখ্যাকে **ভেঙে দেখা** — digit, bit, factor, remainder
- **গোনার শিল্প** — কয়টা উপায়, কয়টা জোড়া, কয়টা subset
- **চিন্তাকে অপ্টিমাইজ করা** — brute force থেকে চালাক সমাধানে নামার ছাঁচ গুলো
- আর সবচেয়ে দামি জিনিস: একটা নতুন problem দেখে **"এটা আসলে কোন চেনা জিনিস"** — সেই চোখ

এটা কোনো বিচ্ছিন্ন formula-র তালিকা নয়; প্রতিটা level আগেরটার কাঁধে দাঁড়ায়, আর প্রতিটা problem আগের কোনো problem-এর idea ধার করে (সেটাই "Inherits from" chain)।

## এই section কাদের জন্য?

- **মরচে-পড়া beginner** — basic একসময় জানতে, এখন আবছা। এখানে একদম গোড়া (Level 0) থেকে ধাপে ধাপে উঠবে, প্রতিটি level-এর prerequisite দেখে।
- **Interview-প্রার্থী** — Amazon/Google-ধাঁচের interview-এর জন্য যে অঙ্ক-ভিতটা ধরে নেওয়া হয়, সেটা এখানে সরাসরি practice হয়।
- **CP-কৌতূহলী** — competitive programming-এ ঢুকতে চাইলে Level 09-11 সেই দরজা খুলে দেয়।

কোনো আগের অভিজ্ঞতা লাগে না — শুধু Python-এর basic syntax (variable, loop, `if/else`, function) আর দিনে 2-3 ঘণ্টা সময়। বাকিটা পথেই তৈরি হবে।

## কেন math thinking জরুরি?

**Problem-solving-এ:** বেশিরভাগ কঠিন problem আসলে কয়েকটা সহজ অঙ্ক-idea-র ছদ্মবেশ। `range sum বারবার লাগছে` → prefix sum; `min of max চাই` → binary search on answer। এই অনুবাদটা যত দ্রুত করতে পারবে, তত কম সময়ে সমাধানে পৌঁছাবে। একটা ছোট উদাহরণ:

```text
প্রশ্ন: একটা array-তে বহুবার [l, r] range-এর যোগফল জিজ্ঞেস করা হবে।
সরল চিন্তা : প্রতি প্রশ্নে l থেকে r ঘুরে যোগ করি → প্রতি প্রশ্নে O(n)
অঙ্ক-চিন্তা : একবার prefix[] বানিয়ে রাখি → প্রতি প্রশ্ন O(1): prefix[r] − prefix[l-1]
```

পার্থক্যটা algorithm-এর নয়, **চিন্তার** — "কোন হিসাবটা বারবার হচ্ছে, সেটা আগে বানিয়ে রাখি"। এই ধরনের মোচড়ই পুরো section জুড়ে শেখানো হয়।

**Interview-এ:** entry থেকে FAANG-ধাঁচের interview — সব জায়গায় parity, gcd, modular arithmetic, prefix sum, two pointers, binary search-এর সরাসরি প্রয়োগ আসে। এগুলো "জানা" আর "চোখ বন্ধ করে bug-free লেখা"-র মধ্যে যে ফারাক, সেটাই এই section ঘোচায়।

**পরের topic-গুলোতে:** array, hashing, recursion, DP — সবকিছুর নিচে এই অঙ্ক-চিন্তা কাজ করে। এখানে শক্ত ভিত গড়লে বাকি 12টা data structure topic অনেক হালকা লাগবে।

## 12টা level

প্রতিটা level একটা folder; প্রথমে ভিত্তি শেখো, তারপর প্রয়োজন অনুযায়ী শাখা বেছে নাও (ID 001–150 হলো নোটের পরিচয়)।

- **00 — [Absolute Basics](00-absolute-basics/README.md)** — সংখ্যাকে digit-এ ভাঙা, `%` ও `//`, parity, number building — পুরো journey-র ভিত।
- **01 — [Divisibility, Prime, GCD, LCM](01-divisibility-prime-gcd-lcm/README.md)** — ভাগ-নিঃশেষ, prime check, Sieve, Euclid-এর GCD, LCM আর divisor গোনা।
- **02 — [Modular Arithmetic](02-modular-arithmetic/README.md)** — ঘড়ির অঙ্ক: mod-এর নিয়ম, fast power, modular inverse, Fermat-এর little theorem।
- **03 — [Counting & Combinatorics](03-counting-combinatorics/README.md)** — গোনার শিল্প: nPr/nCr, Pascal triangle, stars-and-bars, inclusion-exclusion, Catalan।
- **04 — [Bit Manipulation](04-bit-manipulation/README.md)** — সংখ্যাকে 0/1-এর সারি হিসেবে দেখা: mask দিয়ে check/set/clear, XOR-এর জাদু, subset enumeration।
- **05 — [Prefix, Difference, Contribution](05-prefix-difference-contribution/README.md)** — বারবার range-হিসাবকে precompute করে O(1)-এ আনা; difference array, contribution technique।
- **06 — [Two Pointers & Sliding Window Math](06-two-pointers-sliding-window-math/README.md)** — sorted array-তে জোড়া খোঁজা, window দিয়ে subarray-র হিসাব O(n)-এ।
- **07 — [Binary Search on Answer](07-binary-search-on-answer/README.md)** — উত্তরের উপরেই binary search: monotonic yes/no খুঁজে min/max বের করা।
- **08 — [Greedy Math Tricks](08-greedy-math-tricks/README.md)** — locally সেরা চাল, আর সবচেয়ে জরুরি — exchange argument দিয়ে কেন কাজ করে তার প্রমাণ।
- **09 — [Geometry & Coordinate Math](09-geometry-coordinate-math/README.md)** — বিন্দু-রেখা-ত্রিভুজ, cross product, orientation, convex hull, Pick's theorem।
- **10 — [Advanced Number Theory](10-advanced-number-theory/README.md)** — extended Euclid, CRT, matrix exponentiation, Miller-Rabin, sieve variants।
- **11 — [Hard Mixed CP Patterns](11-hard-mixed-cp-patterns/README.md)** — সব হাতিয়ার মিশিয়ে: meet in the middle, game theory, Grundy, Burnside, constructive।

## level গুলো কীভাবে একে অন্যের উপর দাঁড়ায়

এই 12টা level বিচ্ছিন্ন নয় — একটা সিঁড়ি। নিচের ছবিটা দেখাচ্ছে কোন level কার উপর ভর করে:

```text
00 basics ──▶ 01 number theory ──▶ 02 modular ──▶ 03 counting ─┐
   │                                                            ▼
   ├──▶ 04 bits ───────────────────────────────────────▶ 11 hard mixed
   │                                                       ▲  ▲  ▲
   └──▶ 05 prefix ──▶ 06 two pointers                      │  │  │
              │                                            │  │  │
              └──────▶ 07 binary search ──▶ 08 greedy ─────┘  │  │
                                            09 geometry ──────┘  │
                                            10 adv. number theory ┘
```

মূল কথা: 00-03 হলো সংখ্যার ভিত, 04-08 হলো array/optimization-এর হাতিয়ার, আর 09-11 হলো advanced/CP — যেখানে আগের সব idea মিশে যায়। তবে সব level শেষ না করে data structure শুরু করা যাবে না—এমন বাধা নেই। Level 00–01-এর মৌলিক অংশের পর array শুরু করো; advanced অংশ প্রয়োজনে পরে পড়ো।

## একটা level কীভাবে use করবে?

প্রতিটা level-এর ভেতরে একই কাঠামো। এই ক্রমে এগোলে শেখাটা সবচেয়ে ভালো গাঁথে:

1. **`README.md`** — level-এর map: কী শিখবে, কেন দরকার, prerequisites, problem list, common mistakes।
2. **`concept-notes.md`** — মূল idea গুলো নিজের ভাষায়, ছোট হাতে-চালানো উদাহরণসহ। এটাই হৃদপিণ্ড।
3. **`visualization-ideas.md`** — কঠিন idea গুলো ছবি/ASCII diagram দিয়ে দেখা; চোখে দেখলে দ্রুত গাঁথে।
4. **`problems/`** — সেই level-এর problem note গুলো, easy → hard সাজানো। প্রতিটা note ২০-section template মেনে: problem বোঝা → brute force → কেন slow → optimized intuition → thinking tweak → dry run → Python → complexity → common mistakes।
5. **`source-map.md`** — কোন idea কোথা থেকে নেওয়া (legal attribution)।

নিয়ম সহজ: আগে `concept-notes.md` পড়ো, দরকারে `visualization-ideas.md` দেখো, তারপর `problems/`-এ গিয়ে নিজে হাতে solve করো। **পড়া ≠ শেখা** — code না লিখলে গাঁথবে না।

## কোনটা আগে, কোনটা পরে (৪ মাসের interview plan)

সব level সমান জরুরি নয় — বিশেষত হাতে যদি মাত্র ৪ মাস থাকে:

- **Level 00–08 — ভিত্তি ও অনুশীলনের কৌশল।** parity, gcd, mod, bit, prefix sum, two pointers, binary search, greedy — এই idea গুলো সরাসরি Amazon/Google-ধাঁচের interview-এ আসে। আগে এগুলো শক্ত করো।
- **Level 09-11 — মূলত CP/optional।** geometry, advanced number theory, hard mixed pattern — competitive programming-এ দারুণ, কিন্তু ৪ মাসের interview timeline-এ পরে রাখা যায়। data structure topic (02-13) শেষ করে ফিরে এসো।

> পুরো সময়সূচি: [../STUDY-PLAN.md](../STUDY-PLAN.md) · বড় ছবি ও নির্ভরতা: [../roadmap.md](../roadmap.md)।

## পরের ধাপ

- 📋 ১৫০টা problem-এর পূর্ণ তালিকা — [roadmap.md](roadmap.md)
- 🧠 এই section যে চিন্তার মোচড় শেখায় — [thinking-patterns.md](thinking-patterns.md)
- 🎨 সম্পূর্ণ চিত্র ও হাতে-কলমে উদাহরণ — [visualization-ideas.md](visualization-ideas.md)
- ✍️ নতুন note লেখার ছাঁচ — [../templates/math-problem-note-template.md](../templates/math-problem-note-template.md)
- 🗺️ এই section-এর সব source — [source-map.md](source-map.md)

শুরু করো → **[Level 00 — Absolute Basics](00-absolute-basics/README.md)** → [001 Even or Odd](00-absolute-basics/problems/001-even-or-odd.md)। 💪
