% FILE: rankGSB.m
% PURPOSE: team rank base on gold, then silver, then bronze
% EXAMPLE:
% ranks = rankGSB(medals);
% ranks(i,j) is the rank of team i in olympiad j
function ranks = rankGSB(medals)
scores = zeros(size(medals));
for i = 1:size(medals,2) % each olympiad
for j = 1:size(medals,1) % each team
m = medals(j,i);
scores(j,i) = sum(m.gold*1000000)+sum(m.silver*1000)+sum(m.bronze);
end
end
[sorted,idx]=sort(scores, 'descend');
ranks = inf(size(sorted)); % start unrated
for i = 1:size(sorted,2) % each olympiad
for j = 1:size(sorted,1) % each team
ij = idx(j,i); % team number
if sorted(j,i)==0
ranks(ij,i)=inf;
else
ranks(ij,i) = j; % set rank
end
sji = sorted(j,i);
if j>1 && sji~= 0 && sji==sorted(j-1,i)
ranks(ij,i) = ranks(idx(j-1,i),i); % tie
end
end
end
end