예제 #1
0
        /// <summary>
        /// Get the producer with the longest interval between two consecutive awards
        /// </summary>
        /// <param name="movies">List of winning films</param>
        /// <returns>List of winning producers longest interval</returns>
        private IEnumerable <dynamic> ProducerLongestInterval(IEnumerable <MoviesInfo> movies)
        {
            var query = movies.GroupBy(g => g.Producer)
                        .Where(g => g.Count() > 1).ToList();

            var longest = query
                          .Select(g =>
            {
                MoviesInfoResult Max = new MoviesInfoResult()
                {
                    MaxInterval = Int32.MinValue
                    ,
                    Delta = 0
                    ,
                    PreviousWin = 0
                    ,
                    FollowingWin = 0
                    ,
                    Producer = ""
                };

                for (int i = 1; i < g.Count(); i++)
                {
                    MoviesInfo previous = g.ElementAt(i - 1),
                    current             = g.ElementAt(i);

                    Max.Delta = Math.Abs(current.Year - previous.Year);

                    if (Max.Delta > Max.MaxInterval)
                    {
                        Max.MaxInterval  = Max.Delta;
                        Max.PreviousWin  = previous.Year;
                        Max.FollowingWin = current.Year;
                        Max.Producer     = current.Producer;
                    }
                }

                return(new { Max });
            })
                          .ToList();

            var biggerInterval         = longest.Max(x => x.Max.MaxInterval);
            var biggerIntervalProducer = longest.Where(x => x.Max.MaxInterval == biggerInterval);

            return(biggerIntervalProducer);
        }
예제 #2
0
        /// <summary>
        /// Get the producer who wins two awards faster
        /// </summary>
        /// <param name="movies">List of winning films</param>
        /// <returns>List of producers</returns>
        private IEnumerable <dynamic> ProducerFastWinner(IEnumerable <MoviesInfo> movies)
        {
            var query = movies.GroupBy(g => g.Producer)
                        .Where(g => g.Count() > 1).ToList();

            var faster = query
                         .Select(g =>
            {
                MoviesInfoResult Min = new MoviesInfoResult()
                {
                    MinInterval = Int32.MaxValue
                    ,
                    Delta = 0
                    ,
                    PreviousWin = 0
                    ,
                    FollowingWin = 0
                    ,
                    Producer = ""
                };

                for (int i = 1; i < g.Count(); i++)
                {
                    MoviesInfo previous = g.ElementAt(i - 1),
                    current             = g.ElementAt(i);

                    Min.Delta = Math.Abs(current.Year - previous.Year);

                    if (Min.Delta < Min.MinInterval)
                    {
                        Min.MinInterval  = Min.Delta;
                        Min.PreviousWin  = previous.Year;
                        Min.FollowingWin = current.Year;
                        Min.Producer     = current.Producer;
                    }
                }

                return(new { Min });
            }).ToList();

            var shorterInterval         = faster.Min(x => x.Min.MinInterval);
            var shorterIntervalProducer = faster.Where(x => x.Min.MinInterval == shorterInterval);

            return(shorterIntervalProducer);
        }