//simple approach for initial team building :: evaluation based on transfers in/out and ownership (collective intelligence) public double EvaluatePlayerByTransfersAndOwnership(FplPlayer player) { var transferDifferential = (player.TransfersInEvent > player.TransfersOutEvent) ? (1 - (1 / EvaluateTransferDifferential(player))) : (EvaluateTransferDifferential(player) - 1); var ownershipMultiplier = 1 - 1 / player.OwnershipPercentage; return((transferDifferential * 0.75) + (ownershipMultiplier * 0.25)); }
public async Task <int> GetTeamId() { HttpClientHandler handler = new HttpClientHandler(); var response = await _httpClient.GetAuthAsync(CreateHandler(handler), "me/"); response.EnsureSuccessStatusCode(); var content = await response.Content.ReadAsStringAsync(); //if teamId not found from api call if (JObject.Parse(content).SelectToken("player").Type == JTokenType.Null) { return(0); } var userDetailsJson = AllChildren(JObject.Parse(content)) .First(c => c.Type == JTokenType.Object && c.Path.Contains("player")); FplPlayer fplPlayer = new FplPlayer(); fplPlayer = userDetailsJson.ToObject <FplPlayer>(); string cookie = Request.Cookies["teamId"]; if (cookie == null) { SetCookie("teamId", fplPlayer.entry.ToString(), null); } return(fplPlayer.entry); //return 666471; }
public void IsSquadValid_ShouldReturnTrue_WhereNumberOfPlayersFromTeamIsLessThanThreeAndCostIsWithinRange() { // Arrange var mockFplPlayer = new FplPlayer(); mockFplPlayer.NowCost = 330; mockFplPlayer.TeamId = 10; var squad = new Dictionary <FplPlayerPosition, List <EvaluatedFplPlayer> > { { FplPlayerPosition.Forward, new List <EvaluatedFplPlayer> { new EvaluatedFplPlayer(mockFplPlayer, 0.01), new EvaluatedFplPlayer(mockFplPlayer, 0.01), new EvaluatedFplPlayer(mockFplPlayer, 0.01) } } }; // Act var result = _sut.IsValidSquad(squad); // Assert Assert.True(result); }
public void IsSquadValid_ShouldReturnFalse_WhereNumberOfPlayersFromTeamIsGreaterThanMaxPlayersPerTeam() { // Arrange var mockFplPlayer = new FplPlayer(); mockFplPlayer.NowCost = 250; mockFplPlayer.TeamId = 10; var squad = new Dictionary <FplPlayerPosition, List <EvaluatedFplPlayer> > { { FplPlayerPosition.Forward, new List <EvaluatedFplPlayer> { new EvaluatedFplPlayer(mockFplPlayer, 0.01), new EvaluatedFplPlayer(mockFplPlayer, 0.01), new EvaluatedFplPlayer(mockFplPlayer, 0.01), new EvaluatedFplPlayer(mockFplPlayer, 0.01) } } }; // Act var result = _sut.IsValidSquad(squad); // Assert Assert.False(result); }
private static PropertyInfo[] GetKeyProperties(this FplPlayer player) { var keyProperties = new List <string>() { "FirstName", "SecondName", "TotalPoints", "NowCost", "ValueSeason", "EpNext" }; return(player.GetType().GetProperties().Where(p => keyProperties.Contains(p.Name.ToString())).ToArray()); }
public static string GetPartialPlayerString(this FplPlayer player) { var properties = player.GetKeyProperties(); var sb = new StringBuilder(); foreach (var info in properties) { var value = info.GetValue(player, null) ?? "(null)"; sb.AppendLine(info.Name + ": " + value.ToString()); } return(sb.ToString()); }
public void IsSquadValid_ShouldReturnFalse_WhereTotalCostOfPlayersIsNotWithinRange(int totalSquadCost) { // Arrange var mockFplPlayer = new FplPlayer(); mockFplPlayer.NowCost = totalSquadCost; mockFplPlayer.TeamId = 10; var squad = new Dictionary <FplPlayerPosition, List <EvaluatedFplPlayer> > { { FplPlayerPosition.Forward, new List <EvaluatedFplPlayer> { new EvaluatedFplPlayer(mockFplPlayer, 0.01) } } }; // Act var result = _sut.IsValidSquad(squad); // Assert Assert.False(result); }
private double EvaluateTransferDifferential(FplPlayer player) { return((double)(player.TransfersInEvent + 1) / (player.TransfersOutEvent + 1)); }
public EvaluatedFplPlayer(FplPlayer playerInfo, double evaluation) { PlayerInfo = playerInfo; Evaluation = evaluation; }