diff options
author | Aryadev Chavali <aryadev@aryadevchavali.com> | 2025-02-14 21:46:15 +0000 |
---|---|---|
committer | Aryadev Chavali <aryadev@aryadevchavali.com> | 2025-02-14 21:46:43 +0000 |
commit | 334ece1ee77c7d76a8fec046681b2f4a817685a9 (patch) | |
tree | bf7f21984c9d726433f878fcd11a69d3bc0f86e6 /src/main.lisp | |
parent | f127e1e955b638a8397a27adda2dd51c101c37ae (diff) | |
download | cantedraw-334ece1ee77c7d76a8fec046681b2f4a817685a9.tar.gz cantedraw-334ece1ee77c7d76a8fec046681b2f4a817685a9.tar.bz2 cantedraw-334ece1ee77c7d76a8fec046681b2f4a817685a9.zip |
Split source code into different modules for cleanliness
Diffstat (limited to 'src/main.lisp')
-rw-r--r-- | src/main.lisp | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/src/main.lisp b/src/main.lisp new file mode 100644 index 0000000..53d9bec --- /dev/null +++ b/src/main.lisp @@ -0,0 +1,67 @@ +;;; main.lisp - 2025-02-11 + +;; Copyright (C) 2025 Aryadev Chavali + +;; This program is distributed in the hope that it will be useful, but WITHOUT +;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +;; FOR A PARTICULAR PURPOSE. See the GNU General Public License Version 2 for +;; details. + +;; You may distribute and modify this code under the terms of the GNU General +;; Public License Version 2, which you should have received a copy of along with +;; this program. If not, please go to <https://www.gnu.org/licenses/>. + +;;; Commentary: + +;; Defines the entrypoint of the program, handling any input from the user and +;; passing it into the system. + +;;; Code: + +(in-package :cantedraw.main) + +(fn read-input (&optional (prompt "> ")) (-> (&optional string) string) + (format t "~a" prompt) + (force-output) + (read-line)) + +(fn parse-integers (input) (-> (string) list) + (->> input + uiop:split-string + (mapcar #'parse-integer*) + (remove-if #'null))) + +(fn read-integers () (-> nil list) + (->> "Enter numbers: " + read-input + parse-integers)) + +(fn read-until-integers () (-> nil list) + (let ((inp (read-integers))) + (while (null inp) + (format t "Need at least one integer...~%") + (force-output) + (setq inp (read-integers))) + inp)) + +(fn is-valid-hand-index (n) (-> (fixnum) boolean) + (and (< n 5) + (>= n 0))) + +(fn read-until-valid-integers () (-> nil list) + (let ((inp (remove-duplicates (read-integers)))) + (while (not (every #'is-valid-hand-index inp)) + (format t "Need at most 5 integers between 0 and 4...~%") + (force-output) + (setq inp (remove-duplicates (read-integers)))))) + +(defun generate-hand () + (->> (make-deck) + alexandria:shuffle + (split 5))) + +(defun start () + (destructuring-bind (hand . rest) (generate-hand) + (declare (ignore rest)) + (->> hand cardset->str (format t "Hand=[~a]~%")) + (force-output))) |