fork download
  1. import itertools,sys
  2. L=list
  3. C=itertools.count
  4. d=L(map(L,filter(None,sys.stdin.read().split('\n'))))
  5. X=len(d[0])
  6. Y=len(d)
  7. R=range
  8. def P(r):return all(d[y][x]=='.'for x,y in r)
  9. def S(f):
  10. for n in C(0):
  11. if P(f(n)):l=n
  12. else:break
  13. for n in C(l+1):
  14. if P(f(n)):return l,n
  15. def f(V,a,*b):return L(eval('lambda '+a+':('+i+')',V)for i in b)
  16. V=locals()
  17. def D(n):
  18. y=min(n,Y-1);x=n-y
  19. while y>=0and x<X:
  20. yield(x,y);x+=1;y-=1
  21. def E(n):
  22. x=max(0,n-Y);y=x+Y-n
  23. while y<Y and x<X:yield(x,y);x+=1;y+=1
  24. F=f(V,'p','(p,y)for y in R(0,Y)','(x,p)for x in R(0,X)')+[D,E]
  25. r=f(V,'x,y','x','y','x+y','x-y+Y')
  26. B=L(map(S,F))
  27. for x in R(0,X):
  28. for y in R(0,Y):
  29. z=L(zip(r,B))
  30. if all(g(x,y)in R(a,b+1)for g,(a,b)in z)and any(g(x,y)in e for g,e in z):d[y][x]='o'
  31. print('\n'.join(''.join(x)for x in d))
Success #stdin #stdout 0.02s 28384KB
stdin
........................
........................
.............#..........
...........#.#.##...#...
...........#.#.###.##...
..........########.##...
..........############..
.....#....############..
...#.###.##############.
..##.##################.
..####################..
...##################...
..##################....
....################....
.###################....
.#####################..
..##################....
.####################...
.#...##############.....
.##...#############.....
.#.....###....#.........
.......#................
........................
stdout
........................
.........ooooooooooo....
........o....#......o...
.......o...#.#.##...#o..
......o....#.#.###.##.o.
.....o....########.##..o
....o.....############.o
...o.#....############.o
..o#.###.##############o
.o##.##################o
o.####################.o
o..##################..o
o.##################...o
o...################...o
o###################...o
o#####################.o
o.##################..o.
o####################o..
o#...##############.o...
o##...#############o....
o#.....###....#...o.....
.o.....#.........o......
..ooooooooooooooo.......