কমপক্ষে এন ভাল নম্বর পেতে খেলতে সর্বাধিক লটারির টিকিট তৈরি করুন


11

এটি একটি জটিল কিন্তু অত্যন্ত আকর্ষণীয় গণিত বিষয় ( "কাভারিং সমস্যা" নামে পরিচিত ),

এবং এটি বাস্তবায়নের জন্য আপনার সহায়তা চাই।

একটি লটারি গেমটি কল্পনা করুন, যেখানে প্রতিটি টিকিটকে অবশ্যই 50 টি সংখ্যার সেট (1 থেকে 50) এর মধ্যে 5 টি এলোমেলো সংখ্যা নির্বাচন করতে হবে।

বিজয়ী টিকিটের সম্ভাবনা, বা 1, 2, 3 বা 4 ভাল নম্বর পাওয়ার সম্ভাবনাটি জানা বেশ সহজ।

1, 2, 3, 4 টি ভাল নম্বর রয়েছে এমন সমস্ত টিকিট "জেনারেট" করাও বেশ সহজ।

আমার প্রশ্ন (এবং কোড চ্যালেঞ্জ) এর সাথে সম্পর্কিত তবে কিছুটা আলাদা:

আমি কিছু লটারির টিকিট কিনতে চাই (যত কম সংখ্যক সম্ভব) যেমন আমার টিকিটের অন্তত একটিতে 3 টি ভাল নম্বর রয়েছে।

চ্যালেঞ্জ

আপনার লক্ষ্যটি হ'ল জেনারিক সলিউশন (প্রোগ্রাম বা কেবল একটি ফাংশন হিসাবে) প্রয়োগ করা, এর মতো কোনও ভাষায়:

// Input: 3 prameters
min_lottery_tickets(total_numbers_to_choose_from, how_many_numbers_to_choose, how_many_good_numbers_i_want)

উপরের উদাহরণের জন্য, কেবলমাত্র কল করতে হবে:

min_lottery_tickets(50, 5, 3)

এবং এই লক্ষ্যটি অর্জনের জন্য প্রোগ্রামটি খেলতে ক্ষুদ্রতম সেট টিকিট তৈরি করবে।


উদাহরণ:

 min_lottery_tickets(10, 5, 2)

তাদের মতো 7 টি টিকিট আউটপুট দেয়:

1   2   3   4   5
5   6   7   8   9
10  1   2   6   7
10  3   4   8   9
3   4   6   7   8
1   2   3   8   9
1   4   9   5   10

কারণ এই জাতীয় টিকিট 1 থেকে 10 পর্যন্ত যে কোনও সংখ্যার জোড় সংখ্যার জন্য যথেষ্ট।


আউটপুট

টেক্সট, টিকিট প্রতি এক লাইন, সংখ্যার মধ্যে সারণী বা ফাঁকা স্থান


কে জিতলো

সর্বাধিক দক্ষ প্রোগ্রামের জয় (যেমন উপরের প্যারামিটারগুলির জন্য সবচেয়ে কম টিকিট তৈরি করা প্রোগ্রাম):

min_lottery_tickets(50, 5, 3)


ধন্যবাদ!



4
এই প্রশ্নের বিভিন্ন ব্যাখ্যা দরকার needs আপনি কি কোনও প্রোগ্রাম, কোনও ফাংশন, বা পরে আছেন? আউটপুট ফর্ম্যাট কি ব্যাপার? সংখ্যাগুলি কি 1 থেকে সূচী করতে হবে, বা তারা 0 থেকে সূচী করা যেতে পারে? এবং উদ্দেশ্য জয়ের শর্তটি কী?
পিটার টেলর

3
@ xem এটি প্রায় তখন গণিত SE তে অন্তর্ভুক্ত। যেখানে তারা সম্ভবত প্রমাণ করবে যে সংখ্যাগুলি আপনার পক্ষে নেই (যদিও সেখানে কিছু জ্যাকপট নম্বর রয়েছে এটি টিকিট কেনার জন্য মূল্যবান)
ক্রাঙ্কার

2
একটি ভাল নম্বর কি?
ডেভিডসি

2
আমি নিশ্চিত যে আপনি যদি এমন কোনও প্রোগ্রামের মাধ্যমে টিকিটের আউটপুট কিনতে যান তবে আপনি প্রচুর অর্থ হারাবেন তা প্রমাণযোগ্য।
মাইকেল হ্যাম্পটন 21

উত্তর:


1

আমি জানি এটি সর্বোত্তম নয় , তবে এখানে নোড.জেএস-তে কোড রয়েছে:

function min_lottery_tickets(total_numbers_to_choose_from, how_many_numbers_to_choose, how_many_good_numbers_i_want) {
    c(function(result) {
        var other = result[result.length - 1];
        while (result.length < how_many_numbers_to_choose) {
            other++;
            var already = false;
            for (var i = 0; i < result.length; i++) {
                if (other === result[i]) {
                    already = true;
                    break;
                }
            }
            if (!already) {
                result.push(other);            
            }
        }
        if (other <= total_numbers_to_choose_from) {
            // Print results
            console.log(result);
        }
    }, total_numbers_to_choose_from, how_many_good_numbers_i_want);
}

function c(next, total_numbers, length, start, results) {
    if (!start) start = 1;
    if (!results) results = [];

    for (var i = start; i <= total_numbers + 1 - length; i++) {
        var resultsNew = results.slice(0);
        resultsNew.push(i);
        if (length > 1) {
            c(next, total_numbers, length - 1, i + 1, resultsNew);
        } else {
            next(resultsNew);
        }
    }
}

কিছু উদাহরণ ফলাফল:

> min_lottery_tickets(5, 3, 2)
[ 1, 2, 3 ]
[ 1, 3, 4 ]
[ 1, 4, 5 ]
[ 2, 3, 4 ]
[ 2, 4, 5 ]
[ 3, 4, 5 ]

অন্য:

> min_lottery_tickets(10, 5, 2)
[ 1, 2, 3, 4, 5 ]
[ 1, 3, 4, 5, 6 ]
[ 1, 4, 5, 6, 7 ]
[ 1, 5, 6, 7, 8 ]
[ 1, 6, 7, 8, 9 ]
[ 1, 7, 8, 9, 10 ]
[ 2, 3, 4, 5, 6 ]
[ 2, 4, 5, 6, 7 ]
[ 2, 5, 6, 7, 8 ]
[ 2, 6, 7, 8, 9 ]
[ 2, 7, 8, 9, 10 ]
[ 3, 4, 5, 6, 7 ]
[ 3, 5, 6, 7, 8 ]
[ 3, 6, 7, 8, 9 ]
[ 3, 7, 8, 9, 10 ]
[ 4, 5, 6, 7, 8 ]
[ 4, 6, 7, 8, 9 ]
[ 4, 7, 8, 9, 10 ]
[ 5, 6, 7, 8, 9 ]
[ 5, 7, 8, 9, 10 ]
[ 6, 7, 8, 9, 10 ]

অন্য:

> min_lottery_tickets(10, 5, 3)
[ 1, 2, 3, 4, 5 ]
[ 1, 2, 4, 5, 6 ]
[ 1, 2, 5, 6, 7 ]
[ 1, 2, 6, 7, 8 ]
[ 1, 2, 7, 8, 9 ]
[ 1, 2, 8, 9, 10 ]
[ 1, 3, 4, 5, 6 ]
[ 1, 3, 5, 6, 7 ]
[ 1, 3, 6, 7, 8 ]
[ 1, 3, 7, 8, 9 ]
[ 1, 3, 8, 9, 10 ]
[ 1, 4, 5, 6, 7 ]
[ 1, 4, 6, 7, 8 ]
[ 1, 4, 7, 8, 9 ]
[ 1, 4, 8, 9, 10 ]
[ 1, 5, 6, 7, 8 ]
[ 1, 5, 7, 8, 9 ]
[ 1, 5, 8, 9, 10 ]
[ 1, 6, 7, 8, 9 ]
[ 1, 6, 8, 9, 10 ]
[ 1, 7, 8, 9, 10 ]
[ 2, 3, 4, 5, 6 ]
[ 2, 3, 5, 6, 7 ]
[ 2, 3, 6, 7, 8 ]
[ 2, 3, 7, 8, 9 ]
[ 2, 3, 8, 9, 10 ]
[ 2, 4, 5, 6, 7 ]
[ 2, 4, 6, 7, 8 ]
[ 2, 4, 7, 8, 9 ]
[ 2, 4, 8, 9, 10 ]
[ 2, 5, 6, 7, 8 ]
[ 2, 5, 7, 8, 9 ]
[ 2, 5, 8, 9, 10 ]
[ 2, 6, 7, 8, 9 ]
[ 2, 6, 8, 9, 10 ]
[ 2, 7, 8, 9, 10 ]
[ 3, 4, 5, 6, 7 ]
[ 3, 4, 6, 7, 8 ]
[ 3, 4, 7, 8, 9 ]
[ 3, 4, 8, 9, 10 ]
[ 3, 5, 6, 7, 8 ]
[ 3, 5, 7, 8, 9 ]
[ 3, 5, 8, 9, 10 ]
[ 3, 6, 7, 8, 9 ]
[ 3, 6, 8, 9, 10 ]
[ 3, 7, 8, 9, 10 ]
[ 4, 5, 6, 7, 8 ]
[ 4, 5, 7, 8, 9 ]
[ 4, 5, 8, 9, 10 ]
[ 4, 6, 7, 8, 9 ]
[ 4, 6, 8, 9, 10 ]
[ 4, 7, 8, 9, 10 ]
[ 5, 6, 7, 8, 9 ]
[ 5, 6, 8, 9, 10 ]
[ 5, 7, 8, 9, 10 ]
[ 6, 7, 8, 9, 10 ]

1
আপনার min_lottery_tickets(10, 5, 2)ওপির তুলনায় অনেক বেশি সমাধান উত্পন্ন হয়।
গ্রু

আমি @ গ্রু জানি, আমি বলেছিলাম যে আমি জানতাম এটি অনুকূল নয়, তবে এটি আমার প্রথম কার্যকরী সংস্করণ ছিল;) "অপ্রয়োজনীয়" ফলাফলগুলি কীভাবে সরিয়ে ফেলা যায় সে সম্পর্কে কোনও পরামর্শ?
গ্রেজ

হাই গ্রু, হাই গ্রুজ, এই প্রথম প্রয়াসের জন্য অনেক ধন্যবাদ। আপনার স্কোর 21 আছে (কারণ আপনি 21 টি টিকিট তৈরি করেছেন (10,5,2))। আমি কীভাবে অপ্রয়োজনীয় ফলাফলগুলি সরাতে জানি না, সে কারণেই আমি এই বিষয়টি তৈরি করেছি। আমি এখনও ভাবছি যে এই কাজটি করার জন্য সেরা অ্যালগরিদমটি কেমন দেখাচ্ছে।
xem

বিষয় সম্পর্কে এখানে কিছু ভাল পাঠ্য রয়েছে: (১) ডিপ.সুন.এক.জা / আভুউরেন / পেপারস / ক্লোটি_আর্টিকেল 1 উড.পিডিএফ , (২) goo.gl/Ex7Woa , (3) google.fr/…
xem

1
এটি একটি এনপি-সম্পূর্ণ সমস্যা, তাই আমি ভয় করি যে কোনও যাদু সমাধান নেই। আমাদের সমস্ত সম্ভাব্য টিকিটের গণনা এবং অন্য সমস্ত টিকিটের সাথে তার প্রতিটি সংখ্যার গ্রুপের তুলনা করে যারা অপ্রয়োজনীয় তাদের বিলোপ করতে হবে "জোর জোর" have এটি একটি ক্ষতিকারক সময় নিতে হবে।
xem
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.