حل تمرین سوال رباته کوئرا با پایتون
در این نوشته به روش حل یکی از سوالات برنامه نویسی وبسایت کوئرا میپردازیم.
حل تمرین سوال رباته کوئرا با پایتون
ربات جدیدی در تلگرام آمده است که از قابلیتهایش این است که میتواند خانه را جارو کند!! پارسا این ربات را گرفته و میخواهد به کمک آن اتاق خویش را مرتب کند. اتاق پارسا از بالا به شکل یک جدول مستطیل شکل به ابعاد n×m است ( سطر و m ستون) که در هر خانهی آن یا یک توپ قرار دارد و یا یک آشغال (کلا بسیاری از اشیا در زندگی پارسا یا توپاند و یا آشغال!) پارسا این ربات را در خانهی (x,y) (سطر xم و ستونم yم) قرارداد که در آن خانه آشغالی قرار دارد و ربات آشغال را مکید به کیسهی انبار خود یعنی فضای مجازی فرستاد! از آنجایی که این ربات یک ربات است، قابل کنترل است و در حال حاضر کنترل آن به دست پارسا میباشد. کنترل ربات 5 دکمه بیشتر ندارد. دکمهی چپ، بالا، راست، پایین و دکمهی شروع. همچنین کنترل شامل یک صفحهی نمایش نیز است. نحوهی کار با ربات به این صورت است که در ابتدا پارسا مقداری دکمههای چپ و بالا و راست و پایین را فشار میدهد و با فشار دادن این دکمهها رشتهی دستوری به روی صفحهی نمایش نقش میبندد. برای مثال اگر پارسا به ترتیب 1 بار دکمهی چپ، سپس 1 بار دکمهی بالا، سپس 2 بار دکمهی راست، سپس 1 بار دکمهی پایین و در نهایت 1 بار دکمهی چپ را فشار دهد رشتهی دستوری نوشتهشده روی کنترل به این صورت میشود: LURRDL
- نمایانگر بالا: U
- نمایانگر راست: R
- نمایانگر پایین: D
- نمایانگر چپ: L
بعد از این کار او دکمهی شروع را میزند و ربات به کار میافتد تا دستوری را که پارسا نوشته است اجرا کند. نحوهی اجرای دستور نوشته شده روی صفحهی نمایش توسط ربات به این صورت است که او به ترتیب حروف دستور را گرفته و آنقدر آن عملیات را انجام میدهد تا به دیوار یا به توپ برسد. مثلا اگر U را ببیند از (x,y) به (x−1,y) و سپس به (x−2,y) و همینطور تا آخر میرود و خانهها را تمیز میکند تا به دیوار یا توپ برسد. سپس به سراغ دستور بعدی میرود. حالا پارسا میخواهد بداند که آیا این ربات ارزش خریدن را داشته یا نه. برای همین میخواهد تعداد خانههای تمیز شده را بداند. اما پارسا به شدت مشغول توپ بازی است و فرصت این گونه محاسبات را ندارد. به او کمک کنید تا این مقدار را پیدا کند.
ورودی
در سطر اول ورودی سه عدد n و m و میآید که به ترتیب نمایانگر طول و عرض اتاق و طول رشتهی دستورات است. در خط بعدی دو عدد و y آمده که نشاندهندهی محلی است که ربات در اول کار در آن قرار دارد. در خط بعدی یک رشته به طول میآید که نشاندهندهی دستوراتیست که پارسا به ربات دادهاست. در n خط بعدی در هر خط یک رشته به طول m آمده که نمایانگر جدول اتاق پارسا است. O نشاندهندهی توپ و # نشاندهندهی آشغال است. تضمین میشود که در مکان اولیهی ربات توپ نیست.
خروجی
در تنها خط خروجی تعداد خانههایی که تمیز شدهاند را خروجی دهید.
مثال
ورودی نمونه 1
4 5 5 2 2 RUDLL ##O## O##O# #O### ###OO
خروجی نمونه 1
6
ربات در خانهی (2, 2) است. بعد از خواندن حرف اول به (3 ,2) میرود. چون بالای این خانه توپ است، حرکتی نمیکند و سپس دو خانه پایین میآید و بعد دو خانه به چپ میرود و بعد از آن دوباره حرکتی نمیکند.
کد پایتون سوال تمرین سوال رباته
n, m, l = map(int, input().split()) x, y = map(int, input().split()) commands = input().strip() room = [list(input().strip()) for _ in range(n)] x -= 1 y -= 1 directions = { 'U': (-1, 0), 'D': (1, 0), 'L': (0, -1), 'R': (0, 1) } cleaned_count = 0 def is_within_bounds(nx, ny): return 0 <= nx < n and 0 <= ny < m if room[x][y] == '#': cleaned_count += 1 room[x][y] = '.' for command in commands: dx, dy = directions[command] while True: nx, ny = x + dx, y + dy if not is_within_bounds(nx, ny) or room[nx][ny] == 'O': break x, y = nx, ny if room[x][y] == '#': cleaned_count += 1 room[x][y] = '.' print(cleaned_count)
منبع سوال: کوئرا
اگر نیاز به حل تمرینهای دیگری از کوئرا دارید در بخش نظرات همین نوشته برای ما بنویسید.
ارسال پاسخ