Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import math
- from collections import Counter
- file = open("sample.txt", "r")
- lines = file.readlines()
- grid = []
- c = 0
- for l in lines:
- l = (l.strip())
- l = l.split(",")
- # FIX 1: use tuples instead of lists (lists break equality checks)
- t = tuple(int(x) for x in l)
- grid.append(t)
- c += 1
- distances = []
- a = []
- b = []
- pairs = []
- start = ""
- end = ""
- #Store corresponding ciruit number for each point
- locations = grid[:]
- circuitNum = list(range(len(grid)))
- for x in range(len(grid)):
- for y in range(x+1, len(grid)):
- #calcualte and store all distances
- p = grid[x]
- q = grid[y]
- d = math.dist(p, q)
- #x3 parallel arrays
- distances.append(d)
- a.append(p)
- b.append(q)
- #Sort and Store
- combined = list(zip(distances, a, b))
- combined.sort(key=lambda x: x[0])
- distances, a, b = zip(*combined)
- print(locations)
- print(circuitNum)
- connections = 0
- for i in range(0, len(a)):
- start = a[i]
- end = b[i]
- # get circuit index
- startI = locations.index(start)
- endI = locations.index(end)
- #get ciruit number
- circuitStar = circuitNum[startI]
- circuitEnd = circuitNum[endI]
- #if not the same, marge circuits
- if circuitStar != circuitEnd:
- connections += 1
- # merge circuits by changing index of one set
- for x in range(len(circuitNum)):
- if circuitNum[x] == circuitEnd:
- circuitNum[x] = circuitStar
- print("Connected:", start, end, "→ total:", connections)
- if connections == 10:
- print("Final circuits:", Counter(circuitNum))
- break
Advertisement
Add Comment
Please, Sign In to add comment