Дано n отрезков на интервале (A,B). Определите часть интервала, который покрывается наибольшим количеством от - Lisp
Формулировка задачи:
Пусть дано n отрезков на интервале (A,B). Определите часть интервала, который покрывается наибольшим количеством отрезков. Напишите функцию для определения количества отрезков, покрывающих заданный интервал.
Решение задачи: «Дано n отрезков на интервале (A,B). Определите часть интервала, который покрывается наибольшим количеством от»
textual
Листинг программы
- (defun max-span (w
- &aux
- (v (reduce #'append w))
- (n (reduce #'min v))
- (m (reduce #'max v))
- (x (loop for a in w collect (line n m a)))
- (z (apply #'mapcar #'list x))
- (p (pair z))
- (s (loop for a in p
- collect
- (mapcar #'list (car a) (cadr a))))
- (i (loop for a in s
- collect
- (loop for e in a
- when (every #'numberp e)
- collect e)))
- (r (reduce #'max (mapcar #'length i))))
- (values (loop for a in i
- when (= (length a) r)
- collect (car a))
- r))
- (defun line (n m w)
- (loop for a from n to m
- if (<= (first w) a (second w)) collect a
- else collect 'a))
- (defun pair (w)
- (when (cdr w) (cons (list (car w) (cadr w))
- (pair (cdr w)))))
- > (max-span '((1 8) (1 9) (2 3) (2 4) (2 5) (6 7) (6 8) (6 9)))
- ((2 3) (6 7))
- 5
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д