খাবারের সর্বাধিক ক্যালোরি-এমনকি ব্যবস্থা বাছাই করা


9

ধরুন আমি একদিনে পাঁচটি খাবার খাই এবং সপ্তাহে সাত দিন থাকায় আমার কাছে মোট খাবারের জন্য মোট 35 টি রেসিপি রয়েছে seven প্রতিটি রেসিপি একটি ক্যালোরি গণনা আছে। প্রতি দিন অবশ্যই প্রতিটি খাবারের জন্য একটি রেসিপি থাকা উচিত এবং প্রতিটি রেসিপি নির্দিষ্ট খাবারের সাথে স্থির করা হয় (যেমন আপনার রাতের খাবারের জন্য প্যানকেক থাকতে পারে না)। সমস্ত 35 টি রেসিপি অবশ্যই সমাধানে থাকা উচিত, তাই কোনও রেসিপি সপ্তাহে পুনরাবৃত্তি করা যায় না।

আমি খাবারের ব্যবস্থা খুঁজে পেতে চাই যা প্রতিদিন সবচেয়ে বেশি ক্যালোরি গণনা দেয় - যে, আমি দিনে দিনে মোট ক্যালোরির মধ্যে পার্থক্য হ্রাস করতে চাই।

এটি কোনও হোমওয়ার্কের সমস্যা নয় - এটি আসলে সত্য! আমি ব্রুট ফোর্সের চেয়ে ভাল পদ্ধতির সাথে আসতে পারি না, এবং এখানে!! ^ 4 সংমিশ্রণ রয়েছে যা অনেকটা।


3
আমি একটি অন্ত্রে অনুভূতি যে এই একটি প্রকরণ আছে কাটা স্টক সমস্যা হয়তো বা বিন প্যাকিং সমস্যা
ডোভাল

স্পষ্ট করার জন্য - আপনার কাছে "দিনের প্রথম খাবার" এর জন্য 7 টি, "দ্বিতীয় খাবারের" জন্য 7 টি, "তৃতীয় খাবারের" জন্য 7 টি এবং তাই? আপনি কি "দিনের শেষ খাবার" কোনও "প্রথম খাবার" রেসিপিটি অর্পণ করবেন? (অন্য কোনও উপায়ে রাখুন, আপনি কি রাতের খাবারের জন্য প্যানকেকগুলি পরিবেশন করবেন?)
ড্যান পিচেলম্যান

সঠিক; আবসই ই তুমি না.
dfaulken

2
সমস্ত 35 টি রেসিপিগুলির ক্ষেত্রে কী আলাদা ক্যালোরি রয়েছে? আপনি যদি নিকটস্থ 10 বা 50 ক্যালোরির পরিমাণে ক্যালোরি গণনা করেন তবে!! Easily 4 সহজেই 3! ^ 4 হয়ে উঠতে পারে - যা ব্রুট ফোর্সের মাধ্যমে সহজেই
গণনাযোগ্য

2
ডুড, আপনি অনেক বেশি খান, প্রতিদিন 5 টা খাওয়া আপনার ওজন বাড়বে।
পিটার বি

উত্তর:


1

আপনার সমস্যাটির জন্য আরও আনুষ্ঠানিক পদ্ধতির জন্য:

আপনার কাছে প্রতিটি সংখ্যার 5 টি তালিকা রয়েছে। আপনাকে প্রতিটি 5 টি সংখ্যার 7 টি তালিকা তৈরি করতে হবে এবং সেই সলিউশনটি সন্ধান করতে হবে যার মধ্যে সংখ্যার সর্বাধিক যোগফল এবং সবচেয়ে ক্ষুদ্রতম সহ একটির মধ্যে ন্যূনতম পার্থক্য রয়েছে।

আপনি যদি কোনও হিউরিস্টিক সহ অনুকূল সমাধানটি খুঁজে পেতে চান তবে আমি বিশ্বাস করি যে গণনা করা ছাড়া আপনার কাছে বিকল্প কিছু নেই, তবে আপনাকে সেগুলি সমস্ত গণনা করতে হবে না।

আপনি যে কোনও সমাধান খুঁজে পান না কেন, আপনি যখন এটিকে "এখনও অবধি সেরা পাওয়া" হিসাবে নিবন্ধন করেন তখন আপনার মেট্রিক সম্পর্কিত এর কার্যকারিতাটি নিবন্ধ করুন (আমি বিশ্বাস করি এটি সর্বনিম্নতম পার্থক্য)। তারপরে, যদি কোনও সমাধান শাখা পরিষ্কারভাবে এটি থেকে দূরে থাকে, তবে এটি গণনা বন্ধ করুন। প্রতিলিপি: নিখরচায় দিনগুলিতে সর্বোপরি একটি ক্যালোরি গণনা থাকবে যা বাকি সমস্ত খাবারের গড়। সুতরাং, কল্পনা করুন যে আপনার কাছে [10, 2, 2, 1, 1, 0, 0]সমস্ত 5 খাবারের জন্য তালিকা রয়েছে এবং আপনি সমাধানটি 10 ​​দিনের জন্য প্রতিটি খাবারে তৈরি করেছেন You আপনি জানেন যে বাকী দিনগুলি প্রতিদিন গড়ে 5 ক্যালোরি হবে, তাই পার্থক্য কমপক্ষে 45 টি হবে এবং তাই যদি আপনি এর আগে একটি সমাধান খুঁজে পেয়েছেন, বলুন max - min = 10, আপনাকে আর যেতে হবে না। আপনি সরাসরি 1 দিনের জন্য অন্য একটি মেনু চেষ্টা করবেন।


এটি কোনও বিন সমস্যা নয়। একটি বিন সমস্যাটি বিনের নির্দিষ্ট সংখ্যা এবং বিন প্রতি আইটেমের নির্দিষ্ট সংখ্যা নয়।
পাপারাজ্জো

হ্যাঁ তুমিই ঠিক. আমি যে সঠিক।
আর্থার হাভ্যালিসেক

0

এটি কেবল একটি হ্যাক তবে এটি আপনাকে
কেবলমাত্র তিনটি খাবারের কাছে ফেলবে
আপনি যদি মূলত দু'দিনের গড় সি এর সাথে ঘনিষ্ঠ হন তবে আপনি মূলত ফ্লপ খাবার পান #

একটি আরও ভাল পদ্ধতির ফ্লপ উপর একটি বুলেট ফিরে এবং সম্পূর্ণ হওয়া পর্যন্ত পুনরাবৃত্তি হবে।

ফ্লপ আরও স্মার্ট হতে পারে। আপনি দুপুরের খাবার এবং ডিনারে ফ্লপ নাশতা ফ্লপ না করার অবস্থাতে থাকতে পারেন। সেখানে হার্ড কোডের অনুমতি দেওয়া আছে। এটি একটি সাজানোর মতো যেখানে সাজানোর চেয়ে ফ্লপ মান রয়েছে।

public static void MealEven()
{
    List<Day> Days = new List<Day>();
    Random rnd = new Random();
    decimal sum = 0;
    for(int i = 0; i<7; i ++)
    {
        int b = rnd.Next(100) + 40;
        int l = rnd.Next(100) + 60;
        int d = rnd.Next(100) + 80;
        Meal br = new Meal(enumMeal.b, b);
        Meal lu = new Meal(enumMeal.l, l);
        Meal di = new Meal(enumMeal.d, d);
        Day day = new Day(br, lu, di);
        Days.Add(day);
        sum += day.Calories;
    }
    decimal avg = sum / 7;
    foreach (Day d in Days.OrderBy(x => x.Calories))
        System.Diagnostics.Debug.WriteLine(d.Calories);
    System.Diagnostics.Debug.WriteLine("");

    Day low;
    Day high;
    Day lowLast = null;
    Day highLast = null;
    int count = 0;
    while (true)
    {   // first do high and low
        low = Days.OrderBy(x => x.Calories).FirstOrDefault();
        high = Days.OrderByDescending(x => x.Calories).FirstOrDefault();
        if (lowLast != null && lowLast == low && highLast == high)
            break;
        if (count > 1000)
            break;
        lowLast = low;
        highLast = high;
        count++;               
        Flop(ref high, ref low);
    }
    foreach (Day d in Days.OrderBy(x => x.Calories))
        System.Diagnostics.Debug.WriteLine("{0} {1} {2} {3}", d.Calories, d.B.Calories, d.L.Calories, d.D.Calories);
    System.Diagnostics.Debug.WriteLine("");

    // day a one on one pass
    for (int i = 0; i < 7; i ++)
    {
        for (int j = 0; j < 7; j++)
        {
            if (i == j)
                continue;
            Day d1 = Days[i];
            Day d2 = Days[j];
            Flop(ref d1, ref d2);
        }
    }

    foreach (Day d in Days.OrderBy(x => x.Calories))
        System.Diagnostics.Debug.WriteLine("{0} {1} {2} {3}", d.Calories, d.B.Calories, d.L.Calories, d.D.Calories);
    System.Diagnostics.Debug.WriteLine("");
}
public static void Flop (ref Day high, ref Day low)
{
    if(low.Calories > high.Calories)
    {
        int hold = low.B.Calories;
        low.B.Calories = high.B.Calories;
        high.B.Calories = hold;

        hold = low.L.Calories;
        low.L.Calories = high.L.Calories;
        high.L.Calories = hold;

        hold = low.D.Calories;
        low.D.Calories = high.D.Calories;
        high.D.Calories = hold;

    }
    decimal avg = (low.Calories + high.Calories) / (decimal)2;
    int bDiff = (high.B.Calories - low.B.Calories) < 0 ? 0 : (high.B.Calories - low.B.Calories);
    int lDiff = high.L.Calories - low.L.Calories < 0 ? 0 : (high.L.Calories - low.L.Calories);
    int dDiff = high.D.Calories - low.D.Calories < 0 ? 0 : (high.D.Calories - low.D.Calories);
    // only flop is one does not go past the average  
    if (bDiff > 0 && ((low.Calories + bDiff) < avg || (high.Calories - bDiff) > avg))
    {
        int hold = low.B.Calories;
        low.B.Calories = high.B.Calories;
        high.B.Calories = hold;
    }
    if (lDiff > 0 && ((low.Calories + lDiff) < avg || (high.Calories - lDiff) > avg))
    {
        int hold = low.L.Calories;
        low.L.Calories = high.L.Calories;
        high.L.Calories = hold;
    }
    if (dDiff > 0 && ((low.Calories + dDiff) < avg || (high.Calories - dDiff) > avg))
    {
        int hold = low.D.Calories;
        low.D.Calories = high.D.Calories;
        high.D.Calories = hold;
    }
}
public enum enumMeal {b, l, d};
public class Day
{
    public Meal B { get; set; }
    public Meal L { get; set; }
    public Meal D { get; set; }
    public Decimal Calories { get { return (Decimal)(B.Calories + L.Calories + D.Calories); } }
    public Day (Meal b, Meal l, Meal d )
    {
        B = b;
        L = l;
        D = d;
    }
}
public class Meal
{
    public enumMeal Type { get; set; }
    public int  Calories { get; set; }
    public Meal (enumMeal meal, int calories)
    {
        Type = meal;
        Calories = calories;
    }
}   

1
উত্তরটি আরও সহায়ক / আলোকিত করার জন্য আপনি কীভাবে কোনও ব্যাখ্যা বা কোডটিতে কিছু মন্তব্য যুক্ত করতে পারেন? আমি মনে করি আমি বুঝতে পারি যে সেখানে কী চলছে তবে আমি নিশ্চিত হতে পারি না।
অ্যাডাম ওয়েলস

@ অ্যাডামওয়েলস আমি কয়েকটি মন্তব্য যুক্ত করেছি। তুমি কী বুঝতে পারছ না?
পাপারাজ্জো

এটি কেবল ফ্লপ দিয়ে ক্লিক করেনি। এখনই জ্ঞান বোধ করি, ধন্যবাদ!
অ্যাডাম ওয়েলস

এটি জাভা কোড কিনা তাও আমি বলতে পারি না। তাই কি ? দুঃখিত, আমার জাভা এবং সিএক্স দিনগুলি আমার থেকে অনেক পিছনে। যাইহোক মূল কোথায়?
আর্থার হাভলিসেক

@ আর্থারহোলিসেক কোড সি # তারা দেখতে অনেকটা একই রকম।
পাপারাজ্জো

0

প্রথমে খাবারের জন্য গড় ক্যালোরি গণনা গণনা করুন। তারপরে প্রতিদিন গড় রঙিন গণনা গণনা করুন। এটি এমন মেট্রিকগুলি হবে যার বিরুদ্ধে কেউ পরিমাপ করতে পারে। পরবর্তী খাবারটি বাছাই করুন।

এখনই সাজানো থেকে সর্বাধিক এবং সর্বনিম্ন খাবার বাছাই করুন। যদি কোনও খাবার একই সময়ে স্লটে থাকে তবে আপনাকে সেই সময়ের স্লটে (ডিনার ইত্যাদি) নয় এমন কোনও খাবার খুঁজে না পাওয়া পর্যন্ত আপনাকে পরবর্তী সর্বনিম্ন বা সর্বোচ্চ যেতে হবে। প্রথম 4 খাবারের জন্য এটি করুন (হাই / কম)। 5 তম খাবারে, এমন একটি খাবার বাছুন যা আপনাকে গড়ের নিকটতম করে তোলে। পৃথক বালতিতে 5 তম খাবারটি সংরক্ষণ করুন। ধুয়ে ফেলুন এবং 7 বার পুনরাবৃত্তি করুন।

এটি আপনার প্রথম খাবারের সেট হবে। এটি সুন্দর এমনকি হবে। আপনি যদি সর্বোত্তম বিতরণ চান তবে 5 তম খাবারের সাথে আরও কিছু পরিমার্জন করা যেতে পারে।

5 তম খাবারের বালতিটি দেখুন এবং খাবার এমনকি আরও বাইরে বেরিয়ে আসে কিনা তা দেখতে দিনের মধ্যে 5 তম খাবারের জন্য অদলবদল করার চেষ্টা করুন। আপনাকে এখনও একই নিয়ম প্রয়োগ করতে হবে (সময় প্রতি একাধিক খাবার নয়)। একজন আরও একটি সেট এমনকি পেতে পারে না। উন্নতি আছে কি না তা আগে গণনা করা গড় ব্যবহার করুন। উচ্চ / নিম্নের ভিত্তিতে প্রথম 4 টি খাবার স্থির করা হওয়ায় অনেক কম সংমিশ্রণ হবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.