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); }
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); }
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); }