forgetful 0.2.1 → 0.2.2

Sign up to get free protection for your applications and to get access to all the features.
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.