public GameUnit FindBest(GameUnit[] gameUnits, Game game)
 {
     return gameUnits.Select(x => new
                                 {
                                     Score = x.GetAbsolutePoints().Sum(point => point.Row*point.Row),
                                     GameUnit = x,
                                     BottomLeft = x.BottomLeft()
                                 })
                     .OrderByDescending(x => x.BottomLeft.Row)
                     .ThenByDescending(x => x.Score)
                     .ThenBy(x => x.BottomLeft.Col)
                     .First()
                     .GameUnit;
 }
        public GameUnit FindBest(GameUnit[] positions, Game game)
        {
            var orderedPositions = positions
                .Select(x =>
                    new
                    {
                        GameUnit = x,
                        Profit = GetScore(x.UnitPosition, game)
                    })
                .OrderByDescending(x => x.Profit.BusyRows)
                .ThenByDescending(x => x.Profit.DiverScore + x.Profit.ReachableCount + x.Profit.DensityScore);

            return orderedPositions
                .First()
                .GameUnit;
        }