Определить, в каком месяце больше всего нерабочих дней - 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
, состоящий из пар чисел. Каждое число в паре представляет количество выходных дней в определенном месяце. Функция выполняет следующие действия:
- Создает переменную
v
, которая содержит список всех вторых элементов из спискаw
. - Создает переменную
z
, которая содержит список уникальных значений из спискаv
. - Создает переменную
m
, которая содержит максимальное количество выходных дней из спискаz
. - Возвращает список
z
, в котором все значения, для которых второй элемент не равенm
, удалены. Пример использования функции показывает списокw
, состоящий из пар чисел. Результатом выполнения функции является список((1 3) (5 3))
, который означает, что в январе 3 выходных дня, а в мае - 5.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д