Jump to content

Ranking methods: Difference between revisions

Added zkl
m (→‎{{header|Java}}: works with)
(Added zkl)
Line 824:
4 6 3 6 5 41 Barry
7 7 4 7 7 39 Stephen
</pre>
 
=={{header|zkl}}==
<lang zkl>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));
}
}</lang>
<lang zkl> // these are sorted!?!
scores:=T(T(44,"Solomon"), T(42,"Jason"), T(42,"Errol"), T(41,"Garry"),
T(41,"Bernard"),T(41,"Barry"),T(39,"Stephen"),);
"Standard:" .println(); rankViaStandard(scores);
"Modified:" .println(); rankViaModified(scores);
"Dense:" .println(); rankViaDense(scores);
"Ordinal:" .println(); rankViaOrdinal(scores);
"Fractional:".println(); rankViaFractional(scores);</lang>
{{out}}
<pre>
Standard:
1: Solomon (44)
2: Jason (42)
2: Errol (42)
4: Garry (41)
4: Bernard (41)
4: Barry (41)
7: Stephen (39)
Modified:
1: Solomon (44)
3: Jason (42)
3: Errol (42)
6: Garry (41)
6: Bernard (41)
6: Barry (41)
7: Stephen (39)
Dense:
1: Solomon (44)
2: Jason (42)
2: Errol (42)
3: Garry (41)
3: Bernard (41)
3: Barry (41)
4: Stephen (39)
Ordinal:
1: Solomon (44)
2: Jason (42)
3: Errol (42)
4: Garry (41)
5: Bernard (41)
6: Barry (41)
7: Stephen (39)
Fractional:
1.00: Solomon (44)
2.50: Jason (42)
2.50: Errol (42)
5.00: Garry (41)
5.00: Bernard (41)
5.00: Barry (41)
7.00: Stephen (39)
</pre>
Anonymous user
Cookies help us deliver our services. By using our services, you agree to our use of cookies.