Re: sorting blocks in 1 unit , the program

new topic     » goto parent     » topic index » view thread      » older message » newer message

Thanks Pete for code. It works great, just what i needed. You're a genious!
Did you write it now or did you have it already before?


Here is my verison , just litle code added, to be more user friendly:

-------------------------------------------

function sum(sequence s)
 atom ret
 ret=0
 for i=1 to length(s) do
  ret+=s[i]
 end for

 return ret
end function


function pack(sequence items, atom boxsize)
  atom bestsize, thissize
  sequence bestitems, temp
  bestsize = 0
  bestitems = {}
  for i = length(items) to 1 by -1 do
    if items[i] <= boxsize then
      temp = pack(items[1..i-1]&items[i+1..length(items)], boxsize-items[i])
      thissize = items[i]
      for j = 1 to length(temp) do
        thissize += temp[j]
      end for
      if thissize > bestsize then
        bestsize = thissize
        bestitems = items[i] & temp
      end if
    end if
  end for
  return bestitems
end function

procedure pack_boxes(sequence items, integer boxsize)
  sequence temp
  integer j
  while length(items) do
    temp = pack(items, boxsize)
    ? temp
    printf(1,"%s%d%s%d%s",{"sum=",sum(temp),", left
space=",boxsize-sum(temp),"\n\n"})
    for i = 1 to length(temp) do
      j = find(temp[i], items)
      items = items[1..j-1]&items[j+1..length(items)]
    end for
  end while
end procedure

--pack_boxes({2,3}, 4)            puts(1, "\n")
--pack_boxes({2,3,4}, 5)          puts(1, "\n")
--pack_boxes({2,3,4,5}, 5)        puts(1, "\n")
--pack_boxes({3,4,5,6}, 10)       puts(1, "\n")
--pack_boxes({3,4,5,6}, 15)       puts(1, "\n")

pack_boxes({100,70,300,60,3,255,150,100,200,350,270}, 650)       puts(1,
"\n")

---------------------------------------------

new topic     » goto parent     » topic index » view thread      » older message » newer message

Search



Quick Links

User menu

Not signed in.

Misc Menu