
# subs25.py

import math
from grays import *

N = 20  # non-squares; was 16

nis = []  # non-integer squares
for j in range(N): 
  nis.append( math.sqrt(j+1 + round( math.sqrt(j+1))))
# print("nis:", nis)

grayGen = grayTransY(N)

goal = (15+sum(nis))/2    # was 10
minW = 1
wghts = 0
i = 0
while i < N-1: # reduce comparisons
  i = next(grayGen)
  wghts += nis[i]
  nis[i] = -nis[i] # -ve means used in weights
  rd = round(goal - wghts)
  nWeight = abs((goal - wghts) - rd)
  if nWeight <= minW:
    if (rd >= 0) and (rd <= 10): 
      for j in range(N):
        print(int(nis[j] < 0), end ='') 
        # 0 (not used) or 1 (used)
      minW = nWeight
      print(f"; min == {minW:.15f}")
