Exemple #1
0
        private bool TryAlignProbes(Point3Set leftSet, Point3Set rightSet, out NearbyScanner match)
        {
            foreach (Orientation3 orientation in Enum.GetValues(typeof(Orientation3)))
            {
                Point3Set rightSetOriented = rightSet.Orient(orientation);

                foreach (Point3 leftPoint in leftSet)
                {
                    foreach (Point3 rightPoint in rightSetOriented)
                    {
                        Point3    offset = leftPoint - rightPoint;
                        Point3Set temp   = rightSetOriented.Shift(offset);
                        temp.IntersectWith(leftSet);

                        if (temp.Count >= 12)
                        {
                            match = new NearbyScanner(new Scanner(rightSetOriented), offset);
                            return(true);
                        }
                    }
                }
            }

            match = null;
            return(false);
        }
Exemple #2
0
        private List <Point3Set> ReadInputFromFile()
        {
            List <Point3Set> list = new List <Point3Set>();
            Point3Set        set  = null;

            foreach (string line in File.ReadAllLines("Day19Input.txt"))
            {
                if (line.StartsWith("---"))
                {
                    set = new Point3Set();
                }
                else if (string.IsNullOrWhiteSpace(line))
                {
                    list.Add(set);
                    set = null;
                }
                else
                {
                    int[] parts = line.Split(',').Select(int.Parse).ToArray();
                    set.Add(new Point3(parts[0], parts[1], parts[2]));
                }
            }

            list.Add(set);

            return(list);
        }
Exemple #3
0
            private static void MergeHelper(Scanner merged, Scanner current, Point3 offset)
            {
                foreach (NearbyScanner nearby in current.NearbyScanners)
                {
                    Point3    totalOffset = nearby.Offset + offset;
                    Point3Set shift       = nearby.Scanner.Probes.Shift(totalOffset);

                    merged.Probes.UnionWith(shift);

                    MergeHelper(merged, nearby.Scanner, totalOffset);
                }
            }
Exemple #4
0
 public Scanner(Point3Set probes)
 {
     Probes         = probes;
     NearbyScanners = new List <NearbyScanner>();
 }