emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals/poker 37e54e3 06/12: Improve poker-hand-value performan


From: Stefan Monnier
Subject: [elpa] externals/poker 37e54e3 06/12: Improve poker-hand-value performance by 25%
Date: Tue, 1 Dec 2020 16:46:50 -0500 (EST)

branch: externals/poker
commit 37e54e3bcae8f28ac7e9f72276c3afbc7df855ed
Author: Mario Lang <mlang@delysid.org>
Commit: Mario Lang <mlang@delysid.org>

    Improve poker-hand-value performance by 25%
    
    Avoid unnecessary calls to poker-card-suit in flush check.
---
 poker.el | 13 +++++++++----
 1 file changed, 9 insertions(+), 4 deletions(-)

diff --git a/poker.el b/poker.el
index c908bb6..61888ae 100644
--- a/poker.el
+++ b/poker.el
@@ -109,11 +109,16 @@ The highest possible value is therefore #x8CBA98 and the 
lowest is #x053210."
                                             (eq (nth 1 ranks) 3))
                                    (setq ranks '(3 2 1 0 0)))
                                  (eq (- (nth 0 ranks) (nth 4 ranks)) 4)))
-                   (flush (not (cdr (delete-dups (mapcar #'poker-card-suit 
hand))))))
+                   (flush (let ((suit (poker-card-suit (car hand)))
+                                (tail (cdr hand)))
+                            (while (and tail
+                                        (eq suit (poker-card-suit (car tail))))
+                              (setq tail (cdr tail)))
+                            (not tail))))
                (cond ((and straight flush) #x800000)
-                     (straight #x400000)
-                     (flush #x500000)
-                     (t 0))))
+                     (straight             #x400000)
+                     (flush                #x500000)
+                     (t                      0))))
             ((equal rank-counts '(2 2 1)) #x200000)
             ((equal rank-counts '(3 1 1)) #x300000)
             ((equal rank-counts '(3 2)) #x600000)



reply via email to

[Prev in Thread] Current Thread [Next in Thread]