Gustav (Python 2)
This is a pretty straight forward meta strategy, shamelessly copied from one of my old answers. It considers a few simple strategies, looks how they would have performed over all previous rounds, and then follows the highest scoring one for the next round.
def choose(k, N, h):
if k<2: return 999
H = [[int(x) for x in l.split()] for l in h]
score = lambda x,l: sum(abs(x-y)**.5 for y in l)
S = [range(1,1000)
+ [max(range(1,1000), key=lambda x: score(x, H[i-1]))]
+ [max(range(1,1000), key=lambda x: score(x, H[i-2]))]
+ [min(range(1,1000), key=lambda x: score(x, H[i-1]))]
+ [min(range(1,1000), key=lambda x: score(x, H[i-2]))]
for i in range(2,k+1)]
scores = [sum(score(s[j],l) for s,l in zip(S[:-1], H[2:]))
for j in range(len(S[0]))]
return max(zip(scores, S[-1]))[1]