تجربه‌های پراکنده‌ی یک مسعود
در صورت ناخوانا بودن نوشته‌ها، از مرورگر دیگری استفاده کنید.

4513.84 5.00
تجربه‌های پراکنده‌ی یک مسعود در عالم ریاضیات، الگوریتم و برنامه‌نویسی تجربه‌های پراکنده‌ی یک مسعود تجربه‌های پراکنده‌ی یک مسعود تجربه‌های پراکنده‌ی یک مسعود

بازی Lights Out و ریاضیات دوست داشتنی

حل بازی Lights Out با ریاضیات دوست داشتنی

فرض کنید صفحه‌ی ۵ در ۵ از کلید شاسی‌های چراغ‌دار داریم و این کلیدها به نحوی به هم متصل هستن که وقتی کلیدی رو فشار می‌دیم، نه تنها وضعیت چراغ همون کلید که وضعیت چراغ چهار کلید بالا، پایین، راست و چپ هم (در صورت وجود) عوض می‌شه؛ یعنی اگر چراغ روشن باشه، خاموش می‌شه و بالعکس. بازی Lights Out (یا Lights Off) روی چنین صفحه‌ای انجام می‌شه و به این ترتیب هست که اگر یک سری از چراغ‌ها در ابتدای کار روشن باشن، چطور می‌تونیم با فشار دادن کلیدها همه‌ی چراغ‌ها رو خاموش کنیم.

    پیوند نوشت ۱: شما می‌تونید Lights Out رو اینجا به صورت آنلاین بازی کنید.

    من خیلی سال قبل با این بازی آشنا بودم و بازی می‌کردم. اما برام سوال بود که چطور وقتی وسط بازی کم می‌یارم و از برنامه کمک می‌خوام، خودش اتوماتیک بقیه‌ی بازی رو انجام می‌ده و همه‌ی چراغ‌ها در نهایت خاموش می‌شن. بعدا کشف کردم که چطور. اخیرا هم به بازی‌های ساده فکر می‌کردم که بشه راحت پیاده‌سازی کرد. یاد این بازی افتادم و گفتم بد نیست شما هم بدونید چطور ریاضیات دوست داشتنی به کمک حل این مسئله می‌یاد.

ادامه ...
[بازگشت به فهرست]

نکته‌ای در مورد کلاس‌ها و مجموعه‌ها در ++C

بررسی روش تعریف کلاس برای قابلیت استفاده از ظرف‌های مجموعه (set و unordered_set) در زبان برنامه‌نویسی ++C

زبان برنامه‌نویسی ++C دو کلاس set و unordered_set رو برای پیاده‌سازی مفهوم مجموعه (ظرفی با عناصر غیرتکراری) داره.

    کلاس set علاوه بر بررسی تکراری نبودن عناصر، اونها رو به صورت مرتب ذخیره می‌کنه. پس اگر بخوایم برای نگه داشتن عناصری از کلاس دلخواه خودمون از set استفاده کنیم، باید حداقل عملگر > رو سربارگذاری کرده باشیم تا ظرف set قابلیت تشخیص ترتیب عناصر رو داشته باشه. اما گاهی تعریف کوچکتر بودن برای کلاسمون مقدور نیست یا از لحاظ مفهومی معنی نداره. در چنین شرایطی می‌تونیم از کلاس unordered_set استفاده کنیم.

    کلاس unordered_set از hashing برای بررسی یکسان بودن عناصر استفاده می‌کنه. بنابراین باید عملکرد hash برای کلاس دلخواه خودمون رو تعریف کنیم. اما طراحی عملگر hash کارا و بدون تداخل لزوما راحت نیست و ممکن‌ه عناصر متفاوت، hash یکسانی رو تولید کنن. به همین دلیل علاوه بر پیاده‌سازی متد hash باید عملگر == هم پیاده شه تا در صورت برابر بودن hash دو عنصر، یکسان بودن اون دو از طریق عملگر == هم بررسی شه. این کار یک حسن بزرگ داره که لازم نیست درگیر طراحی hash دقیق و بدون تداخل باشیم و حتی اگر تداخلی داشتیم، عملگر == هم برای تشخیص تمایز فراخوانی می‌شه.

ادامه ...
[بازگشت به فهرست]

کمی در مورد رمزنگاری

یک نوشته‌ی قدیمی از «ریاضیکده» در مورد رمزنگاری

«

    امروز به سرم زد ایمیل‌های قدیمی خودم رو چک کنم و ببینم چی واسه کی فرستادم؟ به یه ایمیل با متن اجغ وجغ برخوردم که طبق معمول رفتم سراغ تغییر Encoding صفحه، تا شاید متن اون خوانا بشه. اما فایده نداشت.

    وقتی شروع نامه و آخرش رو خوندم حس کردم هر حرف فارسی با یه نشان از زبان دیگه جایگزین شده. اولین کلمه‌ی نامه "ÓáÇã" بود که حدس زدم باید "سلام" باشه. و همینطور از خداحافظی آخر نامه هم چند حرف رو بیرون کشیدم. بعدش کلماتی وجود داشتن که فقط یه حرفشون نامشخص بود و می‌شد حدس زد اون یه حرف چیه؟ با همین حدس زدن‌ها پیش رفتم و حدود نیم ساعت بعد متن فارسی کامل رو در کمال افتخار به دست آوردم!

    استفاده از رمزنگاری در متون مهم و حساس قدمت زیادی داره. در یونان قدیم به روش خیلی جالبی متن نامه رو به رمز می‌نوشتن. سزار روم هم روشی برای رمزنگاری استفاده می‌کرده که امروزه به روش رمزنگاری سزار مشهور شده. به این ترتیب که به جای هر حرف از متن اصلی، سومین حرف بعد از این حرف در الفبای زبانشون رو جایگزین می‌کرده. مثلا در زبان انگلیسی به جای A از D و به جای Y از B استفاده می‌شده. وقتی هم که قرار بوده نامه خونده بشه عکس این عمل رو انجام می‌دادن.

ادامه ...
[بازگشت به فهرست]