Esempio n. 1
0
def draw_rooms(doors, distances):
  min_x, min_y, max_x, max_y = bounds(doors.keys())

  door = lambda x, y, d: '|' if d in doors[x, y] else '#'
  room = lambda x, y: 'X' if (x, y) == (0, 0) else (str(distances[x, y] % 10) if distances[x, y] else ' ')
  
  top = lambda x, y: '#' + door(x, y, 'N')
  mid = lambda x, y: door(x, y, 'W') + room(x, y)
  
  ilines = lambda fn: (''.join(fn(x, y) for x in xrange(min_x, max_x + 1)) + '#' for y in xrange(min_y, max_y + 1))

  print('\n'.join(row for lst in izip(ilines(top), ilines(mid)) for row in lst))
  print('#' * ((max_x - min_x) * 2 + 3))
Esempio n. 2
0
def largest_inner_coord_size(coords, verbose):
    min_x, min_y, max_x, max_y = bounds(coords)
    grid = {(x, y): i for i, (x, y) in enumerate(coords)}
    score = [1] * len(coords)
    q = [(x, y) for i, (x, y) in enumerate(coords)]

    while q:
        next_moves = multimap( \
          ((x+dx,y+dy), grid[(x,y)]) \
            for x,y in q \
              for dx,dy in DIRS_ADJACENT \
                if min_x-1 <= x+dx <= max_x+1 and min_y-1 <= y+dy <= max_y+1 and (x+dx,y+dy) not in grid \
        )
        q = []

        for (x, y), coord_indexes in next_moves.iteritems():
            if len(set(coord_indexes)) == 1:
                score[coord_indexes[0]] += 1
                grid[(x, y)] = coord_indexes[0]
            else:
                grid[(x, y)] = -1
            q.append((x, y))

    for x,y in chain([(x,y) for x in (min_x-1, max_x+1) for y in xrange(min_y-1, max_y+2)], \
                     [(x,y) for x in xrange(min_x-1, max_x+2) for y in (min_y-1, max_y+1)]):
        if grid[(x, y)] > 0:
            score[grid[(x, y)]] = 0

    if verbose:
        coords_set = set(coords)
        print('\n'.join(''.join(
            (ALPHABET if (x, y) in coords_set else alphabet
             )[grid[(x, y)] %
               len(alphabet)] if grid.get((x, y), -1) != -1 else '.'
            for x in xrange(min_x - 1, max_x + 2))
                        for y in xrange(min_y - 1, max_y + 2)))

    return max(score)
Esempio n. 3
0
def draw_particles(particles):
  min_x, min_y, max_x, max_y = bounds(particles, 2)
  grid = [['.' for _ in xrange(min_x, max_x+1)] for _ in xrange(min_y, max_y+1)]
  for x,y,dx,dy in particles: grid[y-min_y][x-min_x] = '*'
  print('\n'.join(''.join(row) for row in grid))
Esempio n. 4
0
def extent(particles):
  min_x, min_y, max_x, max_y = bounds(particles, 2)
  return (max_x - min_x) * (max_y - min_y)
Esempio n. 5
0
def area_in_range_of_coords(coords, max_distance, verbose):
    min_x, min_y, max_x, max_y = bounds(coords)
    return sum(
        sum(abs(x - x2) + abs(y - y2) for x2, y2 in coords) < max_distance
        for x in xrange(min_x, max_x + 1) for y in xrange(min_y, max_y + 1))
Esempio n. 6
0
def draw_layout(layout):
    min_x, min_y, max_x, max_y = bounds(layout.keys())
    print('\n'.join(''.join(layout[x, y] for x in xrange(min_x, max_x + 1))
                    for y in xrange(min_y, max_y + 1)))
Esempio n. 7
0
def draw_rails(rails, carts):
    cart_locations = {(x, y): cart.type for (x, y), cart in carts.iteritems()}
    min_x, min_y, max_x, max_y = bounds(rails.keys())
    print('\n'.join(''.join(
        cart_locations.get((x, y), rails.get((x, y), ' '))
        for x in xrange(min_x, max_x + 1)) for y in xrange(min_y, max_y + 1)))