def placement(): if not api.mon_tour(): return bestval = 0 bestpos = (-1,-1) for i in range(TAILLE_CARTE): for j in range(TAILLE_CARTE): if api.type_case(j,i) == VIDE and api.construction_possible(j,i) != BLOCAGE: val = -plus_proche_route((0,i,j))/2 r = api.portee_monument(api.monument_en_cours()) prestige = api.prestige_monument(api.monument_en_cours()) for y in range(i-r,i+r+1): for x in range(j-r,j+r+1): if not api.type_case(x,y) == MAISON: continue if api.appartenance(x,y) == 0: val += prestige else: val -= prestige if val > bestval: bestval = val bestpos = (i,j) if bestpos[0] < 0: return Build((0,) + bestpos, "monument")
def jouer(): if not api.mon_tour(): return pos = [] for i in range(TAILLE_CARTE): for j in range(TAILLE_CARTE): if api.type_case(j,i) == VIDE or api.type_case(j,i) == RESERVATION \ and api.appartenance(j,i) == 0 and api.construction_possible(j,i) != BLOCAGE: v = api.valeur_case(j,i) - plus_proche_route((0,i,j)); pos.append((v, i, j)); pos.sort() for k in range(2): c = pos.pop() Build(c, "maison") if api.numero_tour() == 15: print "******** Python Final score = ", api.score(0) + api.finances(0), " **********"
def plus_proche_route(c): best_place = () mincost = 1000 how_far = 6 for i in range(c[1]-how_far, c[1]+how_far+1): for j in range(c[2]-how_far, c[2]+how_far+1): if api.type_case(j,i) != ROUTE: continue d = api.distance(j,i,c[2],c[1]) if d > 0 and d < mincost: mincost = d best_place = (i,j) return mincost
def Build(c, what_to_build): if api.type_case(c[2],c[1]) != VIDE: return False best_place = (-1,-1) mincost = 1000 for i in range(TAILLE_CARTE): for j in range(TAILLE_CARTE): if api.type_case(j,i) != ROUTE: continue d = api.distance(j,i,c[2],c[1]) if d > 0 and d < mincost: mincost = d; best_place = (i,j) assert best_place[0] > 0 while max(abs(c[1]-best_place[0]), abs(c[2]-best_place[1])) > 1: if api.finances(0) == 0: vendre_pour(api.cout_achat_route()) best = api.distance(best_place[1],best_place[0],c[2],c[1]) bestdir = 0 for dir in directions4: d = api.distance(best_place[1] + dir[1], best_place[0] + dir[0], c[2], c[1]) if d < best: best = d; bestdir = dir if best >= TROP_LOIN: return False best_place = (best_place[0] + bestdir[0], best_place[1] + bestdir[1]) api.construire_route(best_place[1], best_place[0]) if what_to_build == "maison": vendre_pour(api.cout_achat_route() - api.finances(0)) api.construire_maison(c[2],c[1]) else: assert what_to_build == "monument" api.construire_maison(c[2],c[1]) return True