Skip to content

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 extractionn % 10 দিয়ে last digit বের করা, n //= 10 দিয়ে সেটা ফেলে দেওয়া
  • Parity — even/odd চেনা, last bit-এর সাথে এর সম্পর্ক
  • Number buildingrev = 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 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-তে।

  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-এ।

Source map

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