Esempio n. 1
0
            public void Calculate()
            {
                {
                    var x1 = nums[0];
                    
                    for (int i = 1; i < nums.Count; i++)
                    {
                        var x2 = nums[i];
                        foreach (var x3 in nums.Where(x => x != x1 && x != x2))
                        {
                            foreach (var x4 in nums.Where(x => x != x1 && x != x2 && x != x3))
                            {
                                var x5 = nums.Find(x => x != x1 && x != x2 && x != x3 && x != x4);
                                var lines = new Line[5];
                                lines[0] = new Line(x1, x2);
                                lines[1] = new Line(x2, x3);
                                lines[2] = new Line(x3, x4);
                                lines[3] = new Line(x4, x5);
                                lines[4] = new Line(x5, x1);

                                lines[0].Next = lines[1];
                                lines[1].Next = lines[2];
                                lines[2].Next = lines[3];
                                lines[3].Next = lines[4];
                                lines[4].Next = lines[0];

                                if(lines.Select(x => x.InnerTotal).Distinct().Count() < 5)
                                    continue;

                                var min = lines.Min(x => x.InnerTotal);

                                bool isOk = true;
                                foreach (var num in all.Except(nums))
                                {
                                    var first = lines.FirstOrDefault(x => x.InnerTotal + num == min + 10);
                                    if(first == null)
                                    {
                                        isOk = false;
                                        break;
                                    }

                                    first.Insert(num);
                                }

                                if(isOk)
                                {
                                    
                                    list.Add(lines);
                                }
                            }
                        }
                    }

                }
            }
 int GetClosestLineIndex(Line[] lines, Func<Line, float> calcDistance)
 {
     var minValue = lines.Min(calcDistance);
     return Array.FindIndex(lines, c => calcDistance(c) == minValue);
 }