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); }
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); }