Module: FsrsRuby

Defined in:
lib/fsrs_ruby.rb,
lib/fsrs_ruby.rb,
lib/fsrs_ruby/alea.rb,
lib/fsrs_ruby/models.rb,
lib/fsrs_ruby/helpers.rb,
lib/fsrs_ruby/version.rb,
lib/fsrs_ruby/algorithm.rb,
lib/fsrs_ruby/constants.rb,
lib/fsrs_ruby/parameters.rb,
lib/fsrs_ruby/fsrs_instance.rb,
lib/fsrs_ruby/type_converter.rb,
lib/fsrs_ruby/strategies/seed.rb,
lib/fsrs_ruby/schedulers/base_scheduler.rb,
lib/fsrs_ruby/strategies/learning_steps.rb,
lib/fsrs_ruby/schedulers/basic_scheduler.rb,
lib/fsrs_ruby/schedulers/long_term_scheduler.rb

Overview

A port of Alea algorithm by Johannes Baagøe github.com/davidbau/seedrandom/blob/released/lib/alea.js Original work is under MIT license

Defined Under Namespace

Modules: Constants, Helpers, ParameterUtils, Rating, Schedulers, State, Strategies Classes: Alea, Algorithm, Card, Error, FSRSInstance, Mash, Parameters, RecordLogItem, ReviewLog, TypeConverter

Constant Summary collapse

VERSION =
'1.0.0'
FSRS_VERSION =
"v#{VERSION} using FSRS-6.0"

Class Method Summary collapse

Class Method Details

.alea(seed = nil) ⇒ Proc

Factory function for creating Alea PRNG with callable interface

Parameters:

  • seed (Integer, String, nil) (defaults to: nil)

    Seed for PRNG

Returns:

  • (Proc)

    Callable PRNG with additional methods



77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
# File 'lib/fsrs_ruby/alea.rb', line 77

def self.alea(seed = nil)
  xg = Alea.new(seed)

  prng = lambda { xg.next }

  # Add methods to the proc
  prng.define_singleton_method(:int32) do
    (xg.next * 0x100000000).to_i
  end

  prng.define_singleton_method(:double) do
    prng.call + ((prng.call * 0x200000).to_i * 1.1102230246251565e-16)  # 2^-53
  end

  prng.define_singleton_method(:state) do
    xg.state
  end

  prng.define_singleton_method(:import_state) do |state|
    xg.state = state
    prng
  end

  prng
end

.create_empty_card(now = nil) ⇒ Card

Create an empty card

Parameters:

  • now (Time, nil) (defaults to: nil)

    Current time

Returns:

  • (Card)

    New empty card



35
36
37
# File 'lib/fsrs_ruby.rb', line 35

def self.create_empty_card(now = nil)
  ParameterUtils.create_empty_card(now)
end

.new(params = {}) ⇒ FSRSInstance

Factory method to create FSRS instance

Parameters:

  • params (Hash) (defaults to: {})

    FSRS parameters

Returns:



28
29
30
# File 'lib/fsrs_ruby.rb', line 28

def self.new(params = {})
  FSRSInstance.new(params)
end