forgetful 0.2.1 → 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.1
1
+ 0.2.2
@@ -26,10 +26,10 @@ class Reminder
26
26
  converters = [lambda { |question| question },
27
27
  lambda { |answer| answer },
28
28
  lambda { |due_on| Date.parse(due_on) },
29
- lambda { |history| history.scan(/./).collect { |x| x.to_i } }]
29
+ lambda { |history| history.scan(/./).map { |x| x.to_i } }]
30
30
 
31
- CSV.parse(io, :skip_blanks => true).collect do |list|
32
- list = list.zip(converters).collect { |col, converter| converter[col] }
31
+ CSV.parse(io, :skip_blanks => true).map do |list|
32
+ list = list.zip(converters).map { |col, converter| converter[col] }
33
33
  new(*list)
34
34
  end
35
35
  end
@@ -9,7 +9,8 @@ class Reminder
9
9
  end
10
10
 
11
11
  def next(q)
12
- Reminder.new(question, answer, SuperMemo::next_date(Date.today, history + [q]), history + [q])
12
+ new_history = history + [q]
13
+ Reminder.new(question, answer, SuperMemo::next_date(Date.today, new_history), new_history)
13
14
  end
14
15
 
15
16
  def to_a
@@ -1,14 +1,30 @@
1
1
  module SuperMemo
2
+ # D_EF[q] = (0.1 - (5-q) * (0.08 + (5-q) * 0.02))
3
+ D_EF = { 0 => -0.8,
4
+ 1 => -0.54,
5
+ 2 => -0.32,
6
+ 3 => -0.14,
7
+ 4 => 0,
8
+ 5 => 0.1 }
9
+
2
10
  def self.next_ef(q, ef)
3
- return [ef + (0.1 - (5-q) * (0.08 + (5-q) * 0.02)), 1.3].max
11
+ [ef + D_EF[q], 1.3].max
4
12
  end
5
13
 
6
14
  def self.next_i(q, i)
7
- return q < 3 ? 0 : i+1
15
+ return 0 if q < 3
16
+
17
+ i+1
8
18
  end
9
19
 
10
20
  def self.next_interval(q, ef, i, interval)
11
- return q < 3 ? 1 : {0 => 1, 1 => 6}.fetch(i, interval * ef).round
21
+ return 1 if q < 3
22
+
23
+ case i
24
+ when 0 then 1
25
+ when 1 then 6
26
+ else (interval * ef).round
27
+ end
12
28
  end
13
29
 
14
30
  # [] -> 2.5, 0, 0
@@ -17,11 +33,11 @@ module SuperMemo
17
33
  return [ef, i, interval] if qs.empty?
18
34
 
19
35
  q = qs.first
20
- return traverse(qs[1..-1], next_ef(q, ef), next_i(q, i), next_interval(q, ef, i, interval))
36
+ traverse(qs[1..-1], next_ef(q, ef), next_i(q, i), next_interval(q, ef, i, interval))
21
37
  end
22
38
 
23
39
  def self.next_date(date, qs)
24
40
  ef, i, interval = traverse(qs)
25
- return date + interval
41
+ date + interval
26
42
  end
27
43
  end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 2
8
- - 1
9
- version: 0.2.1
8
+ - 2
9
+ version: 0.2.2
10
10
  platform: ruby
11
11
  authors:
12
12
  - Jonathan Palardy
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-05-02 00:00:00 -04:00
17
+ date: 2010-05-27 00:00:00 -04:00
18
18
  default_executable: forgetful
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -87,7 +87,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
87
87
  requirements: []
88
88
 
89
89
  rubyforge_project:
90
- rubygems_version: 1.3.6.1
90
+ rubygems_version: 1.3.7
91
91
  signing_key:
92
92
  specification_version: 3
93
93
  summary: A minimal command-line implementation of the SuperMemo 2 algorithm.