Finish 1998-12-21 00:00:00 UTC

TS1.2

by Taylor Sherman

Status: Passed
Results: 0.40% blank
CPU Time: 10.025
Score: 85.5612
Submitted at: 1998-12-17 16:40:33 UTC
Scored at: 2000-03-16 16:51:51 UTC

Current Rank: 139th
Based on: TS1.1 (diff)

Comments
Please login or create a profile.
Code
function indexList = binpack(songList,mediaLength)
   [s,t] = sort(songList);
   a = size(s,2);
   b = min(a,round(4*a*mediaLength/sum(s)));
   c = max(round(5.7*a^0.71),10);
   [d,e] = sort(rand(b,c));
   q = 0.25*(a-b);
   if q > 1
      r = floor(q*rand(1,c));
      e = e+r(ones(1,b),:);
   else
      r = rand(1,c);
   end
   f = cumsum(s(e));
   g = sum(f<=mediaLength);
   [d,h] = max(f(g+(0:b:b*c-b)));
   indexList = t(e(1:g(h),h));
   leftOff = t(e(g(h)+1:end,h));
   remTime = mediaLength-d;
   onez1 = ones(1,g(h));
   onez2 = ones(b-g(h),1);
   newFree = songList(onez2,indexList) - songList(onez1,leftOff)';
   newFree(newFree < -remTime) = 9e9;
   [m,i] = min(newFree);
   [m,j] = min(m);
   if m < 0
      better = 1;
      while better
         aux = indexList(j);
         indexList(j) = leftOff(i(j));
         leftOff(i(j)) = aux;
         remTime = remTime + m;
         newFree = songList(onez2,indexList) - songList(onez1,leftOff)';
         newFree(newFree < -remTime) = 9e9;
         [m,i] = min(newFree);
         [m,j] = min(m);
         better = (m < 0);
      end
   end