Ranking methods: Difference between revisions

Line 22:
 
Show here, on this page, the ranking of the test scores under each of the numbered ranking methods.
 
=={{header|Awk}}==
This needs separate files for each method of ranking:
<lang awk>##
## Dense ranking in file: ranking_d.awk
##
 
BEGIN{ lastresult = "!"; lastrank = 0 }
 
function d_rank(){
if($1==lastresult){
print lastrank, $0
}else{
lastresult = $1
print ++lastrank, $0 }
}
//{d_rank() }
 
##
## Fractional ranking in file: ranking_f.awk
##
 
BEGIN{
last = "!"
flen = 0 }
 
function f_rank(){
item = $0
if($1!=last){
if(flen){
sum = 0
for(fl=0; fl < flen;){
$0 = fifo[fl++]
sum += $1 }
mean = sum / flen
for(fl=0; fl < flen;){
$0 = fifo[fl++]
$1 = ""
printf("%3g %s\n", mean, $0) }
flen = 0
}}
$0 = item
last = $1
fifo[flen++] = sprintf("%i %s", FNR, item)
}
//{f_rank()}
 
END{ if(flen){
sum = 0
for(fl=0; fl < flen;){
$0 = fifo[fl++]
sum += $1 }
mean = sum / flen
for(fl=0; fl < flen;){
$0 = fifo[fl++]
$1 = ""
printf("%3g %s\n", mean, $0) }}}
 
##
## Modified competition ranking in file: ranking_mc.awk
##
 
BEGIN{
lastresult = "!"
flen = 0 }
 
function mc_rank(){
if($1==lastresult){
fifo[flen++] = $0
}else{
for(fl=0; fl < flen;){
print FNR-1, fifo[fl++]}
flen = 0
fifo[flen++] = $0
lastresult = $1}
}
//{mc_rank()}
 
END{ for(fl=0; fl < flen;){
print FNR, fifo[fl++]} }
 
##
## Ordinal ranking in file: ranking_o.awk
##
 
function o_rank(){ print FNR, $0 }
//{o_rank() }
 
##
## Standard competition ranking in file: ranking_sc.awk
##
 
BEGIN{ lastresult = lastrank = "!" }
 
function sc_rank(){
#print"sc_rank"
if($1==lastresult){
print lastrank, $0
}else{
print FNR, $0
lastresult = $1
lastrank = FNR}
}
//{sc_rank()}
</lang>
 
The input as a file <code>ranking.txt</code>:
<pre>44 Solomon
42 Jason
42 Errol
41 Garry
41 Bernard
41 Barry
39 Stephen</pre>
 
{{output}}
<pre>C:\Users\RC\Code>awk -f ranking_sc.awk ranking.txt
1 44 Solomon
2 42 Jason
2 42 Errol
4 41 Garry
4 41 Bernard
4 41 Barry
7 39 Stephen
 
C:\Users\RC\Code>awk -f ranking_mc.awk ranking.txt
1 44 Solomon
3 42 Jason
3 42 Errol
6 41 Garry
6 41 Bernard
6 41 Barry
7 39 Stephen
 
C:\Users\RC\Code>awk -f ranking_d.awk ranking.txt
1 44 Solomon
2 42 Jason
2 42 Errol
3 41 Garry
3 41 Bernard
3 41 Barry
4 39 Stephen
 
C:\Users\RC\Code>awk -f ranking_o.awk ranking.txt
1 44 Solomon
2 42 Jason
3 42 Errol
4 41 Garry
5 41 Bernard
6 41 Barry
7 39 Stephen
 
C:\Users\RC\Code>awk -f ranking_f.awk ranking.txt
1 44 Solomon
2.5 42 Jason
2.5 42 Errol
5 41 Garry
5 41 Bernard
5 41 Barry
7 39 Stephen
 
C:\Users\RC\Code></pre>
 
 
=={{header|Python}}==
Anonymous user