کمانگیر : بازی سال نو

by امید

بازی از اینجا شروع شد ، و اینجا هم کاملتر شد …

قضیه از این قرار بود که برنامه ای بنویسیم که با ترکیب اعداد ۹ ۰ ۰ ۲ و عملگرهای + – * / ^ و پرانتز ها ، اعداد ۰ تا ۲۰۰۹ را بسازیم . برای مثال ۱۰=۹+۰^۲ ویا ۲۰=۲۰ ویا ۲=۲-۰ ویا ۲=۲ و الی آخر …

ایده ی من برای حل این مساله ، تبدیل اعداد و عملگر ها به یک آرایه بود . با این کار و تولید جایگشت های مختلف از اندیس های این ارایه ، اعضای متناظر رو استخراج می کنیم و با ترکیب اونها ، تمامی عبارات ممکن رو تولید می کنیم .

این عبارات شامل عبارات با معنی و عبارات بی معنی مثل ؟ = ۲-*/ هم میشه ، که البته خود کمانگیر عزیز این مشکل رو حل کرده .و در آخر هم ، نتایج رو در یک آرایه ریخته ، مرتب می کنیم و عناصر تکراری رو حذف می کنیم .

به عنوان مثال :

با فرض آرایه اولیه [ ^ / * – ۹ ۰ ۰ ۲ ] خواهیم داشت :

با تولید جایگشت ۱ : عدد ۲

با تولید جایگشت ۲ ۴ ۱ ۳ : عدد ۰۲۹۰ یا همان ۲۹۰

با تولید جایگشت ۷ ۸ ۲ : عبارت ^/۲ که بی معنی است

نکته اصلی محاسبه تمامی جایگشت های ۱ عضوی تا N عضوی ممکن برای یک مجموعه N عضویه.

و البته ، استفاده از پرانتز . که باید توجه داشت که یا پرانتز استفاده نشه و یا یک جفت پرانتز استفاده بشه که باعث کم شدن احتمال خطا در نتیجه می شه . یعنی عبارت ۲( نباید تولید شه . که من هنوز این مشکل رو حل نکردم .

به هر حال ، بازی ای بود که کمانگیر شروع کرد ، حالا من هم ادامه دادم .

دریافت فایل به زیان matlab

پ ن : یک مشکل کوچک در محاسبه جایگشت های ۱ و ۲ عضوی داره هنوز …

پ ن : خط اول توضیحات فایل مشکل گرامری داره ، لطفا نخندید D: