بخش یک #
با زبان طنز میخواهیم پروژهای بسازیم که مسیر پیدا کنه، اونم توی جنگل کدها! بیا قدم به قدم جلو بریم. 😄
اول باید بفهمیم کجا هستیم و کجا میخواهیم برویم. جنگل بدون نقشه؟ اشتباه استراتژیک!
اینطوری نقشهمان را درست میکنیم:
#Comments# جنگل ما: 0 یعنی راه بازه، 1 یعنی دیوار! forest = [ [0, 1, 0, 0, 0], [0, 1, 0, 1, 0], [0, 0, 0, 1, 0], [0, 1, 1, 1, 0], [0, 0, 0, 0, 0] ]
خوب، حالا میخواهیم مشخص کنیم از کجا شروع کنیم و کجا برسیم. یه ماجراجویی واقعی!
start = (0, 0) # بالا سمت چپ end = (4, 4) # پایین سمت راست
برای پیدا کردن مسیر، از روش BFS (همون Breadth-First Search که یعنی "یکییکی کل جنگل رو بگرد تا برسی") استفاده میکنیم.
کمی کد نویسی و جادو! ✨ - در بخش دو # تحلیل طنز بخش چهار آمده است.
from collections import deque def find_path(forest, start, end): # صفی برای نگهداشتن مکانهایی که باید بررسی کنیم queue = deque([start]) visited = set() # جاهایی که قبلاً رفتهایم parent_map = {} # برای یادآوری مسیر directions = [(0, 1), (1, 0), (0, -1), (-1, 0)] # راست، پایین، چپ، بالا while queue: current = queue.popleft() # اولین مکان از صف # چک کنیم که رسیدیم یا نه if current == end: path = [] while current: path.append(current) current = parent_map.get(current) return path[::-1] # مسیر رو از انتها برعکس کن # همسایهها رو بررسی کن for d in directions: neighbor = (current[0] + d[0], current[1] + d[1]) if (0 <= neighbor[0] < len(forest) and 0 <= neighbor[1] < len(forest[0]) and forest[neighbor[0]][neighbor[1]] == 0 and neighbor not in visited): queue.append(neighbor) visited.add(neighbor) parent_map[neighbor] = current return None # اگر مسیری پیدا نشد
وقتشه که جنگلگردی کنیم و ببینیم مسیرمون چطور پیش میره! 🐾
path = find_path(forest, start, end) if path: print("مسیر پیدا شد:", path) else: print("مسیر گیر کردیم! 😭")
اگه کد رو اجرا کنی، مسیر جنگل رو مثل یه تور لیدر حرفهای بهت میده. این کد حتی میگه "ای بابا، مسیرت بنبسته" اگه هیچ راهی نباشه.
برنامه ما یه مسیریاب عاقله:
امیدوارم تو پروژه "جنگل و دیوار" موفق باشی! 😉
بخش دو #
pythonCopy codefrom collections import deque def find_path(forest, start, end): # صفی برای نگهداشتن مکانهایی که باید بررسی کنیم queue = deque([start]) visited = set() # جاهایی که قبلاً رفتهایم parent_map = {} # برای یادآوری مسیر directions = [(0, 1), (1, 0), (0, -1), (-1, 0)] # راست، پایین، چپ، بالا while queue: current = queue.popleft() # اولین مکان از صف # چک کنیم که رسیدیم یا نه if current == end: path = [] while current: path.append(current) current = parent_map.get(current) return path[::-1] # مسیر رو از انتها برعکس کن # همسایهها رو بررسی کن for d in directions: neighbor = (current[0] + d[0], current[1] + d[1]) if (0 <= neighbor[0] < len(forest) and 0 <= neighbor[1] < len(forest[0]) and forest[neighbor[0]][neighbor[1]] == 0 and neighbor not in visited): queue.append(neighbor) visited.add(neighbor) parent_map[neighbor] = current return None # اگر مسیری پیدا نشد
بیایید این بخش را به صورت طنز و با یک تحلیل ساده بررسی کنیم! 😊
این کد، یک «مسیریاب زرنگ و خلاق» است که میخواهد از نقطه A (شروع) به نقطه B (پایان) برسد. ولی خیلی باهوش است:
خب بیایید ببینیم کد چه کارهایی میکنه:
queue = deque([start])
:visited = set()
:parent_map = {}
:directions
:while queue:
if current == end:
return path[::-1]
queue.append(neighbor)
visited.add(neighbor)
اگر همه راهها رو رفت و به مقصد نرسید:return None
میگه: «اوپس! این مسیر به ناکجا آباد میرسه. راه دیگهای پیدا کن!» 😅
این کد انگار یه کارآگاه خبره است که دنبال مجرم (مسیر صحیح) میگرده:
chatgpt 4o