NNN — Problem Title¶
উপরের H1-এ problem-এর number আর নাম বসাও (file-এর নামের সাথে মিল রেখে), যেমন:
# 005 — Palindrome Number। তারপর এই হিন্ট লাইনটা মুছে দাও।
Problem link ও উৎস
Attribution-এর জন্য এই block। শুধু official link এখানে রাখো — problem statement কখনো copy কোরো না।
- Original source: মূল উৎসের নাম (যেমন: Classic exercise / নিজের বানানো / বই-এর নাম)
- Platform: কোন judge বা site + link (যেমন: LeetCode — https://leetcode.com/problems/...; না থাকলে
—) - Topic: কোন math topic (যেমন: parity, place value, GCD, modular arithmetic)
- Difficulty: Easy / Medium / Hard (নিজের ধারণা মতো)
- Pattern: এক লাইনে pattern-এর নাম (যেমন: digit extraction)
- Basic idea inherited from: কোন আগের problem/idea থেকে এসেছে (যেমন: 002 — Sum of Digits; একদম নতুন হলে
—)
প্রশ্ন ও উদাহরণ¶
সহজ করে প্রশ্ন¶
Problem-টা একদম সহজ বাংলায়, নিজের ভাষায় বুঝিয়ে লেখো — যেন একজন বন্ধুকে বোঝাচ্ছ। Original statement copy কোরো না, নিজের মতো করে বলো।
Input ও output¶
অন্তত একটা concrete input আর তার expected output দেখাও। কোনো edge case থাকলে (যেমন: 0, negative, খুব বড় সংখ্যা) সেটাও আলাদা করে দাও।
চেনা উদাহরণে বোঝা¶
বাস্তব জীবনের একটা উদাহরণ দিয়ে বোঝাও যাতে intuition তৈরি হয় (যেমন: জোড়ায় জোড়ায় বাঁধা যায় = even, একটা বাকি থাকে = odd)।
ভিত্তির ধারণা¶
আগের কোন ধারণাটি লাগবে¶
এই problem কোন আগের বা সহজ idea-র উপর দাঁড়িয়ে আছে? Source block-এর "Basic idea inherited from" এখানে একটু বিস্তারিত বুঝিয়ে বলো।
ভেতরের অঙ্ক¶
এর পেছনের core math concept-টা কী, এক-দুই লাইনে লেখো (যেমন: parity, place value, GCD, modular arithmetic)।
ধাপে ধাপে সমাধান¶
প্রথম সরল উপায়¶
সবচেয়ে সহজ, সরাসরি যে সমাধান প্রথমে মাথায় আসে সেটা লেখো — efficient না হলেও চলবে। আগে "কোনোভাবে হলেও হয়" এই version-টা লিখে ফেলো।
কোথায় বেশি কাজ হতে পারে¶
ওই brute force কেন ধীর হতে পারে বুঝিয়ে বলো — বড় input-এ কত সময় লাগবে, কোথায় একই কাজ বারবার হচ্ছে, বা কোথায় nested loop লাগছে।
আরও ভালোভাবে ভাবা¶
কীভাবে আরও ভালো বা দ্রুত করা যায়? মূল insight বা observation-টা লেখো যেটা সমাধানটা সহজ করে দেয়।
ভাবনার পরিবর্তন¶
ছোট্ট কোন চিন্তার মোচড় brute force থেকে optimal-এ নিয়ে গেল? এক লাইনের সেই "aha" মুহূর্তটা ধরো — এটাই note-এর প্রাণ।
ছবিতে বোঝা¶
ছবি এঁকে বোঝাও — number line, box, বা table। নিচের fence-এ ASCII diagram আঁকো (নিজের example দিয়ে replace করো)।
ছোট input-এ ধাপে ধাপে¶
একটা ছোট input নিয়ে হাতে হাতে চালাও — প্রতিটা step-এ variable-এর value কীভাবে বদলায় লেখো। নিচের মতো step list বানাও:
- শুরুর অবস্থা: কোন variable-এ কী value আছে
- Step 1: কী হলো, কোন value বদলালো
- Step 2: কী হলো
- শেষ অবস্থা: final answer কীভাবে এল
কোড ও ব্যাখ্যা¶
Python¶
পরিষ্কার, পড়ার মতো Python code লেখো। Comment কম রাখো, variable name অর্থপূর্ণ রাখো। নিচের fence-এ লেখো:
কোডের প্রতিটি অংশ¶
Code-এর প্রতিটা গুরুত্বপূর্ণ লাইন বাংলায় বুঝিয়ে বলো — কেন ওই লাইন আছে আর কী করছে।
Output মিলিয়ে দেখা¶
Section 6-এর example দিয়ে code চালালে step by step কী output আসবে দেখাও — যেন কেউ code না চালিয়েও বুঝতে পারে।
খরচ ও সাধারণ ভুল¶
সময়¶
Big-O-তে time complexity লেখো আর এক লাইনে কেন সেটা বুঝিয়ে দাও (যেমন: O(log n) — প্রতি step-এ সংখ্যা 10 দিয়ে ভাগ হচ্ছে)।
অতিরিক্ত জায়গা¶
কত extra memory লাগছে? O(1)? O(n)? এক লাইনে কারণসহ লেখো।
যে ভুলগুলো এড়াতে হবে¶
এই ধরনের problem-এ যেসব ভুল প্রায়ই হয় bullet করে লেখো (off-by-one, edge case ভুলে যাওয়া, overflow না ভাবা, ইত্যাদি):
- এখানে প্রথম common ভুলটা লেখো
- এখানে দ্বিতীয়টা লেখো
শেখা ও পরের অনুশীলন¶
এই ধারণার পরের অনুশীলন¶
এই idea ব্যবহার করে আর কোন কঠিন problem solve করা যায়? নাম + official link দাও (statement copy কোরো না)।
কৌশলটি মনে রাখুন¶
এই problem থেকে যে reusable pattern শিখলে সেটা এক লাইনে নাম দিয়ে লেখো — পরে একই ধরনের problem-এ দ্রুত মনে পড়বে।
নিজেকে যাচাই করুন¶
"ভবিষ্যতের আমাকে এক-দুই লাইনে কী বলব" — মূল insight কী, আর কোন signal দেখলে এই pattern মনে পড়বে, সেটা লেখো।
মনে রাখার নিয়ম (legal): সব নিজের ভাষায় লেখো; problem statement copy কোরো না; official link শুধু attribution-এর জন্য রাখো; "asked by Google/Amazon" এমন দাবি কোরো না — বরং "Google-style pattern" / "common interview pattern" লেখো।