Advertisement
overwater

Untitled

May 21st, 2016
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.45 KB | None | 0 0
  1. def goal(sums):
  2.     return sum([sum(s) ** 2 for s in sums])
  3.  
  4. class Solver(object):
  5.     def __init__(self, N, M, numbers, poss_min, string):
  6.         self._M = M
  7.         self._N = N
  8.         self._extremum = poss_min
  9.         self._flag = False
  10.         self._partition = None
  11.         self._string = string
  12.         self._numbers = numbers
  13.        
  14.         self.prepare()
  15.        
  16.     def prepare(self):
  17.         self._sums = [[] for i in xrange(self._M)]
  18.         thres_sum = [[] for i in xrange(self._M)]
  19.         nm = self._N / self._M
  20.         for j in xrange(self._M):
  21.             for i in xrange(nm):
  22.                 thres_sum[j].append(self._numbers[j * nm + i])
  23.    
  24.         self._minsum = goal(thres_sum)
  25.    
  26.     def solve(self):
  27.         self.func(self._numbers)
  28.        
  29.     def func(self, numbers):
  30. #        sys.stdout.write('\r' + self._string.format(self._minsum, *self._sums))
  31.        
  32.         if goal(self._sums) > self._minsum or self._flag:
  33.             return
  34.        
  35.         if len(numbers) == 0:
  36.             g = goal(self._sums)
  37.             if g < self._minsum:
  38.                 self._minsum = g
  39.                 self._partition = np.copy(self._sums)
  40.                 if g == self._extremum:
  41.                     self._flag = True
  42.             return
  43.        
  44.         n = numbers[0]
  45.         for j in xrange(self._M):
  46.             self._sums[j].append(n)
  47.             self.func(numbers[1:])
  48.             self._sums[j] = self._sums[j][:-1]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement