I was solving this question on a site that gives you a 1d array called
grid = ['top left', 'top middle', 'top right', 'middle left', 'center', 'middle right', 'bottom left', 'bottom middle', 'bottom right']
and you’re expected to write a method
fire(x,y) that takes in two coordinates and gives you back where you hit the grid.
fire(0,0) # 'top left' fire(1,2) # 'bottom middle'
Here is my solution, I used NumPy for it.
import numpy as np def fire(x,y): #the grid is preloaded as you can see in description oneDArray = np.array(grid) twoDArray = oneDArray.reshape(3,3) return twoDArray[y][x]
I’m looking to get some feedback on the answer.
That works, but if your only goal is to implement
fire(x, y), then NumPy is overkill.
def fire(x, y): return grid[3 * y + x]
A few issues:
- Probably better to follow pep8
- This isn’t a method, it is a function
- When doing 2D
numpyindexes, you can do
- You don’t really need a numpy array, a list of lists works just as well. Or better yet just just translate the 2D index into a linear index mathematically. This also avoids the substantial overhead of converting the list to a numpy array. You could even use
np.ravel_multi_indexto do the 2D to 1D conversion for you.