input: Write a function to simulate one step of Conway's Game of Life.
  assert conway({(0, 0), (0, 1), (1, 0)}) == {(0, 0), (0, 1), (1, 0), (1, 1)}
  assert conway({(1, 0), (1, 1), (1, 2)}) == {(0, 1), (1, 1), (2, 1)}
  assert conway({(0, 1), (1, 1), (2, 1)}) == {(1, 0), (1, 1), (1, 2)}
output: def conway(live_cells):
      def neighbors(cell):
          x, y = cell
          return {(x + dx, y + dy) for dx in (-1, 0, 1) for dy in (-1, 0, 1) if (dx, dy) != (0, 0)}
  
      def live_neighbors(cell):
          return sum((neighbor in live_cells) for neighbor in neighbors(cell))
  
      potential_cells = live_cells | {neighbor for cell in live_cells for neighbor in neighbors(cell)}
      return {cell for cell in potential_cells if live_neighbors(cell) == 3 or (cell in live_cells and live_neighbors(cell) == 2)}