public static int DistanceClosestToCentralPortByLength(DirectionPath wireA, DirectionPath wireB) { var bounds = GetBounds(wireA, wireB); var grid = new GridValue[bounds.size.x, bounds.size.y]; var gridDistanceA = new int[bounds.size.x, bounds.size.y]; var gridDistanceB = new int[bounds.size.x, bounds.size.y]; var centralPortPosition = new Vector2Int(Mathf.Abs(bounds.min.x), Mathf.Abs(bounds.min.y)); grid[centralPortPosition.x, centralPortPosition.y] = GridValue.CentralPort; grid = FillGrid(grid, wireA, GridValue.A, GridValue.B, centralPortPosition, gridDistanceA); grid = FillGrid(grid, wireB, GridValue.B, GridValue.A, centralPortPosition, gridDistanceB); var minDistance = Int32.MaxValue; for (int y = grid.GetLength(1) - 1; y >= 0; y--) { for (int x = 0; x < grid.GetLength(0); x++) { if (grid[x, y] == GridValue.AB) { minDistance = Mathf.Min(minDistance, gridDistanceA[x, y] + gridDistanceB[x, y]); } } } return(minDistance); }
public static int DistanceClosestToCentralPort(DirectionPath wireA, DirectionPath wireB) { var bounds = GetBounds(wireA, wireB); var grid = new GridValue[bounds.size.x, bounds.size.y]; var centralPortPosition = new Vector2Int(Mathf.Abs(bounds.min.x), Mathf.Abs(bounds.min.y)); grid[centralPortPosition.x, centralPortPosition.y] = GridValue.CentralPort; grid = FillGrid(grid, wireA, GridValue.A, GridValue.B, centralPortPosition); grid = FillGrid(grid, wireB, GridValue.B, GridValue.A, centralPortPosition); //var str = ""; var minDistance = Int32.MaxValue; for (int y = grid.GetLength(1) - 1; y >= 0; y--) { for (int x = 0; x < grid.GetLength(0); x++) { //str += GridValueToChar(grid[x, y]); if (grid[x, y] == GridValue.AB) { minDistance = Mathf.Min(minDistance, Mathf.Abs(x - centralPortPosition.x) + Mathf.Abs(y - centralPortPosition.y)); } } //str += "\n"; } //Debug.Log(str); return(minDistance); }