@Koljasiko

Как решить задачу о быках, коровах и телятах на Haskell?

Бык стоит 10 рублей, корова - 5 рублей, телёнок - 0.5 рублей. Необходимо на 100 рублей купить 100 голов скота. Мне стало интересно, как такую задачу решить в Haskell? В императивных языках задача решается через вложенные циклы, но в Haskell их нет. Сколько ни пытался, решить задачу не смог.
  • Вопрос задан
  • 251 просмотр
Пригласить эксперта
Ответы на вопрос 3
@AlexSku
не буду отвечать из-за модератора
Один из вариантов (простенький, но не оптимальный) такой:
Prelude> [(bull, cow, calf) | bull<-[1..10], cow<-[1..20],calf<-[1..200], bull + cow + calf == 100, 10*bull + 5*cow +calf/2 == 100]
[(1.0,9.0,90.0)]
Ответ написан
Комментировать
mayton2019
@mayton2019
Bigdata Engineer
Эта задача похожа на поиск в глубину DFS и на задачу об укладке рюказака.

Как решить ее на Хаскеле - я пока не знаю. Надо думать. Особенно в части поиска
оптимальности и вообще доказательства того что решение существует.

Доказательство - важно если вы представите что цены на коров - иррациональные числа на пример.
Ответ написан
Комментировать
wiz
@wiz
Ортодоксальный хаскелит
Это жадный алгоритм. Сортировка + свёртка решат для любого количества любых цен.

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

Войдите, чтобы написать ответ

Похожие вопросы