Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Person:
- x = 0
- y = 0
- flu_remaining = 0
- prev_infected = False
- def __init__(self, x, y, flu_remaining=0, prev_infected=False):
- self.x = x
- self.y = y
- self.flu_remaining = flu_remaining
- self.prev_infected = prev_infected
- def distance(self, person):
- return ((self.x - person.x)**2 + (self.y - person.y)**2) ** 0.5
- def flu_epidemic(mat, duration, flu_distance, flu_time, incubation_time):
- h = len(mat)
- w = len(mat[0])
- persons = []
- num_sick = 0
- for i in range(h):
- for j in range(w):
- if mat[i][j] == 'P':
- persons.append(Person(j, i))
- elif mat[i][j] == 'I':
- persons.append(Person(j, i, flu_time, True))
- num_sick += 1
- n_persons = len(persons)
- adj_mat = [[False for c in range(n_persons)]
- for r in range(n_persons)]
- for i in range(n_persons-1):
- for j in range(i+1, n_persons):
- if persons[i].distance(persons[j]) <= flu_distance:
- adj_mat[i][j] = True
- adj_mat[j][i] = True
- for t in range(0, duration+1, incubation_time):
- for i in range(n_persons):
- if persons[i].flu_remaining == 0:
- continue
- persons[i].flu_remaining -= incubation_time
- if persons[i].flu_remaining == 0:
- num_sick -= 1
- continue
- for j in range(n_persons):
- if i == j:
- continue
- if adj_mat[i][j]:
- if not persons[j].prev_infected:
- persons[j].flu_remaining = flu_time
- persons[j].prev_infected = True
- num_sick += 1
- return num_sick
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement