Guest User

Untitled

a guest
Dec 11th, 2018
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.79 KB | None | 0 0
  1. from scipy.signal import convolve2d
  2. from scipy.ndimage.filters import convolve1d
  3. input_serial_num = 1718
  4.  
  5. def my_convolve2d(matrix, size=3):
  6. kernel = np.ones(size)
  7. intermediate = convolve1d(matrix, kernel, axis=0,
  8. mode='constant',origin=(size-1)//2)[:matrix.shape[1]-(size-1):]
  9. return convolve1d(intermediate, kernel, axis=1,
  10. mode='constant', origin=(size-1)//2)[:,:matrix.shape[0]-(size-1)]
  11.  
  12. def hundreds_digit(x):
  13. return x//100 - x//100//10*10
  14.  
  15. hdv = np.vectorize(hundreds_digit)
  16.  
  17. def power_matrix(serial_num, shape=(300,300)):
  18. rackid = (np.arange(shape[0])+1)+10
  19. y_vals = np.arange(shape[1])+1
  20. return hdv((rackid[:,np.newaxis]*y_vals[np.newaxis,:] + serial_num)*rackid[:,np.newaxis])-5
  21.  
  22.  
  23. def find_largest_square(matrix, shape=(3,3)):
  24. #kernel = np.ones(shape)
  25. #convolved_matrix = convolve2d(matrix, kernel, mode='valid')
  26. convolved_matrix = my_convolve2d(matrix, shape[0])
  27. indicies = np.unravel_index(np.argmax(convolved_matrix), convolved_matrix.shape)
  28. power = convolved_matrix[indicies]
  29. return np.array(np.unravel_index(np.argmax(convolved_matrix), convolved_matrix.shape))+1, power
  30.  
  31. find_largest_square(power_matrix(input_serial_num))
  32.  
  33. #------Part 2------
  34. def find_largest_square_shape(matrix):
  35. max_power = 0
  36. max_indicies = None
  37. max_size = 0
  38. for square_shape in range(1,301):
  39. #print(square_shape)
  40. indicies, power = find_largest_square(matrix, shape=(square_shape, square_shape))
  41. max_indicies = indicies if power>max_power else max_indicies
  42. max_size = square_shape if power>max_power else max_size
  43. max_power = power if power>max_power else max_power
  44. return max_indicies, max_size, max_power
  45.  
  46. find_largest_square_shape(power_matrix(input_serial_num))
Add Comment
Please, Sign In to add comment