fork download
  1. R=range
  2. E=enumerate
  3. def f(p):
  4. d={(x//5,x%5):[]for x in R(25)};p=[(x,y)for x,r in E(p)for y,v in E(r)if'X'==v];X,Y,C=0,0,0;M=[];s=[['0']*5for _ in R(5)];V=lambda X,Y:~-all((x+X,y+Y)in d for x,y in p)
  5. while 1:
  6. C+=1;Q,W=[],[]
  7. for x,y in p:d[(x+X,y+Y)]+=C,
  8. if V(X,Y:=Y+1)and V(X:=X+1,Y:=0):break
  9. while any(d.values()):t=max(d,key=lambda x:len(d[x]));M+=t,;d={i:{*d[i]}-{*d[t]}for i in d}
  10. for x,y in M:s[x][y]='1'
  11. return s
  12.  
  13. def F(b):
  14. return '\n'.join(map(''.join,f(b)))
  15.  
  16.  
  17. print(F(['XXXX'])) #Sheep
  18. print('-'*40)
  19. print(F(['XOO',
  20. '0XX'])) #Unicorn
  21. print('-'*40)
  22. print(F(['XoX', #Hippo
  23. 'ooo',
  24. 'XoX']))
  25. print('-'*40)
  26. print(F(['XX', #Pig
  27. 'XX']))
  28. print('-'*40)
  29. print(F(['XXO', #Platypus
  30. 'OXX']))
  31. print('-'*40)
  32. print(F(['X'])) #Every square needs to be matched
  33. print('-'*40)
  34. print(F(['X', 'X', 'X', 'X'])) #Rabbit
  35. print('-'*40)
  36. print(F(['X', 'X', 'X'])) #Horse
  37. print('-'*40)
  38. print(F(['XOOO', 'OXOO', 'OOXO', 'OOOX'])) #Kangaroo
  39. print('-'*40)
  40. print(F(['OXO', 'XOX'])) #Tiddalik
  41. print('-'*40)
  42. print(F(['OXO', 'XOX', 'OXO'])) #Zebra
  43. print('-'*40)
  44. print(F(['XX', 'OX', 'OX'])) #Bear
  45. print('-'*40)
  46. print(F(['OOX', 'XXO', 'OOX'])) #Beaver
  47. print('-'*40)
  48. print(F(['XO', 'OX', 'OX'])) #Cockatoo
  49. print('-'*40)
  50. print(F(['XOO', 'OOO', 'OOX'])) #Phoenix
Success #stdin #stdout 0.09s 14100KB
stdin
Standard input is empty
stdout
01000
01000
01000
01000
01000
----------------------------------------
00100
00100
00100
00100
00100
----------------------------------------
00000
01100
01100
00000
00000
----------------------------------------
00000
01010
00000
01010
00000
----------------------------------------
00100
00100
00100
10100
00000
----------------------------------------
11111
11111
11111
11111
11111
----------------------------------------
00000
11111
00000
00000
00000
----------------------------------------
00000
00000
11111
00000
00000
----------------------------------------
01000
11000
00000
00000
00000
----------------------------------------
00100
00100
00100
00100
00100
----------------------------------------
00000
00100
00100
00100
00000
----------------------------------------
00000
00101
01010
00000
00000
----------------------------------------
00000
00100
00100
00100
00000
----------------------------------------
00000
00000
11111
00000
00000
----------------------------------------
01100
11100
11100
00000
00000