Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > Lisp
Перезагрузить страницу Написать функцию, ищущую минимум в заданном списке списков
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
Zanoza Zanoza вне форума
Новичок
 
Сообщений: 9
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 02.05.2007
По умолчанию Написать функцию, ищущую минимум в заданном списке списков - 07.05.2007, 17:02

1) Написать функцию, ищущую минимум в заданном списке списков. Например: вход ((34 73 9 6) (5) (67 8 4 0)). выход (6 5 0). Использовать mapcar и lambda.
2) Головоломка про кувшины. Имеются 2 кувшина 3л и 5л. Можно заполнять кувшины из источника, опорожнять их, сливать воду из одного кувшина в другой, пока один из них не окажется полным или пустым. Найти посл-ть действий, при котором в большем кувшине останется 4 литра воды.

Заранее спасибо!
Ответить с цитированием
  (#2 (permalink)) Старый
_sg _sg вне форума
Member
 
Аватар для _sg
 
Сообщений: 512
Сказал(а) спасибо: 5
Поблагодарили 42 раз(а) в 38 сообщениях
Регистрация: 23.01.2007
По умолчанию 07.05.2007, 18:54

1)
Код:
(defun list-min (w)
  (mapcar #'(lambda (a) (reduce #'min a)) w))
(list-min '((34 73 9 6) (5) (67 8 4 0)))
(6 5 0)
Ответить с цитированием
  (#3 (permalink)) Старый
Alexey Dejneka Alexey Dejneka вне форума
Member
 
Сообщений: 451
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 23.11.2004
По умолчанию 07.05.2007, 22:12

Код:
;; state: #(water-in-big water-in-small)
(defparameter *capacity* #(5 3))

(defun move (state command)
  (destructuring-bind (oper from) command
    (let ((new-state (copy-seq state)))
      (ecase oper
        ((empty) (setf (elt new-state from) 0))
        ((fill) (setf (elt new-state from) (elt *capacity* from)))
        ((move) (let ((to (- 1 from)))
                  (let ((delta (min (- (elt *capacity* to) (elt new-state to))
                                     (elt new-state from))))
                    (decf (elt new-state from) delta)
                    (incf (elt new-state to) delta)))))
      new-state)))

(defun generate-next (state last-move)
  (loop for command in '((empty 0) (empty 1) (fill 0) (fill 1) (move 0) (move 1))
        for new = (move state command)
        when (not (eq command last-move)) collect (cons new command)))

(defun good-p (state)
  (equalp state #(4 0)))

(defun find-good-from* (state rest last-move)
  (cond ((good-p state)
         (list state))
        ((zerop rest)
         nil)
        (t
         (loop for (next . move) in (generate-next state last-move) do
           (let ((solution (find-good-from* next (1- rest) move)))
             (when solution
               (return (cons state solution))))))))

(defun find-good-from (state)
  (loop for rest from 0
        thereis (find-good-from* state rest nil)))

CL-USER> (time (find-good-from #(0 0)))
Evaluation took:
  0.071 seconds of real time
  0.072004 seconds of user run time
  0.0 seconds of system run time
  [Run times include 0.008 seconds GC run time.]
  0 calls to %EVAL
  0 page faults and
  7,551,792 bytes consed.
(#(0 0) #(5 0) #(2 3) #(2 0) #(0 2) #(5 2) #(4 3) #(4 0))
P.S. А как уличали в списывании? Преподаватель сказал "Да знаю я этот форум..."?
Ответить с цитированием
  (#4 (permalink)) Старый
ment ment вне форума
Member
 
Сообщений: 28
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 25.03.2007
По умолчанию 08.05.2007, 13:51

Цитата:
2) Головоломка про кувшины. Имеются 2 кувшина 3л и 5л. Можно заполнять кувшины из источника, опорожнять их, сливать воду из одного кувшина в другой, пока один из них не окажется полным или пустым. Найти посл-ть действий, при котором в большем кувшине останется 4 литра воды.

Заранее спасибо!
Берем 3лк и переливаем воду в 5лк . В 5лк 3л
Берем еще 3лк и наливаем еще в 5лк до конца. В 3лк остался 1л
Выливаем всю воду из 5лк
Заливаем в 5лк 1л из 3лк
Добавляем в 5лк еще 3л из 3лк
Ответить с цитированием
  (#5 (permalink)) Старый
Zanoza Zanoza вне форума
Новичок
 
Сообщений: 9
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 02.05.2007
По умолчанию 08.05.2007, 21:56

Цитата:
P.S. А как уличали в списывании? Преподаватель сказал "Да знаю я этот форум..."?
Спасибо вам большое!
Уличали обычным образом -- пару вопросиков и.... упс.. я провалилась.
Сейчас же я подойду к сдаче серьезнее )))
Ответить с цитированием
Ads.
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Определите функцию, которая из двух списков одинаковой длины строит список Masha11 Lisp 2 13.01.2011 15:11
Определите функцию same, которая для двух списков находит первый Masha11 Lisp 4 13.01.2011 13:33
Минимум в списке blackfey Prolog 6 09.02.2010 16:37
Описать функцию, которая определяла бы положение атома в списке Snusmumrik Lisp 2 15.12.2009 17:49
Нужно описать функцию,которая бы определяла положение атома в списке lulu Lisp 1 06.12.2009 17:37
Написать функцию которая меняет порядок элементов в списке Alexandr_14 Lisp 5 17.01.2008 13:36
Определить функцию, которая находит в списке заданный элемент yura_korepin Lisp 1 19.11.2007 10:41
Написать функцию, осуществляющую замену элементов в списке W списка Y Lass Lisp 5 06.05.2007 22:25
Разработать функцию, находящую теоретико-множественное пересечение двух списков AR-MAD Lisp 4 21.01.2007 09:28
Разработать функцию, находящую теоретико-множественное пересечение двух списков Slimy Lisp 2 21.11.2006 10:40
Как написать создание списков Sattin Вопросы начинающих программистов 2 11.11.2005 02:09
Необходимо написать программу ищущую корреляцию jker Вопросы начинающих программистов 1 11.05.2004 02:30



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов