# Guided challenge — একটি section একসঙ্গে প্রয়োগ করুন

ছোট problem-এ একটি pattern চিনেছেন; এবার একই কাজের বিভিন্ন অংশে কয়েকটি pattern একসঙ্গে ব্যবহার করুন। প্রতিটি challenge-এ statement, input/output, prerequisites, ছোট example, milestone, hint, reference solution ও unit test আছে।

**একটি challenge পুরো chapter-এর সব আলাদা problem-এর বিকল্প নয়।** Coverage table দেখে কোন ধারণা ব্যবহার করেছেন এবং কোন variation এখনও বাকি তা মিলিয়ে নিন। Math-এর challenge-এ ১২টি level-এর প্রতিনিধিত্বকারী ১২টি stage আছে; প্রতিটি level-এর সব theorem বা problem সেখানে চাপিয়ে দেওয়া হয়নি।

## কোথা থেকে শুরু করবেন

1. [সব problem-এর map](../practice-map.md) খুলে section-এর আগে পড়ার topics দেখুন।
2. সেই section-এর **আগে করতেই হবে** সমস্যাগুলোতে নিজে চেষ্টা করুন।
3. নিচের challenge-এ একবারে একটি milestone লিখুন; পুরো solution একসঙ্গে দেখে শুরু করবেন না।
4. Worked example হাতে মেলান, তারপর unit tests চালান। ভুল হলে failing test-এর সবচেয়ে ছোট input নিয়ে ফিরে আসুন।
5. শেষে reference না দেখে invariant, complexity ও edge case বলুন। নিজের নতুন test যোগ করুন।

## ১৪টি section challenge

| Section | Challenge | আগে কোন ভিত্তি | চালানোর test file |
| --- | --- | --- | --- |
| Math · level 00–11 | [বিজ্ঞানমেলার প্রস্তুতি](math.md) | digit, GCD, modular, prefix, search, counting | `test_math_lab.py` |
| Array / String | [Study-session analytics](arrays.md) | traversal, merge, prefix, window | `test_arrays_lab.py` |
| Sorting / Searching | [পণ্যের catalogue](sorting-searching.md) | comparison, sorted interval, boundary | `test_sorting_lab.py` |
| Linked List | [Delivery manifest](linked-list.md) | node, next, pointer, cycle | `test_linked_list_lab.py` |
| Stack / Queue | [Nested job batch](stack-queue.md) | LIFO/FIFO, decode, monotonic queue | `test_stack_queue_lab.py` |
| Hashing | [Transaction reconciliation](hashing.md) | key/value, frequency, complement | `test_hashing_lab.py` |
| Recursion | [Workshop planning](recursion.md) | state, base case, choose/undo | `test_recursion_lab.py` |
| Trees | [BST library report](trees.md) | BST order, traversal, height | `test_trees_lab.py` |
| Heap | [Job scheduling](heap.md) | priority, heap operations, two heaps | `test_heap_lab.py` |
| Graphs | [Dependency-aware deliveries](graphs.md) | adjacency, BFS/DFS, shortest path | `test_graphs_lab.py` |
| DSU | [Road repair plan](dsu.md) | connected component, union/find | `test_dsu_lab.py` |
| Segment / Fenwick | [Inventory monitor](range-queries.md) | prefix, interval, point update | `test_range_queries_lab.py` |
| Dynamic Programming | [Study planner](dynamic-programming.md) | LCS state, knapsack choice, reconstruction | `test_dynamic_programming_lab.py` |
| Mixed Interview | [Request-stream analytics](interview.md) | hash, queue, heap, sliding window | `test_interview_lab.py` |

## Code ও tests চালানো

Repository clone/download করে তার root folder থেকে Python 3.12 বা নতুন সংস্করণে চালান। Lab-গুলোর জন্য extra package লাগে না। প্রতিটি challenge-এর পাতায় আলাদা solution ও test file-এর link আছে; আলাদা download করলে `practice/` folder-এর মধ্যে একই filename রাখুন এবং root folder থেকে command চালান।

```bash
python -m unittest discover -s practice -p "test_*_lab.py" -v
```

একটি challenge বেছে:

```bash
python -m unittest discover -s practice -p "test_math_lab.py" -v
```

Reference solution আগে থেকেই tests পাস করে। নিজের অনুশীলনের জন্য সেটির function body নিজে লিখে একই contract রাখুন, তারপর tests চালান। `ValueError`-এর test মানে ভুল input প্রত্যাখ্যানও problem-এর অংশ। Random test থাকলে seed নির্দিষ্ট—একই failure আবার দেখা যাবে।

## Microsoft course-এর সঙ্গে ব্যবহার

[Module mapping ও badge-এর অর্থ](../practice-map.md#course-map) দেখুন। Course-এর .NET/C# code আলাদা; এই Python solution থেকে logic বুঝে একই example ও edge case C#-এ লিখতে পারেন। কোনো lab-কে official graded assignment-এর উত্তর হিসেবে চিহ্নিত করা হয়নি।
