title: Python nonogram uniqueness
body: <p>I'm trying to write a Python script to determine if a given nonogram is unique. My current script just takes way too long to run so I was wondering if anyone had any ideas.</p>
  
  <p>I understand that the general nonogram problem is NP-hard. However, I know two pieces of information about my given nonograms:</p>
  
  <ol>
  <li>When representing the black/white boxes as 0s and 1s, respectively, I know how many of each I have.</li>
  <li>I'm only considering 6x6 nonograms.</li>
  </ol>
  
  <p>I initially used a brute force approach (so 2^36 cases). Knowing (1), however, I was able to narrow it down to n-choose-k (36-choose-number of zeroes) cases. However, when k is near 18, this is still ~2^33 cases. Takes days to run.</p>
  
  <p>Any ideas how I might speed this up? Is it even possible?</p>
  
  <p>Again, I don't care what the solution is -- I already have it. What I'm trying to determine is if that solution is unique.</p>
  
  <p>EDIT:
  This isn't exactly the full code but has the general idea:</p>
  
  <pre><code>def unique(nonogram):
      found = 0
      # create all combinations with the same number of 1s and 0s as incoming nonogram
      for entry in itertools.combinations(range(len(nonogram)), nonogram.count(1)):
          blank = [0]*len(nonogram)   # initialize blank nonogram
          for element in entry:
              blank[element] = 1   # distribute 1s across nonogram
          rows = find_rows(blank)  # create row headers (like '2 1')
          cols = find_cols(blank)  
          if rows == nonogram_rows and cols == nonogram_cols:
              found += 1    # row and col headers same as original nonogram
          if found &gt; 1:
              break     # obviously not unique
      if found == 1:
          print('Unique nonogram')
  </code></pre>