سلام امیدوارم هرجا که هستید حالتون خوب باشه. از امروز میخوام به صورت [تقریبا] روزانه سوال های حال Advent of Code رو حل کنم. در صورتی هم که با Advent of Code (که از این به بعد AOC مینویسم) آشنایی ندارید توضیح زیر رو بخونید.
AOC از نگاه ChatGPT
Advent of Code یک رقابت برنامهنویسی سالانه است که در طول 25 روز از ابتدا ماه دسامبر برگزار میشود. این رویداد توسط Eric Wastl تأسیس شده است و هر سال میلیونها برنامهنویس از سراسر جهان در آن شرکت میکنند. هر روز از Advent of Code یک مسئله برنامهنویسی جدید و جذاب منتشر میشود که معمولاً مرتبط با موضوعات مختلفی از جمله الگوریتمها، ساختار دادهها، تحلیل داده و مسائل رمزگذاری است. این مسائل با سطوح مختلف دشواری طراحی شدهاند تا برنامهنویسان از سطوح مختلف تجربه و تخصص در حل مسائل برنامهنویسی خود را ارتقا دهند.
Advent of Code یک فرصت فوقالعاده برای برنامهنویسان است تا مهارتهای خود را به چالش بکشند، با دیگران رقابت کنند و از راهحلهای خلاقانه و بهینه برای مسائل مختلف برنامهنویسی آگاهی پیدا کنند. برگرفته از ChatGPT
AOC از نگاه خودم
باید این رو هم بگم که هر روز یک سوال قرار دادهمیشه که این سوال خودش دو بخشه و بخش دوم بعد از حل بخش اول آزاد میشه. سوالهاش هم به این صورت هست که یه داستان مزخرف رو هر روز تعریف میکنه، این داستان در واقع کتوشلواری برای مسئله هست. هر مسئله دو نوع دیتا داره. یه دیتا کوتاه که در مسئله رو با اون حل میکنه و توضیح میده. یه دیتا طولانی داره که ما باید مسئله رو با اون حل کنیم و خروجی مسئله رو تو TextBox وارد کنیم و ارسال کنیم. همین موضوع باعث میشه این رویداد به زبانی که مینویسید وابسته نباشه و فقط به خروجی وابسته است.
سوالی که در بخش دوم آزاد میشه، مانند بخش اول دو نوع دیتا داره. البته به این نکته دقت کنید که سوال مرحله دوم شباهت های زیادی با مرحله اول داره و در واقع نسخه سختتر سوال اول است.
این رویداد همانطور که اول گفتم از ۱ دسامبر شروع میشه و ۲۵ روز ادامه داره. همچنین هر زمان که سوال ها باز شدند میشه اون ها رو دید و حل کرد و نیازی به حل روزهای قبل نیست. حتی میشه سوالهای سالهای قبل رو دید و حل کرد.
کد
من هم امسال میخوام تا جایی که فرصت داشته باشم این سوالهای رو حل کنم و خلاصهای از راه حل خودم رو تو همین بلاگ بنویسم. زبانی هم که واسه حل این سوالها انتخاب کردم Rust است. امیدوارم حل این سوالها باعث بشه بهتر این زبون رو درک کنم.
کدهام رو تو مخزن AOC23 قرار میدم. خوشحال میشم اگر مشکلی داشت یا اشتباه تو حل سوال بود، issue ثبت کنید.
نحوه پوشه بندی کدها به این صورت هست که به اضای تغییرات زیر اعمال میشود
- اضافه کردن dayXX -> src/days
- تغییر اضافه کردن فایلهای اضافه شده به فایل mod.rs
- اضافه کردن dayXX به فایل mod.rs در پوشه days
- همچنین فایل های ورودی در پوشه دیتا و dayXX قرار میگیرند
- فایل های تست به صورت e[n].txt
- فایل های تست به صورت q[n].txt