Автор: Админка

Переправа волк коза капуста


Ответ на задачу про волка, козу и капусту.

Задача про волка, козу и капусту – одна из самых известных и популярных задач о переправе. В данной статье мы разберём решение данной задачи.

Формулировка.

Однажды крестьянину понадобилось перевезти через реку волка, козу и капусту. У крестьянина есть лодка, в которой может поместиться, кроме самого крестьянина, только одно существо или предмет — или волк, или коза, или капуста. Если крестьянин оставит без присмотра волка с козой, то волк съест козу; если крестьянин оставит без присмотра козу с капустой, коза съест капусту. Как крестьянину перевезти на другой берег всё своё имущество в целости и сохранности?

Решение.

Стоит сразу заметить, что коза взаимодействует сразу с двумя объектами: и волком, и капустой. Поэтому первой с собой стоит взять именно её.

  • Берём козу и перевозим её на другой берег, высаживаем.
  • Возвращаемся обратно, берём волка и перевозим его на другой берег.
  • Высаживаем волка, забираем козу и везём её обратно.
  • Высаживаем козу, забираем капусту и везём её на другой берег.
  • Высаживаем капусту и возвращаемся обратно, берём козу и везём её на другой берег
  • Высаживаем козу – все в сборе.

У этой задачи есть и другой не очень принципиально отличающееся решение: капусту и волка можно поменять местами. Основная идея – не оставлять козу с волком или капустой.

Похожие статьи

Волк, коза и капуста. Загадка на логику.

Эта известная головоломка есть в народном творчестве таких стран, как Италия, Румыния, Эфиопия и Зимбабве. Существует не одна ее вариация: с лисой, курицей и хлебом или с пантерой, свиньей и кашей! А Ты знаешь, как решать задачу о переправе?

14 92 т.

Итак, представь, что Ты — фермер, у которого есть маленькая лодка. С одного берега реки на другой Тебе необходимо перевезти волка, козу и капусту. Всех вместе взять нельзя — нужно переправлять каждого «пассажира» по отдельности. Но имей в виду, что когда Ты повезешь на другой берег капусту, в это время волк съест козу. А если решишь везти волка — коза скушает капусту.

Что же делать? Хорошенько поразмысли. Рейсов можно делать сколько угодно — главное, чтобы все оставалось целым и невредимым.

Ну как, удалось решить эту нелегкую задачку? Все еще нет? Ну ладно, дам одну подсказку: переправлять «пассажира» можно не только туда, но и назад!

Что же — думаю, теперь Тебе удалось перевезти всех целыми и невредимыми! Посмотри на решение задачи и проверь, все ли сходится.

  1. Сначала нужно перевезти козу, оставив волка с капустой.
  2. Теперь возвращаемся и забираем волка. Но оставлять волка с козой на новом берегу нельзя.
  3. Поэтому берем козу с собой в лодку, а волк сидит на берегу одинокий и голодный.
  4. Козу оставляем на берегу, а капусту переправляем к волку.
  5. Возвращаемся назад и забираем козу.

Кстати, это не единственный вариант решения задачи. Вот еще один:

  1. Везем козу туда.
  2. Возвращаемся обратно.
  3. Везем капусту туда.
  4. Забираем козу назад.
  5. Везем волка туда.
  6. Возвращаемся за козой.
  7. Перевозим козу туда.

Готово!

А теперь признавайся, удалось ли Тебе самостоятельно дойти до правильного решения, и если да — то каким способом? ;)

Еще больше отборных загадок найдешь тут:

Заметили орфографическую ошибку? Выделите её мышкой и нажмите Ctrl+Enter

Загадка про волка, козу и капусту

На чтение 1 мин. Просмотров 78

Крестьянину нужно перевезти через реку волка, козу и капусту. Но лодка такова, что в ней может поместиться только крестьянин, а с ним или только волк, или только коза, или только капуста. Но если оставить волка с козой, то волк съест козу, а если оставить козу с капустой, то коза съест капусту. Как перевез свой груз крестьянин?

Ответ

Ясно, что приходится начать с козы. Крестьянин, перевезя козу, возвращается и берет волка, которого перевозит на другой берег, где его и оставляет, но зато берет и везет обратно на первый берег козу. Здесь он оставляет ее и перевозит к волку капусту. Вслед затем, возвратившись, он перевозит козу, и переправа оканчивается благополучно.

15 интересных логических задачек для детей и взрослых

15 интересных логических задачек для детей и взрослых

Логические игры и головоломки — это отличное развлечение как для детей, так и для взрослых. Они вырабатывают привычку думать, рассуждать, делать выводы и всегда стараться найти решение проблемы.

Задачка про волка, козу и капусту

Помните старинную задачу про волка, козу и капусту? Кто не решал ее в детстве! Предложите задачу своему ребенку! Мужику нужно перевезти через реку волка, козу и капусту. Но в лодке может поместиться только он сам, а с ним или только волк, или только коза, или только капуста. Но если оставить волка с козой, то волк съест козу, а если оставить козу с капустой, то коза съест капусту. Как мужику перевезти свой груз?

Решение:

Нужно начать с козы. Перевезя ее, мужик возвращается на другой берег и берет волка. Переправив волка, он оставляет его на другом берегу, но зато берет козу и везет ее обратно на первый берег. Здесь он оставляет ее и перевозит к волку капусту. Затем, вернувшись, берет козу — переправа благополучно заканчивается.

Детективная задачка

На лугу лежат пять кусочков угля, одна морковь и шарф. Никто не клал их туда. Почему они там лежат?

Решение:

Дети использовали эти предметы, когда лепили снеговика зимой. С приходом весны снеговик растаял, и пять кусочков угля, морковка и шарф остались лежать уже на лугу.

Летная задачка

Мужчина выпрыгивает без парашюта из самолета. Высадка небезопасная, но мужчина остается целым и невредимым. Почему?

Решение:

Самолет находится ещё на взлётно-посадочной полосе.

Задачка про ноги

Ваня идет к лесному озеру. Ему навстречу движется класс из 25 учеников и двух преподавателей. Родители 10 детей также принимают участие в прогулке. Пять матерей еще везут своих детей на колясках. Преподаватель ведет с собой собаку. Сколько ног идут по дороге к лесному озеру?

Решение:

По дороге к лесному озеру идут только две ноги — Ванины. Все, кого он встретил, возвращаются с озера.

Сколько ворон?

Вишня у Маши плодоносит в большом количестве. К сожалению, на дерево садятся вороны и безжалостно клюют плоды. Вечером Маша считает ворон. Их 38! Это настолько выводит ее из себя, что она ловит одну ворону сачком. Сколько ворон осталось на дереве?

Решение:

Осталась только одна ворона, пойманная Машей. Остальные вороны испугались и улетели.

Задачка на внимательность

Молодая девушка заказывает в кафе яблочный сок, рулет и шоколадное мороженое. Официант, который принимает заказ, приносит ей вскоре все желаемое. После того как девушка оплатила заказ, официант спросил: «Трудно работать в полиции?» Как он догадался, что девушка — полицейский?

Решение:

Девушка была в полицейской форме.

День рождения князя

Когда князь празднует день рождения, его подданные должны принести ему достойный подарок: самую сочную ветчину, самый пряный сыр, самую упитанную курицу, искусно выделанные шкурки, плетеные корзинки, глиняные кувшины и резные изделия. Крестьянин сделал князю необычный подарок: бутылку с яблочным соком. Отличие этого подарка — яблоко находится в бутылке. Князь поражен: каким образом тот смог засунуть яблоко в бутылку? «Как ты сделал это? При помощи колдовства?» — спрашивает князь. Крестьянин отвечает: «Догадайтесь сами, но я вовсе не чародей!» Как яблоко попадает в бутылку?

Решение:

Крестьянин надевает бутылку на яблоневую ветку вскоре после цветения. Таким образом, плод развивается в бутылке.

Еще один вид логических игр придется всем по вкусу — это игры с палочками. Для игры понадобится набор счетных палочек или любые палочки одинаковой длины и толщины (например, спички, с которых предварительно счистили серу), подойдут и полоски картона. Если вы играете вместе с детьми, то можно давать устные задания. Если ребенок играет один, подготовьте карточки с рисунком и условием игровой задачи.

Задание № 1

Переложи одну палочку так, чтобы дом смотрел в другую сторону.

Задание № 2

Переложи 3 палочки так, чтобы корова оглянулась и подняла хвост.

Еще несколько заданий с палочками из пособия С. И. Волковой «Математика и конструирование» (1−4 классы):

А в завершении мы хотим предложить вам самостоятельно изготовить знаменитую китайскую головоломку «Танграм». И в этом нам опять поможет пособие С. И. Волковой «Математика и конструирование».

Из деталей этой головоломки можно складывать разные фигуры. Сложите для начала 1 и 2 фигуры. Рисунок вам поможет. Теперь попробуйте сложить фигуры 3, 4, 5, 6. И с этим справились? Поздравляем!

Надеемся, что выполняя предложенные задания, вы и ваш ребенок не раз испытали радость от приложенных интеллектуальных усилий, а главное — от самостоятельно найденного решения.

Фото: NadyaEugene/masterone/Shutterstock.com, архив пресс-службы,

Задача на переправу Волк, коза и капуста

Волк, коза и капуста. На берегу реки стоит крестьянин с лодкой, а рядом с ним находятся волк, коза и капуста.

Крестьянин должен переправиться сам и перевезти волка, козу и капусту на другой берег. Однако в лодку кроме крестьянина помещается либо только волк, либо только коза, либо только капуста.

Оставлять же волка с козой или козу с капустой без присмотра нельзя — волк может съесть козу, а коза — капусту.

Как должен вести себя крестьянин?

Решение задачи Волк, коза и капуста

В данной задаче крестьянин может следовать одному из двух алгоритмов:

Алгоритм 1

1) сначала переправляются крестьянин и коза
2) крестьянин оставляет козу и возвращается обратно
3) крестьянин переправляет волка
4) крестьянин возвращается с козой
5) крестьянин переправляет капусту
6) крестьянин возвращается один
7) крестьянин забирает козу и отправляется на другой берег

Алгоритм 2

1) сначала переправляются крестьянин и коза
2) крестьянин оставляет козу и возвращается обратно
3) крестьянин переправляет капусту
4) крестьянин возвращается с козой
5) крестьянин переправляет волка
6) крестьянин возвращается один
7) крестьянин забирает козу и отправляется на другой берег

Перевозим волка, козу и капусту через реку с эффектами на Haskell / Хабр

Однажды крестьянину понадобилось перевезти через реку волка, козу и капусту. У крестьянина есть лодка, в которой может поместиться, кроме самого крестьянина, только один объект — или волк, или коза, или капуста. Если крестьянин оставит без присмотра волка с козой, то волк съест козу; если крестьянин оставит без присмотра козу с капустой, коза съест капусту.

В этой статье мы попытаемся найти обобщенное решение для такого типа головоломок и для этого будем использовать алгебраические эффекты.

Начнем с самого простого — маршрута перемещений. Так как мы не знаем заранее, через какое гарантированное количество шагов мы получим решение, можно построить бесконечный маршрут, все равно мы будем вычислять его лениво:

data Direction = Back | Forward route :: [Direction] route = iterate alter Forward alter :: Direction -> Direction alter Back = Forward alter Forward = Back 

Так как мы собираемся построить обобщенное решение, то и абстрагируемся от персонажей тоже. Мы построим нетранзитивное симметричное отношение порядка между элементами множества персонажей (поделитесь в комментариях, если для этого есть свое устоявшееся название):
data Character = Wolf | Goat | Cabbage deriving Eq class Survivable a where survive :: a -> a -> Ordering instance Survivable Character where survive Wolf Goat = GT survive Goat Wolf = LT survive Goat Cabbage = GT survive Cabbage Goat = LT survive _ _ = EQ 

Зачем вообще использовать эффекты? Эффекты помогают бороться со сложностью, которая присуща любой предметной области. Значит, для того, чтобы определить какие эффекты использовать для решения головоломки, стоит подумать над тем, с какими сложностями мы можем столкнуться, когда попробуем описать решение задачи с помощью кода:
  • Чтобы найти решение, при котором все персонажи будут перевезены на противоположный берег, надо перебрать много вариантов перестановок. Для этого мы будем использовать эффект множественности, которого можно добиться с помощью обычного списка.
  • Еще нам нужно запоминать местоположение персонажа, чтобы проверять условия совместимости с другими персонажами (волк ест козу, коза ест капусту) и кого можно посадить на лодку. Мы можем хранить состав двух берегов type River a = ([a],[a]) c помощью эффекта состояния State (River a).
  • Лодка может взять кого-нибудь на борт, а может и не брать — тут нам пригодится эффект частичности с Maybe.

В коде я буду использовать свою экспериментальную библиотеку joint (на Хабре есть две статьи, объясняющие ее суть — первая и вторая), но при желании решение можно перенести на transformers или mtl.

Итак, у нас есть три разрозненных эффекта: состояние, множественность, частичность. Теперь надо решить, как мы собираемся их скомпоновать между собой:

  • В аппликативной/монадной цепочке вычислений для Maybe, если мы где-то получили Nothing, то и результат всего вычислений будет Nothing. Мы оставим его отдельно, так как не хотим, чтобы при отправлении пустой лодки (без персонажа, крестьянина мы не учитываем) мы потеряли весь прогресс в нахождении решения.
  • Каждый последующий выбор хода (эффект множественности) должен опираться на состав текущего берега (эффект состояния), так как мы не можем взять персонажа в лодку, если она находится на другом берегу. Следовательно, нам нужно эти эффекты сцепить в трансформер: State (River a) :> [].

Один ход в головоломке можно описать как последовательность действий:
  1. Получить состав персонажей на текущем берегу
  2. Выбрать следующего персонажа для транспортировки
  3. Переместить персонажа на противоположный берег
step direction = bank >>= next >>= transport

Давайте пройдемся по каждому шагу подробнее.

В зависимости от направления перемещения лодки, применяем линзу для источника отправления к состоянию всей реки и получаем состав текущего берега:

bank :: (Functor t, Stateful (River a) t) => t [a] bank = view (source direction) <$> current 

Выбор следующего персонажа происходит так: получая набор персонажей с берега (предыдущее выражение bank), мы формируем пространство выбора, добавляя к этому самому пространству пустую лодку:

\xs -> Nothing : (Just <$> xs) 

Для каждого кандидата (пустая лодка (Nothing) — тоже кандидат) проверяем чтобы на оставшемся берегу не оставалось персонажей, которые были бы не прочь полакомиться друг другом:

valid :: Maybe a -> Bool valid Nothing = and $ coexist <$> xs <*> xs valid (Just x) = and $ coexist <$> delete x xs <*> delete x xs coexist :: Survivable a => a -> a -> Bool coexist x y = survive x y == EQ 

И когда мы отфильтровали пространство выбора персонажей, поднимаем эффект множественности и возвращаем каждый элемент из этого пространства выбора:

next :: (Survivable a, Iterable t) => [a] -> t (Maybe a) next xs = lift . filter valid $ Nothing : (Just <$> xs) 

Остался последний шаг — фактическая транспортировка c помощью линз: удаляем персонажа с берега отправки и добавляем к берегу назначения:

leave, land :: River a -> River a leave = source direction %~ delete x land = target direction %~ (x :) 

Если в лодке был персонаж — изменяем состояние реки, иначе ход был холостым:

transport :: (Eq a, Applicative t, Stateful (River a) t) => Maybe a -> t (Maybe a) transport (Just x) = modify @(River a) (leave . land) $> Just x where transport Nothing = pure Nothing 

Было бы неплохо посмотреть на работу программы в действии. Для нахождения решения нам нужно как минимум совершить семь шагов по маршруту:

start :: River Character start = ([Goat, Wolf, Cabbage], []) solutions = run (traverse step $ take 7 route) start 

И у нас есть два решения:

Полные исходники можно посмотреть здесь.

BrainBashers - волк, коза и капуста

Волк, коза и капуста

Пазлы для перехода через реки:


Инструкции

Фермер только что посетил местный рынок и купил волка, козу и капусту. Однако самый короткий путь домой - это переход через реку, и у фермера есть очень маленькая лодка, на которой может перевозиться только фермер и одна из покупок.

  • Только фермер может грести на лодке.
  • Если фермер оставит волка наедине с козой, вы можете себе представить, что может случиться.
  • Точно так же и коза хотела бы остаться наедине с капустой!
  • Нажмите здесь, чтобы увидеть ответ.

Можете ли вы помочь фермеру перебросить все на другую сторону реки?

  • Нажмите на волка / козу / капусту, чтобы перейти в / из лодки.
  • Щелкните стрелку, чтобы переместить лодку на другую сторону.
  • Отметьте «Пустая лодка при посадке», чтобы опорожнять лодку всякий раз, когда она стыкуется с другой стороны.

Этой головоломке более 1000 лет.

.Головоломка для перехода через реку

- Начало работы с основными транспортными проблемами, такими как Волк, Капуста, Коза, на C # или F #

Переполнение стека
  1. Около
  2. Товары
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд
.

Решение проблемы с волком, козой и капустой (форум Programming Diversions на Coderanch)

Нет, Джим Инст, вам не нужно думать о том, что происходит, когда фермер переходит реку, или о том, что делает лодка; вы просто предполагаете, что лодка находится там, где находится фермер. На самом деле я получил 16 возможных состояний, пронумерованных от 0 до f, где самый старший бит (3-й бит = 8) представляет фермера, 2-й бит = 4 - это волк, 1-й бит = 2 - это гусь, а 0- -й бит (младший бит = 1) представляет собой зерно капусты или что-то еще.

Итак, f означает, что все четверо находятся на этой стороне реки, 0 означает, что все четыре пересеклись, 1 означает, что капуста одна на этой стороне реки, 2 означает, что гусь один на этой стороне реки и т. Д. можно было бы подумать, что это означает, что дополнение числа находится на другой стороне реки, поэтому 0 означает f на другой стороне. Тогда у вас будет инвариант thisSide + thatSide == 0xf.
По эту сторону реки есть три запрещенных штата: 3, 6, 7, где гусь ест капусту, лес - козу, или и то, и другое.Это означает, что на другой стороне есть три запрещенных состояния, 8 9 и c. Мы знаем, что 8 + 7 или 9 + 6 или c + 3 в сумме дают 0xf. Остается в общей сложности 10 разрешенных состояний. За каждым разрешенным состоянием могут следовать 1, 2 или 3 разрешенных состояния-преемника.

Правила таковы, что фермер должен переходить дорогу каждый раз в одиночку или в сопровождении одного предмета. Это эквивалентно побитовой операции XOR 8 9 a или c; если у вас есть переменные thisSide и thatSide, то одна и та же операция должна применяться к обеим сторонам, чтобы сохранить инвариант класса.Также вы удаляете из результатов любое из шести запрещенных состояний.
Вы можете вернуть состояния обратно на английский с помощью побитового И: private final int FARMER = 8, WOLF = 4, GOOSE = 2, CABBAGE = 1; . . . . если (состояние и ФЕРМЕР> 0) outputString + = "фермер"; если (состояние & WOLF> 0) outputString + = "волк"; и т. д.

Затем вы получаете дерево, начинающееся с f, и затем вы проводите поиск дерева, пока не найдете в нем 0. Для достижения 0 требуется ровно 7 операций, первая из которых - состояние ^ = FARMER + GOOSE;

********************************************** ***************************
В LISP он читает что-то вроде этого, предполагая, что ваш алгоритм поиска по ширине и оператор -> уже поставлено: (defparameter * farmer * '((fwgcR wcRfg) (fwgRc wRfgc gRfwc) (fwcRg wcRfg wRfgc cRfwg) (fgcRw gRfwc cRfwg) (fgRwc gRfwc Rfwgc) (wcRfg fwcRg fwgcR) (gRfwc fgRwc fwgRc fwcRg) (cRfwg fwcRg fgcRw) (wRfgc fwgRc fwcRg) (Rfwgc fgRwc))) (defun farmer-lmg (состояние) (-> * фермер * штат)) (width-search 'fwgcR' Rfwgc # 'farmer-lmg) Аббревиатуры (очевидно) означают фермерскую волчью гусиную капусту и РЕКУ; те, кто до R, находятся на этой стороне, а те, что после R, находятся на этой стороне.Бит defun создает генератор легального хода (LMG).
*********************************************** **************************
С предоставленными нами утилитами LISP он работает, но, кажется, всегда дает мне один и тот же ответ . Я думаю, есть 4 возможных решения, но первая операция всегда заключается в том, что фермер переносит гуся, а четвертая операция всегда возвращает гуся.

[править] Незначительные орфографические исправления и значение lmg [/ править]
[30 ноября 2007 г .: Сообщение отредактировал: Кэмпбелл Ричи]

.Оптимизация

- Транспортировка лисы, козы и капусты - Stack Overflow

Переполнение стека
  1. Около
  2. Товары
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
  3. Вакансии Программирование и связанные с ним технические возможности карьерного роста
  4. Талант Нанимайте технических специалистов и создавайте свой бренд работодателя
  5. Реклама Обратитесь к разработчикам и технологам со всего мира
  6. О компании
.

искусственный интеллект - PDDL - Коза, волк и капуста

Переполнение стека
  1. Около
  2. Товары
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
  3. Вакансии Программирование и связанные с ним технические возможности карьерного роста
  4. Талант Нанимайте технических специалистов и создавайте свой бренд работодателя
  5. Реклама Обратитесь к разработчикам и технологам со всего мира
  6. О компании
.

Смотрите также


Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.



Понравился рецепт? Подпишись на RSS! Подписаться!