تنظیمات کارخانهی ربات را مدیریت کنید.
وقتی ربات از خط تولید کارخانه بیرون میآید، هیچ اسمی ندارد.
اولین باری که رباتی را روشن میکنید، یک اسم تصادفی به این شکل تولید میشود: دو حرف بزرگ و بعد سه رقم، مثل RX837 یا BC811.
هر چند وقت یکبار لازم است رباتی را به تنظیمات کارخانهاش برگردانیم، یعنی اسمش پاک میشود. دفعهی بعدی که بپرسید، آن ربات با یک اسم تصادفی تازه پاسخ میدهد.
اسمها باید تصادفی باشند: نباید از یک ترتیب قابل پیشبینی پیروی کنند. استفاده از اسمهای تصادفی با خطر تداخل همراه است. راهحل شما باید مطمئن شود که هر ربات موجود اسمی یکتا دارد.
مجموعهی تست بهطور پیشفرض فقط حدود ۱۰۰ اسم تولید میکند. حدود ۷۰۰ هزار اسم معتبر وجود دارد، بنابراین فقط شانس کمی برای برخورد ایجاد میکند. بهتر است علاوه بر مجموعهی تست، راه دیگری هم برای بررسی برخورد در راهحل خود در نظر بگیرید.
این تمرین کاوش ما در سیستم نوع Julia را ادامه میدهد، این بار با انواع تغییرپذیر، و ما را با تولید اعداد تصادفی آشنا میکند.
تصور میکنیم که بازنشانی ربات به تنظیمات کارخانه مثل یک جراحی است: در ربات تغییراتی ایجاد میکند، اما آن را جایگزین نمیکند. میتوانستیم مسئله را طوری مدلسازی کنیم که بازنشانی یک ربات، ربات تازهای بسازد، اما هر مسئلهای را نمیتوان تنها با ساختارهای دادهی تغییرناپذیر مدل کرد (حتی زبانهای کاملاً تابعی هم درون زمان اجرای خود با تغییرپذیری سروکار دارند!).
در Julia، طبق قرارداد، توابعی که آرگومانهای خود را تغییر میدهند پسوند ! دارند.
پس متدی که این کار را انجام میدهد، reset! نام میگیرد.
این فقط یک قرارداد است، اما تقریباً همهی کدهای منتشرشدهی Julia از آن پیروی میکنند و شاید شما هم موافق شوید که بسیار مفید است!
شما باید یک متد برای تولید اسمهای یکتا تعریف کنید، یک ساختار برای توصیف رباتها، یک متد برای بازنشانی یک ربات، و یک متد برای گرفتن اسم یک ربات.
ممکن است کمککننده باشد که برنامهی خود را اول طوری طراحی کنید که فقط یک اسم تصادفی برای یک ربات تولید کند (بدون نگرانی دربارهی برخوردها) و بعد به فکر طراحی روشی باشید که هرگز اسم تکراری صادر نکند. در طراحی خود دقت کنید که زمان اجرای تولید اسم با تمام شدن اسمها چگونه تغییر میکند. چه تضمینهایی میخواهید به فراخوانیکننده بدهید؟