module SuperMemo
Constants
- D_EF
D_EF = (0.1 - (5-q) * (0.08 + (5-q) * 0.02))
Public Class Methods
next_date(date, qs)
click to toggle source
# File lib/forgetful/supermemo.rb, line 39 def self.next_date(date, qs) ef, i, interval = traverse(qs) date + interval end
next_ef(q, ef)
click to toggle source
# File lib/forgetful/supermemo.rb, line 10 def self.next_ef(q, ef) [ef + D_EF[q], 1.3].max end
next_i(q, i)
click to toggle source
# File lib/forgetful/supermemo.rb, line 14 def self.next_i(q, i) return 0 if q < 3 i+1 end
next_interval(q, ef, i, interval)
click to toggle source
# File lib/forgetful/supermemo.rb, line 20 def self.next_interval(q, ef, i, interval) return 1 if q < 3 case i when 0 then 1 when 1 then 6 else (interval * ef).round end end
traverse(qs, ef=2.5, i=0, interval=0)
click to toggle source
[] -> 2.5, 0, 0
- 5,5,5
-
-> 2.8, 3, 16
# File lib/forgetful/supermemo.rb, line 32 def self.traverse(qs, ef=2.5, i=0, interval=0) return [ef, i, interval] if qs.empty? q = qs.first traverse(qs[1..-1], next_ef(q, ef), next_i(q, i), next_interval(q, ef, i, interval)) end