Basic spaced repetition with code generation.
This commit is contained in:
1
projects/kiss-spaced-rep/.gitignore
vendored
Normal file
1
projects/kiss-spaced-rep/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
.*.json
|
5
projects/kiss-spaced-rep/build.hxml
Normal file
5
projects/kiss-spaced-rep/build.hxml
Normal file
@@ -0,0 +1,5 @@
|
||||
-lib kiss
|
||||
-lib datetime
|
||||
-cp src
|
||||
--main kiss_spaced_rep.Main
|
||||
--interp
|
18
projects/kiss-spaced-rep/haxelib.json
Normal file
18
projects/kiss-spaced-rep/haxelib.json
Normal file
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"main": "kiss_spaced_rep.Main",
|
||||
"name": "kiss-spaced-rep",
|
||||
"description": "DSL for spaced repetition study guides",
|
||||
"classPath": "src/",
|
||||
"dependencies": {
|
||||
"kiss": "",
|
||||
"datetime": ""
|
||||
},
|
||||
"url": "https://github.com/NQNStudios/kisslang",
|
||||
"contributors": [
|
||||
"NQNStudios"
|
||||
],
|
||||
"version": "0.0.0",
|
||||
"releasenote": "",
|
||||
"tags": [],
|
||||
"license": "LGPL"
|
||||
}
|
6
projects/kiss-spaced-rep/src/kiss_spaced_rep/Card.hx
Normal file
6
projects/kiss-spaced-rep/src/kiss_spaced_rep/Card.hx
Normal file
@@ -0,0 +1,6 @@
|
||||
package kiss_spaced_rep;
|
||||
|
||||
typedef Card = {
|
||||
front: String,
|
||||
back: String
|
||||
};
|
7
projects/kiss-spaced-rep/src/kiss_spaced_rep/Main.hx
Normal file
7
projects/kiss-spaced-rep/src/kiss_spaced_rep/Main.hx
Normal file
@@ -0,0 +1,7 @@
|
||||
package kiss_spaced_rep;
|
||||
|
||||
class Main {
|
||||
static function main() {
|
||||
Main_.main();
|
||||
}
|
||||
}
|
51
projects/kiss-spaced-rep/src/kiss_spaced_rep/Main_.kiss
Normal file
51
projects/kiss-spaced-rep/src/kiss_spaced_rep/Main_.kiss
Normal file
@@ -0,0 +1,51 @@
|
||||
(import
|
||||
datetime.DateTime
|
||||
datetime.DateTimeInterval)
|
||||
|
||||
(var oneDayInterval (DateTimeInterval.create (DateTime.make 1970 1 1) (DateTime.make 1970 1 2)))
|
||||
|
||||
(defMacroVar cardId 0)
|
||||
|
||||
(defMacro card [front back &builder b]
|
||||
(let [cObject (b.symbol "cObject$cardId")
|
||||
cScore (b.symbol "cScore$cardId")
|
||||
cRepetitions (b.symbol "cRepetitions$cardId")
|
||||
cPreviousEaseFactor (b.symbol "cPreviousEaseFactor$cardId")
|
||||
cPreviousInterval (b.symbol "cPreviousInterval$cardId")
|
||||
cNextDate (b.symbol "cNextDate$cardId")]
|
||||
(setMacroVar cardId (+ cardId 1))
|
||||
`{
|
||||
(var ,cObject (object front ,front back ,back))
|
||||
(savedVar :Int ,cRepetitions 0)
|
||||
(savedVar :Float ,cPreviousEaseFactor 2.5)
|
||||
(savedVar :Int ,cPreviousInterval 0)
|
||||
(savedVar :Float ,cNextDate (DateTime.make))
|
||||
|
||||
(function :Void ,cScore [:Int quality]
|
||||
(localVar &mut interval 0)
|
||||
(cond
|
||||
((>= quality 3)
|
||||
(set interval (Math.ceil (case ,cRepetitions (0 1) (1 6) (more (* ,cPreviousEaseFactor ,cPreviousInterval)) (never otherwise))))
|
||||
(+= ,cRepetitions 1)
|
||||
(set ,cPreviousEaseFactor (+ ,cPreviousEaseFactor (- 0.1 (* (- 5 quality) (+ 0.08 (* (- 5 quality ) 0.02)))))))
|
||||
(true
|
||||
(set ,cRepetitions 0)
|
||||
(set interval 1)))
|
||||
(set ,cPreviousEaseFactor (max 1.3 ,cPreviousEaseFactor))
|
||||
(set ,cPreviousInterval interval)
|
||||
(doFor _ (range interval)
|
||||
(set ,cNextDate #{DateTime.now() + oneDayInterval;}#))
|
||||
(print interval))
|
||||
|
||||
(let [:DateTime nextDate ,cNextDate]
|
||||
(if #{DateTime.now() > nextDate;}#
|
||||
{
|
||||
(print .front ,cObject)
|
||||
(.readLine (Sys.stdin))
|
||||
(print .back ,cObject)
|
||||
(,cScore (Std.parseInt (.readLine (Sys.stdin))))
|
||||
}
|
||||
(print "skipping a card until $(nextDate.toString)")))
|
||||
}))
|
||||
|
||||
(card "dog" "chien")
|
3
projects/kiss-spaced-rep/test.sh
Normal file
3
projects/kiss-spaced-rep/test.sh
Normal file
@@ -0,0 +1,3 @@
|
||||
#! /bin/bash
|
||||
|
||||
haxe build.hxml
|
Reference in New Issue
Block a user