Exemple #1
0
        public override int GetGuessingWeight(int attemptNumber, HashSet <int> triedGuesses)
        {
            Debug.WriteLine(Thread.CurrentThread.Name);
            var guessWeight = new Random().Next(40, 140);

            guessWeight = StoredGuess.Contains(guessWeight) ? new Random().Next(40, 140) : guessWeight;

            return(guessWeight);
        }
Exemple #2
0
        public override int GetGuessingWeight(int attemptNumber, HashSet <int> triedGuesses)
        {
            Debug.WriteLine(Thread.CurrentThread.Name);
            const int startNum    = 40;
            var       currentNum  = startNum + attemptNumber;
            var       guessWeight = currentNum <= 140 && currentNum > startNum ? currentNum : startNum + attemptNumber;

            guessWeight = StoredGuess.Contains(guessWeight) ? currentNum + 1 : guessWeight;

            return(guessWeight);
        }
        public GuessResult Guess(int realBasketWeight, string playerName)
        {
            var result = new GuessResult
            {
                PlayerName       = playerName,
                RealBasketWeight = realBasketWeight
            };

            HashSet <int> triedGuesses = new HashSet <int>();
            var           closestDelta = 0;

            for (var i = 1; i <= 100; i++)
            {
                var guessWeight = GetGuessingWeight(i, triedGuesses);

                triedGuesses.Add(guessWeight);

                StoredGuess.AddGuessWeight(guessWeight);

                if (guessWeight == realBasketWeight)
                {
                    result.TotalAttempts = i;
                    result.IsWinner      = true;
                    return(result);
                }
                var delta = Math.Abs(realBasketWeight - guessWeight);

                StoredGuess.AddDelta(playerName, guessWeight, delta);

                closestDelta = i == 1 ? delta : closestDelta;
                if (delta < closestDelta)
                {
                    result.ClosestGuessWeight = guessWeight;
                    closestDelta = delta;
                }

                Thread.Sleep(delta);
            }
            result.Delta = closestDelta;
            return(result);
        }
Exemple #4
0
        public GuessResult GetWinnerResult(List <Player> players, int realBasketWeight)
        {
            GuessResult winnerResult = new GuessResult();

            // create thread for each player in order to make guess in a concurrence way
            List <Thread> threads = players.Select(player => new Thread(() => { winnerResult = DoGuess(player, realBasketWeight); })
            {
                Name = $"Thread [{players.IndexOf(player)}]"
            })
                                    .ToList();

            // run just created threads
            foreach (Thread t in threads)
            {
                t.Start();
            }

            // join running threads with the main thread
            foreach (Thread t in threads)
            {
                t.Join();
            }

            // get the guess which was closest to the goal
            var closestWeight = StoredGuess.GetClosestWeight();

            // if we have the winner - return winner result object
            if (winnerResult.IsWinner)
            {
                return(winnerResult);
            }

            // if there is no winner - get neccessary info to display about the most closest guess
            winnerResult.PlayerName         = closestWeight.FirstOrDefault().Key;
            winnerResult.ClosestGuessWeight = closestWeight.FirstOrDefault().Value;

            return(winnerResult);
        }