Make suit->int and int->suit complete inverses

This commit is contained in:
2025-02-24 23:37:01 +00:00
parent 0a2a97ca77
commit b26c06fff3

View File

@@ -45,13 +45,13 @@
(3 :Spades) (3 :Spades)
(t :Joker))) (t :Joker)))
(fn suit->int (item) (-> (suit) (integer 0 4)) (fn suit->int (item) (-> (suit) (integer 0 52))
(case item (case item
(:Diamonds 0) (:Diamonds 0)
(:Clubs 1) (:Clubs 13)
(:Hearts 2) (:Hearts 26)
(:Spades 3) (:Spades 39)
(t 4))) (t 52)))
(fn int->rank (n) (-> (fixnum) rank) (fn int->rank (n) (-> (fixnum) rank)
(let ((n (mod n 13))) (let ((n (mod n 13)))
@@ -74,13 +74,11 @@
(make-card :rank (int->rank num) (make-card :rank (int->rank num)
:suit (int->suit num))) :suit (int->suit num)))
(fn card->int (card) (-> (card) int-card) (fn card->int (card) (-> (card) fixnum)
(with-slots ((rank rank) (suit suit)) card (with-slots ((rank rank) (suit suit)) card
(let ((rank (rank->int rank)) (let ((rank (rank->int rank))
(suit (suit->int suit))) (suit (suit->int suit)))
(->> suit (+ rank suit))))
(* 13)
(+ rank)))))
(fn suit< (s1 s2) (-> (suit suit) boolean) (fn suit< (s1 s2) (-> (suit suit) boolean)
(< (suit->int s1) (suit->int s2))) (< (suit->int s1) (suit->int s2)))