Дано 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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4.111 из 5
Похожие ответы