Ejemplo n.º 1
0
        private static double CornerIDs(string[] input)
        {
            List <Photo> photos = ParsePhotos(input);

            PhotoGrid ordered = PlacePhotos(photos);

            double res = 1;

            foreach (var photo in ordered.Values)
            {
                if (ordered.GetAdjacentValues(photo.Key).Length == 2)
                {
                    res *= photo.Value.id;
                }
            }

            return(res);
        }
Ejemplo n.º 2
0
        private static PhotoGrid PlacePhotos(List <Photo> photos)
        {
            PhotoGrid grid = new PhotoGrid();

            while (photos.Count > 0)
            {
                foreach (var coordinate in grid.GetEmptySpaces())
                {
                    bool added = false;
                    foreach (var newPhoto in photos)
                    {
                        foreach (var orientation in newPhoto.GetAllOrientations())
                        {
                            bool correct = true;
                            foreach (var nearbyPhotoData in grid.GetAdjacentValuesAndCoordinates(coordinate))
                            {
                                int   x           = nearbyPhotoData.Item1;
                                int   y           = nearbyPhotoData.Item2;
                                Photo nearbyPhoto = nearbyPhotoData.Item3;
                                if (!orientation.Borders(nearbyPhoto, (x, y)))
                                {
                                    correct = false;
                                }
                            }
                            if (correct)
                            {
                                grid.Add(coordinate, orientation);
                                photos.Remove(newPhoto);
                                added = true;
                                break;
                            }
                        }
                        if (added)
                        {
                            break;
                        }
                    }
                }
            }

            return(grid);
        }