-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathscoring.jl
34 lines (24 loc) · 947 Bytes
/
scoring.jl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
module scoring
export Scorer
export get_cpm, get_elapsed, get_accuracy, reset!, is_empty
export register_press!
using Dates
mutable struct Scorer
keypresses::Vector{Float64}
errors::Vector{Float64}
function Scorer(keypresses::Vector{Float64} = Float64[], errors::Vector{Float64} = Float64[])
new(keypresses, errors)
end
end
is_empty(scorer::Scorer) = length(scorer.keypresses) == 0
get_elapsed(scorer::Scorer) = round(scorer.keypresses[end] - scorer.keypresses[1]; digits=2)
get_cpm(scorer::Scorer) = round(60 * length(scorer.keypresses) / get_elapsed(scorer); digits=2)
get_accuracy(scorer::Scorer) = round(100 * (1 - length(scorer.errors) / length(scorer.keypresses)); digits=2)
function reset!(scorer::Scorer)
scorer.keypresses = Float64[]
scorer.errors = Float64[]
end
function register_press!(scorer::Scorer; typo::Bool=false)
push!(typo ? scorer.errors : scorer.keypresses, time())
end
end;