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