branch: elpa/gnosis
commit a7e613d4da79113ac4ccefbe0c89f88b48d3e961
Author: Thanos Apollo <pub...@thanosapollo.org>
Commit: Thanos Apollo <pub...@thanosapollo.org>

    Add gnosis-calculate-average-daily-reviews.
    
    + Function that calculates average review for DAYS number.
---
 gnosis.el | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)

diff --git a/gnosis.el b/gnosis.el
index 8e0c82d700..ee435f03cc 100644
--- a/gnosis.el
+++ b/gnosis.el
@@ -298,6 +298,25 @@ When VERIFICATION is non-nil, skip `y-or-n-p' prompt."
       (emacsql-with-transaction gnosis-db (gnosis--delete 'decks `(= id ,id)))
       (message "Deleted deck `%s'" deck-name))))
 
+(defun gnosis-calculate-average-daily-reviews (&optional days)
+  "Calculate average reviews over the last DAYS days."
+  (let* ((days (or days gnosis-default-average-review-period))
+        (review-counts '())
+         (collect-reviews
+          (lambda (d)
+            (let ((day-reviews (gnosis-select 'reviewed-total 'activity-log
+                                             `(and (> reviewed-total 0)
+                                                   (= date 
',(gnosis-algorithm-date (- d))))
+                                             t)))
+              (setq review-counts (append review-counts day-reviews))))))
+    ;; Collect reviews for each day
+    (dotimes (d days)
+      (funcall collect-reviews d))
+    ;; Return average, avoiding division by zero
+    (if (> (length review-counts) 0)
+        (/ (apply '+ review-counts) (float (length review-counts)))
+      0)))
+
 (defun gnosis-shuffle (seq)
   "Shuffle SEQ."
   (cl-loop with len = (length seq)

Reply via email to