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 +1 -1
- data/lib/forgetful/csv_ext/reminder.rb +3 -3
- data/lib/forgetful/reminder.rb +2 -1
- data/lib/forgetful/supermemo.rb +21 -5
- metadata +4 -4
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.2.
|
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(/./).
|
29
|
+
lambda { |history| history.scan(/./).map { |x| x.to_i } }]
|
30
30
|
|
31
|
-
CSV.parse(io, :skip_blanks => true).
|
32
|
-
list = list.zip(converters).
|
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
|
data/lib/forgetful/reminder.rb
CHANGED
@@ -9,7 +9,8 @@ class Reminder
|
|
9
9
|
end
|
10
10
|
|
11
11
|
def next(q)
|
12
|
-
|
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
|
data/lib/forgetful/supermemo.rb
CHANGED
@@ -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
|
-
|
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
|
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
|
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
|
-
|
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
|
-
|
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
|
-
-
|
9
|
-
version: 0.2.
|
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-
|
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.
|
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.
|