Advertisement
Guest User

tally.lisp

a guest
May 15th, 2018
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lisp 1.02 KB | None | 0 0
  1. ;; Reddit /r/DailyProgrammer
  2. ;; [2018-05-14] Challenge #361 [Easy] Tally Program : dailyprogrammer
  3. ;; https://redd.it/8jcffg
  4.  
  5. ;; ECL 12.12.1
  6. ;; $ ecl -shell better-tally.lisp
  7. ;; Tuesday, May 15th, 2018
  8.  
  9. (defconstant *players* (concatenate 'list "abcde"))
  10. (defvar *scores*)
  11.  
  12. (defun tally (ch str) (cons ch (- (count ch str) (count (char-upcase ch) str))))
  13. (defun sort-alist (a b) (> (cdr a) (cdr b)))
  14. (defun display (alist) (maplist
  15.             (lambda (xs) (progn (when xs (format t "~A: ~A" (caar xs) (cdar xs)))
  16.                         (if (cdr xs)
  17.                         (format t ", ")
  18.                         (format t "~&"))))
  19.             alist))
  20.  
  21. (defun main (str) (progn (setq *scores* nil)
  22.              (dolist (x *players*) (setq *scores* (cons (tally x str) *scores*)))
  23.              (setq *scores* (sort *scores* #'sort-alist))
  24.              (display *scores*)))
  25.  
  26. (main "abcde")
  27. (main "dbbaCEDbdAacCEAadcB")
  28. (main "EbAAdbBEaBaaBBdAccbeebaec")
  29.  
  30. (quit)
  31.  
  32. ;; Output
  33. ;;
  34. ;; $ ecl -shell more-tally.lisp
  35. ;; e: 1, d: 1, c: 1, b: 1, a: 1
  36. ;; d: 2, b: 2, a: 1, c: 0, e: -2
  37. ;; c: 3, d: 2, e: 1, a: 1, b: 0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement