Jump to content
Sign in to follow this  
AM

rnd-symmetrical-position-swap

Recommended Posts

AM    98
;;; SWAPS THE POSITIONS SYMMETRICALLY AND RANDOMIZED 
;;; n => number of generations, output: last gen or all gens...
;;; new-version works also for symmetrical-sequences! (special cas)

(defun rnd-symmetrical-position-swap (n liste &key (out 'all))
  (let ((n1) (n2))
    (progn
      (setf liste (loop repeat n
                    do (setf n1 (random (1- (list-length-divide liste)))
                             n2 (random (1- (list-length-divide liste))))
                    collect (progn 
                              (setf liste (position-swap
                                           (list (list n1 n2) 
                                                 (list 
                                                  (- (1- (length liste)) n1)
                                                  (- (1- (length liste)) n2)))
                                           
                                           liste)))))
      (cond ((equal out 'last)
             (car (last liste)))
            ((equal out 'all)
             (append liste))))))


(rnd-symmetrical-position-swap 2 '(1 2 3 4 3 2 1) :out 'last)
(rnd-symmetrical-position-swap 5 '(1 2 3 4 5 6) :out 'last)
(rnd-symmetrical-position-swap 2 '(a b c d e f g h) :out 'all)

 

Edited by AM
edited

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this  

×