وقت آن رسیده که چند تا از مسئلهها و چالشهایی را که از همان اوایل تا حالا نشان دادهایم را حل کنیم.
با استفاده از while
، if
، else
و .. برنامههایی مینویسید که میتواند کارهای مختلفی را انجام بدهد. برای نوشتن این برنامهها این نکتهها را باید یادتان نگه دارید:
قانون شمارهٔ ۲ را به خاطر داشته باشید. برای تعریف مواردی مثل تابعها، متغیّرها و ... در مسئلههایی که میخواهید حل کنید، تا آنجایی که میشود اسمهایی واضحی انتخاب کنید؛ یعنی؛ برای این موارد اسمهایی انتخاب کنید که توصیفکنندهٔ کاری که انجام میدهند باشند، تا راحت شناخته بشوند و شما با آن اسم بدانید آن تابع یا متغیّر برای چه کاری است.
از اصول گفته شده در قانون شمارهٔ ۴ پیروی کنید: اوّل کار را با حلّ مسئلههای سادهتر شروع کنید. بعد راه حلّتان را تعمیم بدهید تا بشود با آن بیشتر از یک مسئله را حل کرد.
قانون شمارهٔ ۳ را یادتان نگه دارید: تا آنجایی که میشود از تکرار بپرهیزید.
حالا قانون شمارهٔ ۱ را به یاد بیاروید... . یادتان باشد این بار همهٔ چالشهای این پایین را حل کنید.
مهم
حتماً راهحلهای مختلفتان را ذخیره کنید؛ چون شاید بخواهید بعداً به آنها مراجعه کنید.
محیط فصل برداشت ۳ را انتخاب کنید. این محیط، مدّت کوتاهی پس از کاشت تخم توی باغچه را نشان میدهد. بعضی هویجها درست جوانه زدهاند، بعضی جاها هم دو تا سبز شده. در حالی که بعضی جاهای دیگر اصلاً هیچ هویجی سبز نشده. به ریبرگ کمک کنید تا جوانههای اضافی باغچه را طوری وجین کند که جایی دو تا جواهٔ هویج نباشد. علاوه بر این، در جاهایی هم که هویجی در نیامده، دانههای جدید بکارد.
انجام بده!
برنامهای را که بالاتر گفته شد را بنویسید.
وجین خوب انجام شده (البتّه امیدوارم!). فصل داشت هم تمام شده؛ و وقت برداشت محصول شده. محیط فصل برداشت ۱ و یا فصل برداشت ۲ را انتخاب کنید و کاری کنید که ریبرگ همهٔ هویجها را جمع کند. باید فقط یک برنامه بنویسید که برای هر دو تا محیط کار کند.
روز آفتابی قشنگی بود. ریبرگ با دوستش بیرون داشت بازی میکرد. نگهان بارون شروع به باریدن کرد. ریبرگ یادش آمد که همهٔ پنجرههای خانهاش باز ماندهاند. برای همین ریبرگ برگشت به خانهاش و جلوی در ایستاد و مردّد بود که چطور کارش را ادامه بدهد.
انجام بده!
با استفاده از دستورهای ()build_wall
یا ()wall_on_right
و یا هر دوی آنها و بدون استفاده از ()right_is_clear
و ()front_is_clear
به ریبرگ کمک کنید که پنجرههای خانهاش را ببندد. وقتی ریبرگ این کارش را تموم کرد؛ جای در ورودی میایستد. در حالی که بارش باران را تماشا میکند، منتظر بند آمدن باران است؛ تا بتواند برود بیرون و بازی کند (محیط باران ۱).
اِردنا، دوست ریبرگ، همان طور که از فضای محیط باران ۲ مشخّص است در خانهٔ بزرگتری زندگی میکند. وقتی باران شروع به باریدن کرد، اردنا بیرون بود و داشت با ریبرگ بازی میکرد. به اردنا هم کمک کنید تا پنجرههای خانهاش را ببندد.
امتحان کنید!
چالش شما این است که برنامهای بنویسید که هم برای ریبرگ کار کند و هم برای اردنا. این بار هم نه با ()right_is_clear
و نه ()front_is_clear
. با این شرایط ممکن است نوشتن برنامه کمی پیچیده باشد.
راهنمایی
برای تشخیص این که پنجره در محلّ مورد نظر هست یا نه؛ شاید لازم باشد ربات چند قدم اضافه بردارد و بسته به نتیجه، ممکن است دور بزند، برگردد و پنجره را ببندد.(سعی کند برود توی دیوار. اگه دیوار سوراخ پنجرهای داشت، از پنجره برود بیرون و دوباره برگردد بیاید تو و پنجره را ببندد).
دوباره انجام بدید!
این بار، برنامهای بنویسید که از علاوه بر این که از ()wall_on_right
یا ()wall_in_front
استفاده میکند؛ حتماً تابعهای بررسی ()right_is_clear
و ()front_is_clear
را هم داشته باشد تا به ریبرگ و اردنا برای بستن پنجرههای خانههایشان کمک کند. تعداد دستورهایی که رباتها اجرا میکنند میبایست کمتر شده باشد، چون آنها میتوانند مستقیماً از محیط اطّلاعات بیشتری را بگیرند.
دیشب باد شدیدی وزید. برگها همه جای بیرون خانهٔ ریبرگ پخش شدهاند. پدر و مادر ریبرگ از او خواستهاند که برود و مسیر بین جلوی در حیاتِ خانه تا پیادهرو (طوفان ۱) و گاراژ (طوفان ۲) را پاک کند.
نوبت شما!
ریبرگ باید همهٔ برگها را جمع کند و توی سطل کود گیاهی بریزد و با ()build_wall
در سطل را ببندد. ریبرگ با استفاده از شرط ()carries_object
میتواند بفهمد که آیا چیزی همراه داره یا نه (که اینجا همان بزرگهای زرد هستند). این تابع میتواند در یک گزارهٔ if
یا while
استفاده شود.
والدین ریبرگ آن قدر از کارش احساس غرور میکنند که از او خواستند همهٔ برگهایی را که طوفان توی حیاط پشتی پخش کرده (محیط طوفان ۳) را هم جمع کند. کاری کنید که ریبرگ تک تک برگها را جمع کند و توی سطل کود گیاهی بریزد.
نوبت شما!
برنامهای بنویسید که برای هر سه تا محیط طوفان کار کند.
به محیطهای مرکز ۱ و مرکز ۳ نگاهی بیاندازید.
این کار را انجام بده!
فقط یک برنامه بنویسید که کاری کند تا ریبرگ یک نشانه را در مرکز هندسی فضایی که در آن هست بگذارد. با سادهترین شکل محیط شروع کنید، تا با بهبود هر بارهٔ آن از عهدهٔ موارد پیچیدهتر بر بیایید. توجّه کنید که این مسئله چالش برانگیزتر است.
راهنمایی
احتمالاً اگر کاری کنید که ریبرگ (که دو تا نشانه با خودش همراه دارد) در هر کدام از دو تا انتهای یک خط یک نشانه بگذارد برایتان مفید باشد. سپس میتوان نشانههای هر کدام از دو انتهای خط را قدم به قدم و یکی بعد از دیگری آن قدر به سمت هم جلو برد که هر دو تایشان در یک محل -که همان نقطهٔ وسط است- قرار بگیرند. وقتی که فهمیدید چطور این کار را در یک بُعد (در امتداد یک خط افقی) انجام بدهید؛ میتوانید از آن نقطه به عنوان نقطهٔ شروع موقعیّت بعدی (در امتداد خط عمودی) استفاده کنید.