افسون‌های الیز


داستان

الیز به‌عنوان یک شعبده‌باز تازه‌کار باید چند نکته‌ی پایه را تمرین کند. او یک پشته کارت دارد که می‌خواهد آن‌ها را دست‌کاری کند.

برای اینکه کار کمی ساده‌تر شود، او فقط از کارت‌های ۱ تا ۱۰ استفاده می‌کند.

مقادیر کارت‌ها را از ۱ تا ۱۰ محدود می‌کنیم تا فقط با عددها سر و کار داشته باشیم، به این ترتیب تمرین‌هایی که از این داستان استفاده می‌کنند فقط لازم است به عددها تکیه کنند.

کارها

این‌ها نمونه‌هایی از کارهایی هستند که با داستانِ تازه‌کار بودن الیز جور درمی‌آیند:

  • بیرون آوردن یک کارت از پشته
  • تعویض یک کارت در پشته
  • وارد کردن یک کارت در بالای پشته
  • حذف یک کارت از پشته
  • حذف کارت بالایی از پشته
  • وارد کردن یک کارت در پایین پشته
  • حذف یک کارت از پایین پشته
  • بررسی اندازه‌ی پشته

این داستان را می‌توان ادامه داد تا تحلیل آرایه را هم آموزش دهد:

  • پیدا کردن موقعیت یک کارت
  • تعیین اینکه آیا یک کارت وجود دارد
  • تعیین اینکه هر کارت زوج است یا نه
  • بررسی اینکه آیا پشته کارتی با مقدار فرد دارد
  • گرفتن اولین کارت فرد از پشته
  • تعیین موقعیت اولین کارتی که زوج است

این داستان را می‌توان ادامه داد تا تبدیل‌های آرایه را هم آموزش دهد:

  • دو برابر کردن تک‌تک کارت‌ها
  • ساختن چند نسخه از هر ۳ که در دسته پیدا می‌شود
  • پیدا کردن دو کارت از دقیقاً وسط دسته
  • دو کارت بیرونی دوباره در وسط دسته ظاهر می‌شوند
  • هر کارتی که ۲ نباشد ناپدید می‌شود
  • تبدیل یک دسته‌ی به‌هم‌ریخته به یک دسته‌ی کاملاً مرتب
  • تغییر دادن هر کارت به تعداد کل کارت‌ها

این داستان را می‌توان ادامه داد تا تجزیه‌ی ساختاری آرایه را هم آموزش دهد:

  • گرفتن کارت اول (بدون روش‌های معمول، مثلاً ایندکس‌کننده یا متدها)
  • گرفتن کارت دوم (بدون روش‌های معمول، مثلاً ایندکس‌کننده یا متدها)
  • جابه‌جا کردن دو کارت اول (بدون روش‌های معمول، مثلاً ایندکس‌کننده یا متدها)
  • کنار گذاشتن کارت بالایی (بدون روش‌های معمول، مثلاً ایندکس‌کننده یا متدها)
  • وارد کردن کارت‌های تصویری (بدون روش‌های معمول، مثلاً ایندکس‌کننده یا متدها)

اصطلاحات

این‌ها توصیه‌اند، نه قانون، برای اصطلاحات تکرارشونده در دستورالعمل‌ها (از جمله توضیحات استاب)

  • شخصیت اصلی الیز است و ضمیرهای او she/her هستند. اگر لازم است به این شخصیت اشاره کنید، از اسمش استفاده کنید یا با ضمیر به او اشاره کنید.
  • به‌جای array (یا نوع داده‌ی معادل آن)، از واژه‌ی پشته یا پشته‌ی کارت استفاده کنید
  • به‌جای element، از واژه‌ی کارت استفاده کنید
  • به‌جای length، از اندازه‌ی پشته استفاده کنید
  • کارت بالایی همان اولین عنصر است
  • کارت پایینی همان آخرین عنصر است

پیاده‌سازی‌ها

نسخه‌ی جایگزین

نسخه‌ی جایگزینی از این داستان شما (دانشجو) را در نقش کنشگر می‌گذارد و فقط بر بازچینی دسته تمرکز دارد.

داستان

شما یک شعبده‌باز هستید و با یک دسته کارت سر و کار دارید. برای اینکه تردستی‌تان را درست اجرا کنید، باید بتوانید یک کارت را از یک موقعیت به موقعیت دیگری ببرید. یعنی باید بتوانید دسته را بازچینی کنید. طبیعتاً می‌خواهید بتوانید کارت‌ها را در هر دو جهت جابه‌جا کنید و بتوانید بگویید «از بالای دسته» یا «از پایین دسته».

کارها

این‌ها نمونه‌هایی از کارهایی هستند که با داستانِ تمایل شما به بازچینی کارت‌ها جور درمی‌آیند:

  • پیاده‌سازی تابعی با اسم arrange که یک کارت را در پشته از یک موقعیت داده‌شده به یک موقعیت دیگر جابه‌جا می‌کند و پشته‌ی جدیدی برمی‌گرداند
  • پیاده‌سازی تابعی با اسم rearrange که همین کار را می‌کند، با این تفاوت که پشته‌ی اصلی را در جا تغییر می‌دهد

پیاده‌سازی‌ها

مراجع