Level 0 — Absolute Basics (সংখ্যার সাথে খেলা)¶
এই 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 + dpattern দিয়ে 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,whileloop,forloop,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 | parity / last bit | Classic exercise (related: CF 4A Watermelon — https://codeforces.com/problemset/problem/4/A) |
| 002 | Sum of Digits | digit extraction | Classic exercise |
| 003 | Count Digits | digit extraction | Classic exercise |
| 004 | Reverse Number | number building | Classic (related: LeetCode Reverse Integer — https://leetcode.com/problems/reverse-integer/) |
| 005 | Palindrome Number | reverse + compare | LeetCode — https://leetcode.com/problems/palindrome-number/ |
| 006 | Armstrong Number | digit power sum | Classic exercise |
| 007 | Digital Root | repeated digit sum, mod 9 | Related: LeetCode Add Digits — https://leetcode.com/problems/add-digits/ |
| 008 | Find Last Digit | mod 10 | Classic exercise |
| 009 | Power of 10 Check | repeated division | Classic exercise |
| 010 | Number Pattern Printing | nested loops | Classic exercise (HackerRank-style warmup) |
পুরো tracker table (status সহ) আছে problems/README.md-তে।
Recommended order¶
- 001 → 008 — parity আর
mod 10দিয়ে শুরু করো; এ দুটো মিলে%এর প্রথম পরিচয় - 002 → 003 — digit extraction loop-টা আয়ত্ত করো (sum আর count — একই loop, ভিন্ন কাজ)
- 004 → 005 — number building শেখো, তারপর সেটা দিয়েই palindrome check
- 006 → 007 — digit extraction-এর variation: power sum আর repeated sum
- 009 — division loop-এর আরেক রূপ
- 010 — সবশেষে nested loop দিয়ে grid-চিন্তা practice
Common mistakes (সাধারণ ভুল)¶
%আর//গুলিয়ে ফেলা —17 % 10 = 7(remainder),17 // 10 = 1(quotient)। মনে রাখো:%দেয় "যা বাকি থাকে",//দেয় "কতবার ঢুকে"।- Digit extraction loop-এ
n //= 10ভুলে যাওয়া — তাহলেwhile n > 0কখনো শেষ হবে না, infinite loop! n = 0edge case ভুলে যাওয়া —while n > 0loop 0-এর জন্য একবারও চলে না, কিন্তু 0-এর digit count 1। আলাদা করে handle করতে হয়।- Negative number ভুলে যাওয়া —
-121কি palindrome? না (minus sign উল্টালে শেষে চলে যায়)। আগেabs()নেবে নাকি negative-কে সরাসরি reject করবে — problem ভেদে ঠিক করো। - Reverse-এ original number হারিয়ে ফেলা — reverse করার সময়
nভেঙে যায়; compare করার আগে original-এর একটা copy রেখো। - Pattern printing-এ row/column গুলিয়ে ফেলা — বাইরের loop = row (কয়টা লাইন), ভেতরের loop = column (এক লাইনে কয়টা জিনিস)। উল্টে গেলে pattern উল্টে যাবে।
- 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-এ।
Source map¶
এই folder-এর প্রতিটা concept আর problem কোথা থেকে এসেছে, কোন link official, আর কোনটা original লেখা — সব হিসাব আছে source-map.md-তে।