public void DetermineCandidateRank(List<Candidate> candidatesByNow, Candidate newCandidate, Random rand)
        {
            int newCandidateIndex = InsertNewCandidate(candidatesByNow, newCandidate);

            var accepted = Decide(candidatesByNow, newCandidateIndex, rand);

            newCandidate.CandidateAccepted = accepted;
        }
        private int InsertNewCandidate(List<Candidate> candidatesByNow, Candidate newCandidate)
        {
            int newCandidateIndex = 0;
            foreach (var candidate in candidatesByNow)
            {
                if (candidate.CandidateRank > newCandidate.CandidateRank)
                {
                    break;
                }

                newCandidateIndex++;
            }

            candidatesByNow.Insert(newCandidateIndex, newCandidate);
            return newCandidateIndex;
        }
        public static List<Candidate> GenerateCandidatesForPosition()
        {
            var positionCandidates = new List<Candidate>();

            for (var candidateIndex = 0; candidateIndex < RestaurantConstants.TotalCandidates; candidateIndex++)
            {
                var newCandidate = new Candidate()
                {
                    CandidateAccepted = false
                };

                positionCandidates.Add(newCandidate);
            }

            return positionCandidates;
        }
        public static int[] ReadNextVector(StreamReader sr, out bool terminate, ref int vectorNum, Random rand)
        {
            terminate = false;

            var positionNumber = 0;

            int[] accepted = new int[RestaurantConstants.TotalPositions];
            int[] intRanks = new int[RestaurantConstants.TotalCandidates];
            string line = sr.ReadLine();

            if (line == null)
            {
                terminate = true;
                return accepted;
            }

            while (line != null)
            {
                if (line.StartsWith("--") || line == string.Empty)
                {
                    if (line.StartsWith("--"))
                    {
                        vectorNum++;
                    }
                    else
                    {
                        break;
                    }

                    line = sr.ReadLine();
                    positionNumber = 0;
                    continue;
                }

                string[] ranks = line.Split(' ');

                int i = 0;
                bool skipLine = false;
                foreach (string rank in ranks)
                {
                    int intRank;
                    if (rank == string.Empty)
                    {
                        continue;
                    }

                    if (!int.TryParse(rank, out intRank))
                    {
                        line = sr.ReadLine();
                        skipLine = true;
                        break;
                    }

                    intRanks[i] = intRank;
                    i++;
                }

                if (skipLine)
                {
                    continue;
                }

                var candidatesByNow = new List<Candidate>();
                int chosenRank = 0;
                for (i = 0; i < intRanks.Length; i++)
                {
                    var newCandidate = new Candidate() { CandidateRank = intRanks[i] };
                    DecisionMaker.GetInstance().DetermineCandidateRank(candidatesByNow, newCandidate, rand);

                    if (newCandidate.CandidateAccepted)
                    {
                        chosenRank = intRanks[i];
                        accepted[positionNumber] = chosenRank;
                        break;
                    }
                }

                positionNumber++;

                line = sr.ReadLine();
            }

            return accepted;
        }