fork download
  1. E=enumerate
  2. H=range
  3. R=lambda x,n=4:{str(x),*R([i[::-1]for i in zip(*x)],n-1)}if n else set()
  4. def B(i):k=[[' #'[int(j)]for j in i[t:t+4]]for t in H(0,16,4)];return[k[0]+[k[1][0]],*[[a,*('#'*3),b]for a,b in zip(k[3][::-1][:-1],k[1][1:])],[k[3][::-1][-1]]+k[2][::-1]]
  5. def L(M):
  6. b=[[' ']*17for _ in H(13)]
  7. for P,(x,y),C in zip(M,[(4,4),(4,0),(0,4),(4,8),(8,4),(4,12)],'#@*&$%'):
  8. for X in H(25):b[x+X//5][y+X%5]=[C,b[x+X//5][y+X%5]][P[X//5][X%5]==' ']
  9. return b
  10. def f(p):
  11. s,*p=[B(i)for i in p.split('\n')];q=[([s],p)]
  12. while q:
  13. M,p=q.pop(0)
  14. if len(M)==6:return L(M)
  15. for i,a in E(p):
  16. for P in{*R(a),*R([j[::-1]for j in a])}:
  17. if all((lambda x,y,r,i,R,I:all(0<I<4and A!=B or I in[0,4]and(A!=B or A==' '==B)for I,(A,B)in E(zip([U[x],[*zip(*U[x])]][r][i],[U[y],[*zip(*U[y])]][R][I]))))(*j)for j in[(1,0,1,4,1,0),(2,0,0,4,0,0),(3,0,1,0,1,4),(4,0,0,0,0,4),(5,3,1,0,1,4),(1,2,0,0,1,0),(2,3,1,4,0,0),(3,4,0,4,1,4),(1,4,0,4,1,0),(1,5,1,0,1,4),(2,5,0,0,0,0),(4,5,0,4,0,4)]if j[0]<len(U:=M+[eval(P)])>j[1]):q+=(U,p[:i]+p[i+1:]),
  18.  
  19. print('\n'.join(map(''.join,f("""0010010101010101
  20. 0010001011011010
  21. 0101001001010010
  22. 0010110100101101
  23. 0010110110101101
  24. 0010001011010101"""))))
  25. print('-'*18)
  26. print('\n'.join(map(''.join,f("""0001110110101101
  27. 1010010111011101
  28. 0101010101010010
  29. 1010001000100011
  30. 1010001001010001
  31. 0110010100100010"""))))
  32. print('-'*18)
  33. print('\n'.join(map(''.join,f("""0101001011011010
  34. 0010001000100010
  35. 0101001011010010
  36. 0101010101011010
  37. 0101101001011101
  38. 1010001001011101"""))))
Success #stdin #stdout 4.37s 14016KB
stdin
Standard input is empty
stdout
     * *         
     ***         
    *****        
     ***         
@@ @@*#*&& &% %  
 @@@#####&&&%%%%%
@@@@@###&&&&&%%% 
 @@@#####&&&%%%%%
  @ $#$#&& && % %
    $$$$         
     $$$$        
    $$$$         
     $ $         
------------------
      *          
     ****        
    ****         
     ****        
@@ @@**## & &% % 
@@@@#####&&&&%%% 
 @@@@###&&&&&%%%%
@@@@#####&&&%%%% 
@@ @#$#$# & % %  
     $$$$        
    $$$$         
     $$$$        
     $ $         
------------------
    ** *         
    *****        
     ***         
    *****        
  @ @#*#& &   %  
@@@@@###&&&&&%%% 
 @@@#####&&&%%%%%
@@@@@###&&&&&%%% 
  @ ##$##& &  %  
    $$$$         
     $$$$        
    $$$$         
    $$ $$