34 lines
1,023 B
Text
34 lines
1,023 B
Text
fcn group(scores){ // group like scores into one list --> list of lists
|
|
sink:=List();
|
|
scores.reduce('wrap(ps,sn,buf){
|
|
if(sn[0]!=ps){ sink.append(buf.copy()); buf.clear(); }
|
|
buf+sn;
|
|
sn[0];
|
|
},scores[0][0],buf:=List());
|
|
sink.append(buf);
|
|
}
|
|
fcn print(list,rank){
|
|
list.apply2('wrap(sn){ "%2s: %s (%d)".fmt(rank,sn[1],sn[0]):println(_); });
|
|
}
|
|
fcn rankViaStandard(scores){
|
|
rank:=1;
|
|
foreach group in (group(scores)){ print(group,rank); rank+=group.len(); }
|
|
}
|
|
fcn rankViaModified(scores){
|
|
rank:=0;
|
|
foreach group in (group(scores)){ rank+=group.len(); print(group,rank); }
|
|
}
|
|
fcn rankViaDense(scores){
|
|
rank:=1;
|
|
foreach group in (group(scores)){ print(group,rank); rank+=1; }
|
|
}
|
|
fcn rankViaOrdinal(scores){
|
|
scores.apply2('wrap(sn,rr){ "%2s: %s (%d)".fmt(rr.inc(),sn[1],sn[0]):println(_); },Ref(1));
|
|
}
|
|
fcn rankViaFractional(scores){
|
|
rank:=1;
|
|
foreach group in (group(scores)){
|
|
n:=group.len(); r:=rank.reduce(n,'+,0.0)/n; rank+=n;
|
|
print(group,"%5.2f".fmt(r));
|
|
}
|
|
}
|