fork download
  1. S=sum
  2. W=lambda a,B,l,F=0:all(S(map(S,j))==1if F else S(map(S,j))<2for j in zip(*[[[i.pop(0)for _ in range(t)]for t in a]for i in[[*i]for i in B][:l]]))
  3. def f(b):
  4. q,s=[[1]],[]
  5. for a in q:
  6. if S(a)==len(b[0]):
  7. Q=[[1]]
  8. for A in Q:
  9. X=[*b];C=[[X.pop(0)for _ in range(y)]for y in A]
  10. if S(A)==len(b):
  11. if all(W(a,B,len(B),1)for B in C):return 1
  12. else:Q+=[A[:-1]+[A[-1]+1],A+[1]]*all(W(a,B,len(B))for B in C)
  13. elif W(a,b,1):o=[p for p in[a[:-1]+[a[-1]+1],a+[1]]if~-(p in s)];q+=o;s+=o
  14.  
  15. s1 = """
  16. 00|0010|01|1
  17. 01|0000|00|0
  18. 00|0000|00|1
  19. 01|0010|01|0
  20. 01|1000|10|1
  21. """.replace('|','')
  22.  
  23. def to_board(s):
  24. return [[*map(int,j)]for j in filter(None, s.split('\n'))]
  25.  
  26. s = """
  27. [[1]] -> True
  28. [[0,1],[1,0]] -> True
  29. [[1,1],[1,0]] -> False
  30. [[1,0,1],[0,1,0]] -> True
  31. [[1,0],[0,1],[0,1]] -> True
  32. [[1,0,0],[0,0,1],[0,1,1]] -> True
  33. [[1,1,1],[1,1,1],[1,1,1]] -> True
  34. [[1,0,1],[0,1,0],[1,0,0]] -> True
  35. [[1,0,0],[1,0,0],[0,1,1]] -> False
  36. [[0,0,0,0,1],[1,0,0,1,0],[0,0,0,1,0]] -> False
  37. [[0,0,1,0,1],[0,0,0,1,0],[0,0,0,0,0]] -> True
  38. [[1,1,0,0,0],[0,0,0,0,0],[1,0,1,0,0]] -> True
  39. [[1,1,0,1,1],[0,1,0,1,1],[1,0,0,0,0]] -> True
  40. [[0,0,0,0,0,0,0],[0,1,1,1,0,1,0],[0,1,0,0,1,0,0],[0,0,0,0,0,0,1],[0,0,1,0,0,0,1],[1,1,0,1,1,0,0]] -> False
  41. [[1,1,0,0,0,0,0],[1,0,1,1,0,1,0],[0,0,0,0,1,0,0],[0,1,0,1,1,0,0],[1,0,0,0,1,1,0],[0,0,0,0,0,1,0]] -> False
  42. [[0,1,0,1,1,1,0],[0,0,0,0,1,0,0],[0,0,0,0,0,0,0],[1,0,0,1,0,0,0],[0,0,0,0,0,0,0],[0,0,0,0,0,0,1]] -> True
  43. [[0,1,0,0,1,0,1],[1,0,0,0,1,0,1],[0,0,1,0,1,0,1],[1,0,0,0,1,1,0],[0,0,0,1,1,1,0],[0,1,0,0,1,0,1]] -> True
  44. [[0,1,0,0,1,0,0,1,0],[0,0,0,0,1,1,0,1,0],[1,1,0,0,1,0,0,0,0],[0,0,1,0,1,0,1,0,0],[0,0,1,0,1,0,1,0,0],[0,1,0,0,0,1,0,0,1],[0,1,0,0,0,0,1,0,0]] -> False
  45. [[1,0,1,0,0,1,1,0,1],[0,1,1,0,0,1,1,0,1],[1,0,0,0,0,1,0,0,0],[0,0,0,0,0,0,0,0,0],[0,0,1,0,0,0,0,1,1],[0,1,1,0,1,0,1,0,1],[1,0,1,0,0,1,1,0,1]] -> True
  46. """
  47. for i in filter(None, s.split('\n')):
  48. a, b = map(eval, i.split(' -> '))
  49. assert bool(f(a)) == bool(b)
  50.  
  51. print('Tests passed')
Success #stdin #stdout 0.12s 14096KB
stdin
Standard input is empty
stdout
Tests passed