Top rank per group: Difference between revisions

m (→‎version 1: used a template for the 2nd output section.)
Line 5,823:
 
=={{header|Transd}}==
Version using built-in database-like functionality.
 
<lang scheme>
#lang transd
Line 5,864 ⟶ 5,866:
[D050, E21437, John Rappl, 47000]
[D050, E41298, Nathan Adams, 21900]
</pre>
 
Version using untyped vectors.
<lang scheme>
#lang transd
 
 
MainModule: {
tbl : String(
`"Tyler Bennett", "E10297",32000,"D101"
"John Rappl", "E21437",47000,"D050"
"George Woltman", "E00127",53500,"D101"
"Adam Smith", "E63535",18000,"D202"
"Claire Buckman", "E39876",27800,"D202"
"David McClellan", "E04242",41500,"D101"
"Rich Holcomb", "E01234",49500,"D202"
"Nathan Adams", "E41298",21900,"D050"
"Richard Potter", "E43128",15900,"D101"
"David Motsinger", "E27002",19250,"D202"
"Tim Sampair", "E03033",27000,"D101"
"Kim Arlich", "E10001",57000,"D190"
"Timothy Grove", "E16398",29900,"D190"`),
 
N: 2,
curN: 0,
dep: String(),
deps: Index( String( ) Int() ),
_start: (λ
(with recs Vector( untypedTable tbl "," "\n" )
res Vector( UntypedVector() )
 
(sort recs desc
(lambda l UntypedVector() r UntypedVector() -> Bool()
(ret (less<Int> (get l 2) (get r 2)))))
 
(for rec in Range(recs do
(lambda (= dep (get @it 3))
(= curN (snd (get-s deps dep 0)))
(if (< curN N) (add res @it) (set deps dep (+ curN 1))))
-> Null()) do null )
 
(sort res asc
(lambda l UntypedVector() r UntypedVector() -> Bool()
(ret (less<String> (get l 3) (get r 3)))))
 
(for i in res do (textout i "\n"))
)
)
}
</lang>{{out}}
<pre>
[John Rappl, E21437, 47000, D050]
[Nathan Adams, E41298, 21900, D050]
[George Woltman, E00127, 53500, D101]
[David McClellan, E04242, 41500, D101]
[Kim Arlich, E10001, 57000, D190]
[Timothy Grove, E16398, 29900, D190]
[Rich Holcomb, E01234, 49500, D202]
[Claire Buckman, E39876, 27800, D202]
</pre>
 
111

edits