کمانگیر : بازی سال نو
by امید
بازی از اینجا شروع شد ، و اینجا هم کاملتر شد …
قضیه از این قرار بود که برنامه ای بنویسیم که با ترکیب اعداد ۹ ۰ ۰ ۲ و عملگرهای + – * / ^ و پرانتز ها ، اعداد ۰ تا ۲۰۰۹ را بسازیم . برای مثال ۱۰=۹+۰^۲ ویا ۲۰=۲۰ ویا ۲=۲-۰ ویا ۲=۲ و الی آخر …
ایده ی من برای حل این مساله ، تبدیل اعداد و عملگر ها به یک آرایه بود . با این کار و تولید جایگشت های مختلف از اندیس های این ارایه ، اعضای متناظر رو استخراج می کنیم و با ترکیب اونها ، تمامی عبارات ممکن رو تولید می کنیم .
این عبارات شامل عبارات با معنی و عبارات بی معنی مثل ؟ = ۲-*/ هم میشه ، که البته خود کمانگیر عزیز این مشکل رو حل کرده .و در آخر هم ، نتایج رو در یک آرایه ریخته ، مرتب می کنیم و عناصر تکراری رو حذف می کنیم .
به عنوان مثال :
با فرض آرایه اولیه [ ^ / * – ۹ ۰ ۰ ۲ ] خواهیم داشت :
با تولید جایگشت ۱ : عدد ۲
با تولید جایگشت ۲ ۴ ۱ ۳ : عدد ۰۲۹۰ یا همان ۲۹۰
با تولید جایگشت ۷ ۸ ۲ : عبارت ^/۲ که بی معنی است
نکته اصلی محاسبه تمامی جایگشت های ۱ عضوی تا N عضوی ممکن برای یک مجموعه N عضویه.
و البته ، استفاده از پرانتز . که باید توجه داشت که یا پرانتز استفاده نشه و یا یک جفت پرانتز استفاده بشه که باعث کم شدن احتمال خطا در نتیجه می شه . یعنی عبارت ۲( نباید تولید شه . که من هنوز این مشکل رو حل نکردم .
به هر حال ، بازی ای بود که کمانگیر شروع کرد ، حالا من هم ادامه دادم .
پ ن : یک مشکل کوچک در محاسبه جایگشت های ۱ و ۲ عضوی داره هنوز …
پ ن : خط اول توضیحات فایل مشکل گرامری داره ، لطفا نخندید D:
مرا با این اعداد و ارقام و اینها کاری نیست! به مغزم هم فشار نمیارم که بفهمم یعنی چی اینها :دی
دست شما درست. اگر درست متوجه شده باشم، شما روی طول ِ رشته یک حلقه گذاشتی. این طول رو من تصادفی کرده بودم.
ایول.
فقط یک نکته، مشکل من هم بود این. به این ترتیب در یک رشته پر اپراتور فقط یکبار تکرار می شه.
دستت درست به هر حال! چاکریم. 🙂
کاش لیست می دادی از اعدادی که تولید شده. 🙂
az barname nevisi motenaferam