Luna Lailatova
2 years ago
4 changed files with 181 additions and 2 deletions
@ -0,0 +1,61 @@
@@ -0,0 +1,61 @@
|
||||
beacons = [] |
||||
sensors = [] |
||||
lineY = 2000000 |
||||
vectors = [] |
||||
|
||||
def loop(): |
||||
for j in range(len(vectors)): |
||||
for i in range(len(vectors)): |
||||
if j != i: |
||||
if vectors[j][0] in range (vectors[i][0], vectors[i][1]) or vectors[i][0] in range (vectors[j][0], vectors[j][1]): |
||||
tempSt = min(vectors[j][0],vectors[i][0]) |
||||
tempEn = max(vectors[j][1],vectors[i][1]) |
||||
vectors.append((tempSt, tempEn)) |
||||
vectors.pop(max(i, j)) |
||||
vectors.pop(min(i, j)) |
||||
return False |
||||
return True |
||||
|
||||
with open('input15.txt','r') as f: |
||||
inp = f.read().splitlines(keepends=False) |
||||
|
||||
for line in inp: |
||||
tempA, tempB = line.split(': closest beacon is at x=') |
||||
tempA = tempA.replace('Sensor at x=', '') |
||||
tempA = tempA.split(', y=') |
||||
sensors.append(tuple(map(int, tempA))) |
||||
tempB = tempB.split(', y=') |
||||
beacons.append(tuple(map(int, tempB))) |
||||
|
||||
|
||||
|
||||
for i in range(len(sensors)): |
||||
print('checking sensor', i, 'out of', len(sensors) - 1) |
||||
(sensX, sensY) = sensors[i] |
||||
(beacX, beacY) = beacons[i] |
||||
distance = (max(sensX, beacX) - min(sensX, beacX)) + (max(sensY, beacY) - min(sensY, beacY)) |
||||
if sensY <= lineY and (sensY + distance) >= lineY: |
||||
modifier = distance - (lineY - sensY) |
||||
vectors.append((sensX - modifier, sensX + modifier)) |
||||
elif sensY >= lineY and (sensY - distance) <= lineY: |
||||
modifier = distance - (sensY - lineY) |
||||
vectors.append((sensX - modifier, sensX + modifier)) |
||||
|
||||
done = False |
||||
tempA = [] |
||||
|
||||
while not done: |
||||
done = loop() |
||||
|
||||
vectors = sorted(vectors) |
||||
|
||||
CoveredPoints = vectors[-1][1] - vectors[0][0] + 1 |
||||
for i in range(len(vectors) - 1): |
||||
if vectors[i + 1][0] != vectors[i][1]: |
||||
CoveredPoints -= (vectors[i + 1][0] - vectors[i][1] - 1) |
||||
for beacon in beacons: |
||||
if beacon[1] == lineY and beacon not in tempA: |
||||
tempA.append(beacon) |
||||
CoveredPoints -= 1 |
||||
|
||||
print(CoveredPoints) |
@ -0,0 +1,79 @@
@@ -0,0 +1,79 @@
|
||||
beacons = [] |
||||
sensors = [] |
||||
CoveredPoints = {} |
||||
maxcoord = 4000000 |
||||
|
||||
def loop(vectors): |
||||
for j in range(len(vectors)): |
||||
for i in range(len(vectors)): |
||||
if j != i: |
||||
if vectors[j][0] in range (vectors[i][0], vectors[i][1]) or vectors[i][0] in range (vectors[j][0], vectors[j][1]): |
||||
tempSt = min(vectors[j][0],vectors[i][0]) |
||||
tempEn = max(vectors[j][1],vectors[i][1]) |
||||
vectors.append((tempSt, tempEn)) |
||||
vectors.pop(max(i, j)) |
||||
vectors.pop(min(i, j)) |
||||
return False, vectors |
||||
return True, vectors |
||||
|
||||
def loop2(vectors): |
||||
if len(vectors) > 2: |
||||
for i in range(len(vectors) - 1): |
||||
if vectors[i][1] == vectors[i+1][0] or vectors[i][1] + 1== vectors[i+1][0]: |
||||
vectors.append((vectors[i][0], vectors[i+1][1])) |
||||
vectors.pop(i+1) |
||||
vectors.pop(i) |
||||
vectors = sorted(vectors) |
||||
return False, vectors |
||||
elif len(vectors) == 2: |
||||
if vectors[0][1] == vectors[1][0] or vectors[0][1] + 1== vectors[1][0]: |
||||
vectors = [(vectors[0][0], vectors[1][1])] |
||||
return True, vectors |
||||
return True, vectors |
||||
|
||||
with open('input15.txt','r') as f: |
||||
inp = f.read().splitlines(keepends=False) |
||||
|
||||
for line in inp: |
||||
tempA, tempB = line.split(': closest beacon is at x=') |
||||
tempA = tempA.replace('Sensor at x=', '') |
||||
tempA = tempA.split(', y=') |
||||
sensors.append(tuple(map(int, tempA))) |
||||
tempB = tempB.split(', y=') |
||||
beacons.append(tuple(map(int, tempB))) |
||||
|
||||
|
||||
|
||||
for i in range(len(sensors)): |
||||
print('checking sensor', i, 'out of', len(sensors) - 1) |
||||
(sensX, sensY) = sensors[i] |
||||
(beacX, beacY) = beacons[i] |
||||
distance = (max(sensX, beacX) - min(sensX, beacX)) + (max(sensY, beacY) - min(sensY, beacY)) |
||||
for j in range(distance + 1): |
||||
CoveredPoints.setdefault((sensY-j), []) |
||||
CoveredPoints.setdefault((sensY+j), []) |
||||
CoveredPoints[sensY-j].append((sensX - (distance - j), sensX + (distance - j))) |
||||
CoveredPoints[sensY+j].append((sensX - (distance - j), sensX + (distance - j))) |
||||
|
||||
|
||||
tempA = [] |
||||
|
||||
for vc in CoveredPoints: |
||||
done = False |
||||
vectors = CoveredPoints[vc].copy() |
||||
while not done: |
||||
done, vectors = loop(vectors) |
||||
done = False |
||||
vectors = sorted(vectors) |
||||
while not done: |
||||
done, vectors = loop2(vectors) |
||||
CoveredPoints[vc] = vectors |
||||
|
||||
for i in range(maxcoord + 1): |
||||
line = CoveredPoints[i] |
||||
if len(line) > 1: |
||||
coordX = line[0][1] + 1 |
||||
coordY = i |
||||
frequency = coordX * 4000000 + coordY |
||||
|
||||
print('Beacon found y =',coordY,'x =',coordX,'frequency =', frequency) |
@ -1,2 +1,14 @@
@@ -1,2 +1,14 @@
|
||||
498,4 -> 498,6 -> 496,6 |
||||
503,4 -> 502,4 -> 502,9 -> 494,9 |
||||
Sensor at x=2, y=18: closest beacon is at x=-2, y=15 |
||||
Sensor at x=9, y=16: closest beacon is at x=10, y=16 |
||||
Sensor at x=13, y=2: closest beacon is at x=15, y=3 |
||||
Sensor at x=12, y=14: closest beacon is at x=10, y=16 |
||||
Sensor at x=10, y=20: closest beacon is at x=10, y=16 |
||||
Sensor at x=14, y=17: closest beacon is at x=10, y=16 |
||||
Sensor at x=8, y=7: closest beacon is at x=2, y=10 |
||||
Sensor at x=2, y=0: closest beacon is at x=2, y=10 |
||||
Sensor at x=0, y=11: closest beacon is at x=2, y=10 |
||||
Sensor at x=20, y=14: closest beacon is at x=25, y=17 |
||||
Sensor at x=17, y=20: closest beacon is at x=21, y=22 |
||||
Sensor at x=16, y=7: closest beacon is at x=15, y=3 |
||||
Sensor at x=14, y=3: closest beacon is at x=15, y=3 |
||||
Sensor at x=20, y=1: closest beacon is at x=15, y=3 |
@ -0,0 +1,27 @@
@@ -0,0 +1,27 @@
|
||||
Sensor at x=2288642, y=2282562: closest beacon is at x=1581951, y=2271709 |
||||
Sensor at x=2215505, y=2975419: closest beacon is at x=2229474, y=3709584 |
||||
Sensor at x=275497, y=3166843: closest beacon is at x=-626874, y=3143870 |
||||
Sensor at x=1189444, y=2115305: closest beacon is at x=1581951, y=2271709 |
||||
Sensor at x=172215, y=2327851: closest beacon is at x=-101830, y=2000000 |
||||
Sensor at x=3953907, y=1957660: closest beacon is at x=2882446, y=1934422 |
||||
Sensor at x=685737, y=2465261: closest beacon is at x=1581951, y=2271709 |
||||
Sensor at x=1458348, y=2739442: closest beacon is at x=1581951, y=2271709 |
||||
Sensor at x=3742876, y=2811554: closest beacon is at x=3133845, y=3162635 |
||||
Sensor at x=437819, y=638526: closest beacon is at x=-101830, y=2000000 |
||||
Sensor at x=2537979, y=1762726: closest beacon is at x=2882446, y=1934422 |
||||
Sensor at x=1368739, y=2222863: closest beacon is at x=1581951, y=2271709 |
||||
Sensor at x=2743572, y=3976937: closest beacon is at x=2229474, y=3709584 |
||||
Sensor at x=2180640, y=105414: closest beacon is at x=3011118, y=-101788 |
||||
Sensor at x=3845753, y=474814: closest beacon is at x=3011118, y=-101788 |
||||
Sensor at x=2493694, y=3828087: closest beacon is at x=2229474, y=3709584 |
||||
Sensor at x=2786014, y=3388077: closest beacon is at x=3133845, y=3162635 |
||||
Sensor at x=3593418, y=3761871: closest beacon is at x=3133845, y=3162635 |
||||
Sensor at x=856288, y=3880566: closest beacon is at x=2229474, y=3709584 |
||||
Sensor at x=1757086, y=2518373: closest beacon is at x=1581951, y=2271709 |
||||
Sensor at x=2853518, y=2939097: closest beacon is at x=3133845, y=3162635 |
||||
Sensor at x=1682023, y=1449902: closest beacon is at x=1581951, y=2271709 |
||||
Sensor at x=3360575, y=1739100: closest beacon is at x=2882446, y=1934422 |
||||
Sensor at x=2904259, y=1465606: closest beacon is at x=2882446, y=1934422 |
||||
Sensor at x=3078500, y=3564862: closest beacon is at x=3133845, y=3162635 |
||||
Sensor at x=2835288, y=1011055: closest beacon is at x=2882446, y=1934422 |
||||
Sensor at x=2998762, y=2414323: closest beacon is at x=2882446, y=1934422 |
Loading…
Reference in new issue