static void Main(string[] args) { List<EnvelopePair> envelopePairs = new List<EnvelopePair>(); IRandomProvider randomProvider = new StandardRandomProvider(); IPicker picker = new CoverStrategyPicker(); // change picker here // maximum envelope pairs int maxEnvelopePairs = 1000000; // fill envelopes with random values for (int i = 0; i < maxEnvelopePairs; i++) { EnvelopePair envelopePair = new EnvelopePair(); envelopePair.Init(randomProvider); envelopePairs.Add(envelopePair); } // our balance is 0 at the moment int money = 0; // lets pick envelopes for (int i = 0; i < envelopePairs.Count; i++) { EnvelopePair currentEnvelopePair = envelopePairs[i]; money += picker.Pick(randomProvider, currentEnvelopePair); } Console.WriteLine("Your balance is: " + money); }
public int Pick(IRandomProvider randomProvider, EnvelopePair envelopePair) { int amount = 0; int randomValue = randomProvider.Next(1, max); /* * То есть чем меньше сумма в конверте А, тем с большей вероятностью следует сменить конверт и наоборот, * несколько большая сумма в А говорит о том, что скорее следует оставить первый конверт себе. */ if (envelopePair.FirstEnvelope.Amount <= randomValue) { amount = envelopePair.SecondEnvelope.Amount; } else { amount = envelopePair.FirstEnvelope.Amount; } if (amount > max) max = amount; return amount; }
public int Pick(IRandomProvider randomProvider, EnvelopePair envelopePair) { return envelopePair.SecondEnvelope.Amount; }