Beispiel #1
0
        public static int Solve1(List <string> data)
        {
            var claims = data.Select(Parse).ToList();

            var fabric = new Dictionary <SquareInch, int>();

            foreach (var claim in claims)
            {
                for (var i = 0; i < claim.Width; i++)
                {
                    for (var j = 0; j < claim.Height; j++)
                    {
                        var claimedSquare = new SquareInch {
                            Left = claim.Left + i, Top = claim.Top + j
                        };
                        if (!fabric.ContainsKey(claimedSquare))
                        {
                            fabric.Add(claimedSquare, 0);
                        }

                        fabric[claimedSquare]++;
                    }
                }
            }

            return(fabric.Values.Count(v => v > 1));
        }
Beispiel #2
0
        public static int Solve2(List <string> data)
        {
            var claims = data.Select(Parse).ToList();

            var fabric     = new Dictionary <SquareInch, List <int> >();
            var noOverlaps = new HashSet <int>();

            foreach (var claim in claims)
            {
                var hasOverlaps = false;
                for (var i = 0; i < claim.Width; i++)
                {
                    for (var j = 0; j < claim.Height; j++)
                    {
                        var claimedSquare = new SquareInch {
                            Left = claim.Left + i, Top = claim.Top + j
                        };
                        if (!fabric.ContainsKey(claimedSquare))
                        {
                            fabric.Add(claimedSquare, new List <int>());
                        }
                        else
                        {
                            hasOverlaps = true;
                            foreach (var overlapping in fabric[claimedSquare])
                            {
                                if (noOverlaps.Contains(overlapping))
                                {
                                    noOverlaps.Remove(overlapping);
                                }
                            }
                        }

                        fabric[claimedSquare].Add(claim.Id);
                    }
                }

                if (!hasOverlaps)
                {
                    noOverlaps.Add(claim.Id);
                }
            }

            return(noOverlaps.Single());
        }
Beispiel #3
0
 public bool Equals(SquareInch other)
 {
     return(Top == other.Top && Left == other.Left);
 }