Определить, в каком месяце больше всего нерабочих дней - Lisp

Узнай цену своей работы

Формулировка задачи:

Добрый день. Прошу помощи с решением вот такой задачи:

>> Выходные и праздничные дни заданы списком пар (день, месяц). Определить, в каком месяце больше всего нерабочих дней.

Заранее благодарю за любое участие.

Решение задачи: «Определить, в каком месяце больше всего нерабочих дней»

textual
Листинг программы
(defun max-days-off-month (w
                           &aux
                           (v (loop for a in w
                                    collect (cadr a)))
                           (z (loop for a in (remove-duplicates v)
                                    collect (list a (count a v))))
                           (m (loop for a in z maximize (cadr a))))
  (remove-if-not #'(lambda (a) (= (cadr a) m)) z))
 
> (max-days-off-month '((1 1) (2 1) (3 1) (23 2) (8 3) (1 5) (2 5) (9 5)))
((1 3) (5 3))

Объяснение кода листинга программы

В этом коде определённая функция max-days-off-month принимает в качестве аргумента список w, состоящий из пар чисел. Каждое число в паре представляет количество выходных дней в определенном месяце. Функция выполняет следующие действия:

  1. Создает переменную v, которая содержит список всех вторых элементов из списка w.
  2. Создает переменную z, которая содержит список уникальных значений из списка v.
  3. Создает переменную m, которая содержит максимальное количество выходных дней из списка z.
  4. Возвращает список z, в котором все значения, для которых второй элемент не равен m, удалены. Пример использования функции показывает список w, состоящий из пар чисел. Результатом выполнения функции является список ((1 3) (5 3)), который означает, что в январе 3 выходных дня, а в мае - 5.

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


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

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

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