# Level 0 — Absolute Basics (সংখ্যার সাথে খেলা)

[ধারণা](concept-notes.md) · [চিত্র ও উদাহরণ](visualization-ideas.md) · [সমস্যার তালিকা](problems/README.md) · [মূল উৎস](source-map.md) · [পুরো শেখার মানচিত্র](../roadmap.md)

> এই level টা পুরো math-based programming journey-র ভিত। এখানে আমরা শিখব — একটা সংখ্যাকে কীভাবে ভেঙে দেখতে হয়, কীভাবে digit ধরে ধরে কাজ করতে হয়, আর `%` এবং `//` — এই দুইটা operator দিয়ে কত কিছু করা যায়।

## এই level এ কী শিখবে?

একটা সংখ্যা দেখলে আমরা সাধারণত ভাবি "এটা তো 1234" — একটাই জিনিস। কিন্তু programmer-এর চোখে 1234 মানে চারটা digit-এর একটা সারি: `1, 2, 3, 4`। এই level শেষ করার পর তুমি যেকোনো সংখ্যাকে digit-এ ভেঙে ফেলতে পারবে, digit গুলো দিয়ে নতুন সংখ্যা বানাতে পারবে, আর `%` (modulo) ও `//` (integer division) — এই দুই power tool কে নিজের হাতের মুঠোয় আনতে পারবে।

মূল idea গুলো:

- **Digit extraction** — `n % 10` দিয়ে last digit বের করা, `n //= 10` দিয়ে সেটা ফেলে দেওয়া
- **Parity** — even/odd চেনা, last bit-এর সাথে এর সম্পর্ক
- **Number building** — `rev = rev * 10 + d` pattern দিয়ে digit থেকে সংখ্যা বানানো
- **Palindrome, Armstrong, digital root** — digit extraction-এর উপর দাঁড়ানো classic সমস্যা
- **Pattern printing** — nested loop মানে আসলে একটা grid, এই চোখটা তৈরি করা

## কেন এই level দরকার?

**Competitive programming (CP) এ:** Codeforces-এর Div 3/4 contest-এর প্রথম problem গুলোর অনেকটাই digit manipulation আর parity-র খেলা। CF 4A (Watermelon) এর মতো problem এ even/odd বোঝাটাই পুরো solution। Digit DP-র মতো advanced topic-ও শেষ পর্যন্ত এই `n % 10, n //= 10` loop-এরই বড় ভাই।

**Interview এ:** Reverse Integer, Palindrome Number — এগুলো common interview pattern, প্রায় সব entry-level interview prep list-এ থাকে। Interviewer আসলে দেখতে চায় তুমি loop-এর ভেতরে state কীভাবে handle করো।

**পরের level গুলোতে:** Level 1-এর divisibility, Level 2-এর modular arithmetic — সবকিছু `%` operator-এর গভীর ব্যবহার। এখানে `%` এর সাথে comfortable না হলে পরে কষ্ট হবে।

## Prerequisites

- Python-এর basic syntax: variable, `if/else`, `while` loop, `for` loop, `print()`
- Integer আর string-এর পার্থক্য জানা
- আর কিছুই না — এটাই শুরুর জায়গা। আগের কোনো level নেই।

## Learning goals (checklist)

এই level শেষে নিজেকে জিজ্ঞেস করো — নিচের প্রতিটায় হ্যাঁ বলতে পারো কি না:

- [ ] `n % 10` আর `n // 10` — কোনটা কী দেয়, চোখ বন্ধ করে বলতে পারি
- [ ] যেকোনো সংখ্যার digit গুলো loop দিয়ে এক এক করে বের করতে পারি (string conversion ছাড়া)
- [ ] Even/odd check `n % 2` দিয়ে করতে পারি, আর জানি last bit-ও একই কথা বলে
- [ ] Digit থেকে নতুন সংখ্যা বানাতে পারি (`rev = rev * 10 + d`)
- [ ] Palindrome number চেক করতে পারি reverse করে
- [ ] Armstrong number-এর definition বুঝি আর code করতে পারি
- [ ] Digital root-এর mod 9 shortcut কেন কাজ করে — pattern টা ব্যাখ্যা করতে পারি
- [ ] Nested loop দিয়ে সহজ number pattern print করতে পারি, আর জানি কোন loop row আর কোনটা column চালায়
- [ ] জানি Python-এ int unbounded — তাই overflow নিয়ে এখানে চিন্তা নেই (কিন্তু C++/Java-তে আছে)

## Problem list

মোট 10টা problem। সবগুলোই Easy — এই level টা গতি আর আত্মবিশ্বাস তৈরির জায়গা।

### Easy

| # | Problem | Pattern | Source |
| --- | --- | --- | --- |
| 001 | [Even or Odd](problems/001-even-or-odd.md) | parity / last bit | Classic exercise (related: CF 4A Watermelon — <https://codeforces.com/problemset/problem/4/A>) |
| 002 | [Sum of Digits](problems/002-sum-of-digits.md) | digit extraction | Classic exercise |
| 003 | [Count Digits](problems/003-count-digits.md) | digit extraction | Classic exercise |
| 004 | [Reverse Number](problems/004-reverse-number.md) | number building | Classic (related: LeetCode Reverse Integer — <https://leetcode.com/problems/reverse-integer/>) |
| 005 | [Palindrome Number](problems/005-palindrome-number.md) | reverse + compare | LeetCode — <https://leetcode.com/problems/palindrome-number/> |
| 006 | [Armstrong Number](problems/006-armstrong-number.md) | digit power sum | Classic exercise |
| 007 | [Digital Root](problems/007-digital-root.md) | repeated digit sum, mod 9 | Related: LeetCode Add Digits — <https://leetcode.com/problems/add-digits/> |
| 008 | [Find Last Digit](problems/008-find-last-digit.md) | mod 10 | Classic exercise |
| 009 | [Power of 10 Check](problems/009-power-of-10-check.md) | repeated division | Classic exercise |
| 010 | [Number Pattern Printing](problems/010-number-pattern-printing.md) | nested loops | Classic exercise (HackerRank-style warmup) |

পুরো tracker table (status সহ) আছে [problems/README.md](problems/README.md)-তে।

## Recommended order

1. **001 → 008** — parity আর `mod 10` দিয়ে শুরু করো; এ দুটো মিলে `%` এর প্রথম পরিচয়
2. **002 → 003** — digit extraction loop-টা আয়ত্ত করো (sum আর count — একই loop, ভিন্ন কাজ)
3. **004 → 005** — number building শেখো, তারপর সেটা দিয়েই palindrome check
4. **006 → 007** — digit extraction-এর variation: power sum আর repeated sum
5. **009** — division loop-এর আরেক রূপ
6. **010** — সবশেষে nested loop দিয়ে grid-চিন্তা practice

## Common mistakes (সাধারণ ভুল)

1. **`%` আর `//` গুলিয়ে ফেলা** — `17 % 10 = 7` (remainder), `17 // 10 = 1` (quotient)। মনে রাখো: `%` দেয় "যা বাকি থাকে", `//` দেয় "কতবার ঢুকে"।
2. **Digit extraction loop-এ `n //= 10` ভুলে যাওয়া** — তাহলে `while n > 0` কখনো শেষ হবে না, infinite loop!
3. **`n = 0` edge case ভুলে যাওয়া** — `while n > 0` loop 0-এর জন্য একবারও চলে না, কিন্তু 0-এর digit count 1। আলাদা করে handle করতে হয়।
4. **Negative number ভুলে যাওয়া** — `-121` কি palindrome? না (minus sign উল্টালে শেষে চলে যায়)। আগে `abs()` নেবে নাকি negative-কে সরাসরি reject করবে — problem ভেদে ঠিক করো।
5. **Reverse-এ original number হারিয়ে ফেলা** — reverse করার সময় `n` ভেঙে যায়; compare করার আগে original-এর একটা copy রেখো।
6. **Pattern printing-এ row/column গুলিয়ে ফেলা** — বাইরের loop = row (কয়টা লাইন), ভেতরের loop = column (এক লাইনে কয়টা জিনিস)। উল্টে গেলে pattern উল্টে যাবে।
7. **String দিয়ে সব করে ফেলা** — `str(n)[::-1]` কাজ করে ঠিকই, কিন্তু এই level-এর উদ্দেশ্য arithmetic দিয়ে শেখা। দুটোই জানো, কিন্তু math version টা আগে আয়ত্ত করো।

## পরের level এ যাওয়ার আগে checklist

- [ ] 10টা problem-ই অন্তত একবার নিজে solve করেছি (editorial না দেখে)
- [ ] Digit extraction loop টা মুখস্থ না, বুঝে লিখতে পারি — কেউ জিজ্ঞেস করলে dry run করে দেখাতে পারি
- [ ] `rev = rev * 10 + d` — এই লাইনটা কেন কাজ করে, কাউকে বুঝিয়ে বলতে পারি
- [ ] Digital root-এর mod 9 pattern টেবিল নিজে হাতে বানিয়ে দেখেছি
- [ ] অন্তত একটা pattern printing problem এ ভেতরের loop-এর সীমা row number-এর উপর depend করেছে (যেমন triangle)
- [ ] Common mistakes list-এর প্রতিটা ভুল অন্তত একবার নিজে করে ধরা খেয়েছি (সিরিয়াসলি — ভুল করাটাই শেখা!)

সব টিক দিতে পারলে — চলো [Level 1: Divisibility, Prime, GCD, LCM](../01-divisibility-prime-gcd-lcm/README.md)-এ।

## Source map

এই folder-এর প্রতিটা concept আর problem কোথা থেকে এসেছে, কোন link official, আর কোনটা original লেখা — সব হিসাব আছে [source-map.md](source-map.md)-তে।
