fork download
  1. def f(p):
  2. R=[]
  3. while p:
  4. c=[(x,y)for x,y in p if-1>sum(~-(X in p)for X in[(x,y+1),(x,y-1),(x+1,y),(x-1,y)])][0];r={c,*(F:=lambda x,y,X,Y:{V,*F(*V,X,Y)}if(V:=(x+X,y+Y))in p else{(x,y)})(*c,0,1),*F(*c,0,-1)};p-={*r};r=[r]
  5. while u:=1:
  6. for t,X in(0,1),(-1,-1):
  7. if len(K:=[V for x,y in r[t]if(V:=(x+X,y))in p])==len(r[0]):r=[[K]+r,r+[K]][abs(t)];p-={*K};u=0
  8. if u:R+=r,;break
  9. return R
  10.  
  11. import string
  12. def viz(p):
  13. x,y=map(max,zip(*p))
  14. board = [[0 for _ in range(x+3)]for _ in range(y+3)]
  15. S = string.ascii_lowercase
  16. for i,r in enumerate(f(p)):
  17. for _r in r:
  18. for x,y in _r: board[x][y]=S[i]
  19.  
  20. print('\n'.join([''.join(map(lambda x:str(x)if x else' ', u))for u in board]))
  21.  
  22.  
  23. viz({(0,0),(1,0),(0,1),(1,1),(2,1),(1,2),(2,2)})
  24. print('-'*50)
  25. viz({(0,0),(0,1),(0,2),(0,3),(0,4),(0,5),(1,0),(1,1),(1,2),(1,3),(1,4),(1,5),(2,0),(2,1),(3,0),(3,1),(4,0),(4,1),(4,2),(4,3),(4,4),(4,5),(5,0),(5,1),(5,2),(5,3),(5,4),(5,5)})
  26. print('-'*50)
  27. viz({(0,0),(0,1),(0,2),(0,3),(0,4),(0,5),(0,6),(0,7),(0,8),(0,9),(1,0),(1,1),(1,2),(1,3),(1,4),(1,5),(1,6),(1,7),(1,8),(2,0),(2,1),(2,2),(2,3),(2,4),(2,5),(2,6),(2,7),(3,0),(3,1),(3,2),(3,3),(3,4),(3,5),(3,6),(4,0),(4,1),(4,2),(4,3),(4,4),(4,5),(5,0),(5,1),(5,2),(5,3),(5,4),(6,0),(6,1),(6,2),(6,3),(7,0),(7,1),(7,2),(8,0),(8,1),(9,0)})
  28. print('-'*50)
  29. viz({(0,0),(0,1),(0,2),(0,3),(0,4),(0,5),(0,6),(0,7),(0,8),(1,0),(1,1),(1,2),(1,3),(1,4),(1,5),(1,6),(1,7),(1,8),(1,9),(2,0),(2,1),(2,2),(2,3),(2,4),(2,5),(2,6),(2,7),(2,8),(2,9),(3,0),(3,1),(3,2),(3,4),(3,5),(3,6),(3,7),(3,8),(3,9),(4,0),(4,1),(4,2),(4,3),(4,4),(4,5),(4,6),(4,7),(4,8),(4,9),(5,0),(5,1),(5,2),(5,3),(5,4),(5,5),(5,7),(5,8),(5,9),(6,1),(6,2),(6,3),(6,5),(6,6),(6,7),(6,8),(6,9),(7,0),(7,1),(7,2),(7,3),(7,4),(7,5),(7,6),(7,7),(7,8),(7,9),(8,0),(8,1),(8,2),(8,3),(8,4),(8,5),(8,6),(8,7),(8,8),(8,9),(9,0),(9,1),(9,2),(9,3),(9,4),(9,5),(9,6),(9,7),(9,8),(9,9)})
  30. print('-'*50)
  31. viz({(0,0),(0,1),(0,2),(0,3),(0,4),(0,5),(0,6),(0,7),(0,8),(1,0),(1,1),(1,2),(1,3),(1,4),(1,6),(1,7),(1,8),(1,9),(2,1),(2,2),(2,3),(2,4),(2,5),(2,6),(2,7),(2,8),(2,9),(4,0),(4,1),(4,2),(4,4),(4,5),(4,6),(4,7),(4,8),(4,9),(5,0),(5,1),(5,2),(5,3),(5,4),(5,5),(5,6),(5,7),(5,8),(5,9),(6,0),(6,1),(6,2),(6,4),(6,5),(6,6),(6,7),(6,8),(6,9),(8,0),(8,1),(8,2),(8,3),(8,4),(8,5),(8,6),(8,7),(8,8),(8,9),(9,0),(9,1),(9,2),(9,3),(9,7),(9,8),(9,9),(10,0),(10,1),(10,2),(10,3),(10,4),(10,5),(10,6),(10,7),(10,8),(10,9)})
  32.  
Success #stdin #stdout 0.2s 15460KB
stdin
Standard input is empty
stdout
aa   
aab  
 cb  
     
     
--------------------------------------------------
aaaaaa  
aaaaaa  
bb      
bb      
bbcccc  
bbcccc  
        
        
--------------------------------------------------
aaaaabbbbb  
aaaaacddd   
aaaaacef    
aaaaace     
aaaaac      
aaaaa       
ghhh        
gii         
gj          
g           
            
            
--------------------------------------------------
bbbbbbbbb   
aaaaaaaaaa  
aaaaaaaaaa  
ccc dddddd  
cccgdddddd  
ccceee iii  
 fff kkiii  
hfffjjjiii  
hfffjjjiii  
hfffjjjiii  
            
            
--------------------------------------------------
ggggggggg    
hhhhh jjjj   
 iiiiiiiii   
             
aaa bbbbbb   
aaakbbbbbb   
aaa bbbbbb   
             
cccccccccc   
eeee   fff   
dddddddddd