On a personal note, this question is actually one of the first interview questions I had to work through for a college internship at a giant tech company. It could have gone better; I got the internship anyways. So let’s see if I can redeem myself. I’m going to try to solve it “live”.
Approach
I know (from many years ago, and hopefully also many more years of experience) that I want to do nice-and-simple helper functions. So things like “columnWins”, “rowWins”, etc. Well, I know that Python is friendly enough where I just made a generic helper that would say which, if any, player won any length-3 sequence of values. Then I simply iterated over all relevant length-3 sequences. It’s not a small amount of code.
I had a few typos I fixed up. There are inefficiencies and redundancies, nevermind the allocations, but it’s straightforward and readable enough. The other python solutions, those that won as “best practices”, are a bit more explicit about it being a 3×3 matrix.
def seq_wins(seq):
assert(len(seq) == 3)
V = seq[0]
if V == 0: return 0
for v in seq[1:]:
if v != V:
return 0
return V
def is_solved(board):
# Check rows:
for r in board:
w = seq_wins(r)
if w != 0:
return w
# Check columns
for c in range(3):
col = []
for r in board:
col.append(r[c])
w = seq_wins(col)
if w != 0:
return w
# Check diagonals
d1 = []
d2 = []
for i in range(3):
d1.append(board[i][i])
d2.append(board[i][2-i])
w = seq_wins(d1)
if w != 0:
return w
w = seq_wins(d2)
if w != 0:
return w
for r in board:
for v in r:
if v == 0:
return -1
return 0
Take-Aways
I like this question as an interview question, actually. The reasoning-by-cases is nice and comes up in the real world. Sure, 2D arrays aren’t very common in my experience, but as a proxy for indexing into a nontrivial data structure, it’s a good one. I think a natural approach (obviously, given my own approach) is to make a helper function, either explicitly or at least implicitly, and seeing how a candidate thinks to draw the line of where/how to make a helper function can be a good insight into their views.