بازی از اینجا شروع شد ، و اینجا هم کاملتر شد …
قضیه از این قرار بود که برنامه ای بنویسیم که با ترکیب اعداد ۹ ۰ ۰ ۲ و عملگرهای + – * / ^ و پرانتز ها ، اعداد ۰ تا ۲۰۰۹ را بسازیم . برای مثال ۱۰=۹+۰^۲ ویا ۲۰=۲۰ ویا ۲=۲-۰ ویا ۲=۲ و الی آخر …
ایده ی من برای حل این مساله ، تبدیل اعداد و عملگر ها به یک آرایه بود . با این کار و تولید جایگشت های مختلف از اندیس های این ارایه ، اعضای متناظر رو استخراج می کنیم و با ترکیب اونها ، تمامی عبارات ممکن رو تولید می کنیم .
این عبارات شامل عبارات با معنی و عبارات بی معنی مثل ؟ = ۲-*/ هم میشه ، که البته خود کمانگیر عزیز این مشکل رو حل کرده .و در آخر هم ، نتایج رو در یک آرایه ریخته ، مرتب می کنیم و عناصر تکراری رو حذف می کنیم .
به عنوان مثال :
با فرض آرایه اولیه [ ^ / * - ۹ ۰ ۰ ۲ ] خواهیم داشت :
با تولید جایگشت ۱ : عدد ۲
با تولید جایگشت ۲ ۴ ۱ ۳ : عدد ۰۲۹۰ یا همان ۲۹۰
با تولید جایگشت ۷ ۸ ۲ : عبارت ^/۲ که بی معنی است
نکته اصلی محاسبه تمامی جایگشت های ۱ عضوی تا N عضوی ممکن برای یک مجموعه N عضویه.
و البته ، استفاده از پرانتز . که باید توجه داشت که یا پرانتز استفاده نشه و یا یک جفت پرانتز استفاده بشه که باعث کم شدن احتمال خطا در نتیجه می شه . یعنی عبارت ۲( نباید تولید شه . که من هنوز این مشکل رو حل نکردم .
به هر حال ، بازی ای بود که کمانگیر شروع کرد ، حالا من هم ادامه دادم .
پ ن : یک مشکل کوچک در محاسبه جایگشت های ۱ و ۲ عضوی داره هنوز …
پ ن : خط اول توضیحات فایل مشکل گرامری داره ، لطفا نخندید D:
3 comments so far
Leave a reply