|
|
@@ -29,14 +29,15 @@
|
|
|
(max 0 (min 25 (- 25 (ceiling (/ (- +advent-time+ (get-universal-time)) 86400))))))
|
|
|
|
|
|
(defun format-stars(completions)
|
|
|
- (format nil "~{~a~^ ~}" (loop for daynum from 1 to (get-advent-days-active)
|
|
|
- collect (cond ((= 1 (length (agets completions (write-to-string daynum)))) "☆")
|
|
|
- ((= 2 (length (agets completions (write-to-string daynum)))) "★")
|
|
|
- (:otherwise "•")))))
|
|
|
+ (format nil "~{~a~}" (loop for daynum from 1 to (get-advent-days-active)
|
|
|
+ for stars = (length (agets completions (write-to-string daynum)))
|
|
|
+ collect (case stars (1 "☆") (2 "★") (t " • ")))))
|
|
|
|
|
|
(defun format-leaderboard (json)
|
|
|
(let ((sorted (sort (loop for (uid . member) in (agets json "members")
|
|
|
- collect (list (agets member "name") (agets member "local_score") (format-stars (agets member "completion_day_level"))))
|
|
|
+ collect (list (agets member "name")
|
|
|
+ (agets member "local_score")
|
|
|
+ (format-stars (agets member "completion_day_level"))))
|
|
|
#'> :key #'second)))
|
|
|
(format nil "🏆***Chad AoC Leaderboard***🏆~%~a~%~%~{~a. ~a: ~a ~% ~a~^~%~}" +leader-board-link+
|
|
|
(apply 'append (mapcar #'cons (alexandria:iota (length sorted) :start 1) sorted)))))
|