Author Topic: Sorting a challenge  (Read 5538 times)

0 Members and 1 Guest are viewing this topic.

ElpanovEvgeniy

  • Water Moccasin
  • Posts: 1569
  • Moscow (Russia)
Re: Sorting a challenge
« Reply #15 on: June 06, 2013, 10:31:10 AM »
my version for revers sort:

Code - Auto/Visual Lisp: [Select]
  1. (vl-sort lst
  2.          (function
  3.            (lambda (a b)
  4.              (or (< (car a) (car b))
  5.                  (and (= (car a) (car b))
  6.                       (>= (read (vl-string-subst "e" "x" (cadr a))) (read (vl-string-subst "e" "x" (cadr b))))
  7.                  )
  8.              )
  9.            )
  10.          )
  11. )

oops

Code - Auto/Visual Lisp: [Select]
  1. (("beam" "12x12" 9) ("beam" "12x10" 6) ("beam" "12x7" 3)
  2.  ("plywood" "10x17" 5) ("plywood" "14x12" 14) ("plywood" "10x12" 2) ("plywood" "14x11" 4)
  3.  ("steel" "4x4" 8))

ElpanovEvgeniy

  • Water Moccasin
  • Posts: 1569
  • Moscow (Russia)
Re: Sorting a challenge
« Reply #16 on: June 06, 2013, 10:32:36 AM »
Code - Auto/Visual Lisp: [Select]
  1. (vl-sort lst
  2.          (function
  3.            (lambda (a b)
  4.              (or (< (car a) (car b))
  5.                  (and (= (car a) (car b))
  6.                       (<= (read (vl-string-subst "e-" "x" (cadr a))) (read (vl-string-subst "e-" "x" (cadr b))))
  7.                  )
  8.              )
  9.            )
  10.          )
  11. )

Code - Auto/Visual Lisp: [Select]
  1. (("beam" "12x12" 9) ("beam" "12x10" 6) ("beam" "12x7" 3)
  2.  ("plywood" "10x17" 5) ("plywood" "10x12" 2) ("plywood" "14x12" 14) ("plywood" "14x11" 4)
  3.  ("steel" "4x4" 8))

ElpanovEvgeniy

  • Water Moccasin
  • Posts: 1569
  • Moscow (Russia)
Re: Sorting a challenge
« Reply #17 on: June 06, 2013, 10:34:10 AM »
interesting idea, but it does not work ...

ribarm

  • Gator
  • Posts: 3279
  • Marko Ribar, architect
Re: Sorting a challenge
« Reply #18 on: June 06, 2013, 01:10:35 PM »
Thanks "e-"...

You don't even need (read)

Code - Auto/Visual Lisp: [Select]
  1. (vl-sort lst
  2.         (function
  3.           (lambda (a b)
  4.             (or (< (car a) (car b))
  5.                 (and (= (car a) (car b))
  6.                      (<= (vl-string-subst "" "x" (cadr a)) (vl-string-subst "" "x" (cadr b)))
  7.                 )
  8.             )
  9.           )
  10.         )
  11. )
  12.  
Marko Ribar, d.i.a. (graduated engineer of architecture)

:)

M.R. on Youtube

ribarm

  • Gator
  • Posts: 3279
  • Marko Ribar, architect
Re: Sorting a challenge
« Reply #19 on: June 08, 2013, 06:31:09 AM »
(defun LM:mysort-3 ( l / _sort )
   (defun _sort ( x l a b c / y )
       (cond
           (   (null (setq y (car l)))
               (append (LM:mysort-3 a) (list x) (LM:mysort-3 b) (LM:mysort-3 (reverse c)))
           )
           (   (and (= (car x) (car y)) (= (atoi (cadr x)) (atoi (cadr y))))
               (if (< (atoi (substr (cadr x) (+ 2 (vl-string-position 120 (cadr x)))))
                      (atoi (substr (cadr y) (+ 2 (vl-string-position 120 (cadr y)))))
                   )
                   (_sort x (cdr l) a (cons y b) c)
                   (_sort x (cdr l) (cons y a) b c)
               )
           )
           (   (_sort x (cdr l) a b (cons y c)))
       )
   )
   (if l (_sort (car l) (cdr l) nil nil nil))
)


Why here (reverse)... Just can't figure it up...
No need to answer - just experimenting with code tags...
« Last Edit: June 08, 2013, 09:13:41 AM by ribarm »
Marko Ribar, d.i.a. (graduated engineer of architecture)

:)

M.R. on Youtube