Advertisement
Guest User

Untitled

a guest
Oct 20th, 2017
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.16 KB | None | 0 0
  1. class ZerosAndOnes(object):
  2.     def __init__(self, n):
  3.         self._current = 0
  4.         self._n = n
  5.        
  6.     def __iter__(self):
  7.         return self
  8.    
  9.     def __next__(self):
  10.         n = self._n
  11.         bins = bin(self._current)
  12.         bins = bins[2:]
  13.         bins = list(map(int, bins))
  14.         matrix = [0 for i in range (n*n - len(bins))] + bins #Создаем одномерный массив из n*n элементов
  15.         matrix = [matrix[x:x+n] for x in range(0, len(matrix), n)] #Делаем из него Квадратную матрицу
  16.         result = [matrix[i][j] for i in range(len(matrix)) for j in range(i, len(matrix[i])) if matrix[j][i] == 1] #Если на гл. диагонали и под ней все нули - возвращаем
  17.         self._current = self._current + 1
  18.         if self._current > 2 ** (n*n):
  19.             raise StopIteration()
  20.         elif len(result) == 0:
  21.             return matrix
  22.         else:
  23.             return None # если не подходит - возвращаем None
  24.    
  25.  
  26. for x in ZerosAndOnes(3):
  27.     if x is not None:
  28.         print(' '.join([str(elem) for elem in x]))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement