//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));
        }
Ejemplo n.º 2
0
        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;
 }