• [^] # Re: Force Brute.

    Posté par (Mastodon) . En réponse au message Avent du Code jour 15. Évalué à 2.

    D'ailleurs, en utilisant la technique de l'exercice 2 on peut refaire l'exercice 1 en immédiat :

    # Pas de zone comme pour l'exo1, on retourne les intervalles comme pour l'exo2
    class RobotSensor:
     def __init__(self, *args):
     self.sx, self.sy, self.bx, self.by, *self.other = args
     self.distance = manhattan(*args)
     def __contains__(self, line):
     return abs(self.sy-line) <= self.distance
     def __getitem__(self, line):
     deltax = self.distance - abs(self.sy-line)
     return self.sx-deltax, self.sx+deltax
    sensors = [RobotSensor(*(int(x) for x in line)) for line in data]
    r = sorted([sensor[line_to_check] for sensor in sensors if line_to_check in sensor])
    xmin, xmax, holes = r[0][0], 0, 0
    for s, e in r:
     if s > xmax:
     holes += s - xmax
     xmax = max(xmax, e)
    beacons = len(set(s.bx for s in sensors if s.by == line_to_check))
    result1 = xmax - xmin + 1 - holes - beacons
    print(f"No beacon on {result1} positions"
     f" [{xmin}->{xmax}, {holes} holes and {beacons} beacons]\n")

    Le calcul est immédiat.

    • Yth.