This was my original version:
(defun LM:shortlong ( / _max _min d e i l r s )
(if (setq s (ssget "_X" '((0 . "LINE"))))
(progn
(setq _min 1e308
_max 0.0
)
(repeat (setq i (sslength s))
(setq e (ssname s (setq i (1- i)))
l (entget e)
d (distance (cdr (assoc 10 l)) (cdr (assoc 11 l)))
)
(if (< _min d _max)
(entdel e)
(progn
(if (< d _min) (setq _min d))
(if (< _max d) (setq _max d))
(setq r (cons (list d e) r))
)
)
)
(foreach x r
(or (equal (car x) _min 1e-8)
(equal (car x) _max 1e-8)
(entdel (cadr x))
)
)
)
)
(list _min _max)
)
But using Stefan's 'unerase' trick, I would change it to:
(defun LM:shortlong2 ( / _max _min d e i l m n r s )
(if (setq s (ssget "_X" '((0 . "LINE"))))
(progn
(setq _min 1e308
_max 0.0
)
(repeat (setq i (sslength s))
(setq e (ssname s (setq i (1- i)))
l (entget e)
d (distance (cdr (assoc 10 l)) (cdr (assoc 11 l)))
)
(if (< d _min) (setq _min d m e))
(if (< _max d) (setq _max d n e))
(entdel e)
)
(entdel m)
(entdel n)
)
)
(list _min _max)
)
Regarding the times, I must have a slow computer - I don't get much below 1800ms...