Форум программистов, компьютерный форум, киберфорум
Haskell
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/18: Рейтинг темы: голосов - 18, средняя оценка - 5.00
1 / 1 / 0
Регистрация: 24.11.2016
Сообщений: 37

Составляем суточный рацион. Как правильно питаться, когда мало денег?

05.12.2016, 17:22. Показов 3861. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер!

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

Неужели можно прожить только на молоке?

Условия. Для поддержания нормальной жизнедеятельности человеку ежедневно необходимо потреблять не менее 118 г белков, 56 г жиров, 500 г углеводов, 8 г минеральных солей. Количество питательных веществ, содержащихся в 1 кг каждого вида потребляемых продуктов, а также цена 1 кг каждого из этих продуктов – таблица.
Составить дневной рацион, содержащий не менее минимальной суточной нормы потребности человека в необходимых питательных веществах при минимальной общей стоимости потребляемых продуктов.
________________________________________ ____________________________________
Ввел обозначения:
m1 — мясо
m2 — рыба
m3 — молоко
m4 — масло
m5 — сыр
m6 — крупа
m7 — картофель
________________________________________ ________________________________________

Код
Haskell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
m1 = minimum [118 `div` 180, 56 `div` 20, 500 `div` 1, 8 `div` 9]
m2 = minimum [118 `div` 190, 56 `div` 3, 500 `div` 1, 8 `div` 10] 
m3 = minimum [118 `div` 30, 56 `div` 40, 500 `div` 50, 8 `div` 7]
m4 = minimum [118 `div` 10, 56 `div` 865, 500 `div` 6, 8 `div` 12]
m5 = minimum [118 `div` 260, 56 `div` 310, 500 `div` 20, 8 `div` 60]
m6 = minimum [118 `div` 130, 56 `div` 30, 500 `div` 650, 8 `div` 10]
m7 = minimum [118 `div` 21, 56 `div` 2, 500 `div` 200, 8 `div` 20]
 
task = filter (\ x -> fst x == fmax) flst 
     where fmax = maximum $ map fst flst
           flst = zip (map fs lst) lst
           lst  = [(n1,n2,n3,n4,n5,n6,n7)| n1 <- [0,1..m1], 
                                  n2 <- [0,1..m2], 
                                  n3 <- [0,1..m3],
                                  n4 <- [0,1..m4],
                                  n5 <- [0,1..m5],
                                  n6 <- [0,1..m6],
                                  n7 <- [0,1..m7],
                                  n1*180+n2*190+n3*30+n4*10+n5*260+n6*130+n7*21 <= 118,
                                  n1*20+n2*3+n3*40+n4*865+n5*310+n6*30+n7*2 <= 56,
                                  n1*1+n2*1+n3*50+n4*6+n5*20+n6*650+n7*200 <= 500,
                                  n1*9+n2*10+n3*7+n4*12+n5*60+n6*10+n7*20 <= 8]
                                  
           fs (x,y,z,k,p,q,s) = 180*x+100*y+28*z+340*k+290*p+50*q+10*s
Ответ
Haskell
1
2
3
4
5
6
7
8
9
10
Prelude> :load "MyMinimumProducts.hs"
[1 of 1] Compiling Main             ( MyMinimumProducts.hs, interpreted )
 
MyMinimumProducts.hs:16:1: warning: [-Wtabs]
    Tab character found here, and in 23 further locations.
    Please use spaces instead.
Ok, modules loaded: Main.
*Main> task
[(28,(0,0,1,0,0,0,0))]
*Main>
Миниатюры
Составляем суточный рацион. Как правильно питаться, когда мало денег?  
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.12.2016, 17:22
Ответы с готовыми решениями:

Суточный рацион коровы
Помогите пожалуйста. Суточный рацион коровы составляет u кг сена, v кг силоса и w кг комбикорма. В хозяйстве, содержащем стадо из k голов,...

почему так мало денег?
Я с адсенс уже 3 месяца. Все объявления гугла выводятся на русском, значит тематика сайта подходящая. Посещаемость сайта - в среднем 50...

А Яндексу все еще мало денег
Тут до меня дошли слухи, что если заказываешь в Яндексе поисковую рекламу (на страницах поиска перед первым местом или между пятым и...

19
4949 / 2289 / 287
Регистрация: 01.03.2013
Сообщений: 5,991
Записей в блоге: 32
05.12.2016, 20:27
По хорошему это Симплекс-метод. Но если накидать тупой брутфорс с целочисленными килограммами, то получится примерно так (если не ошибся при задании таблицы):
Haskell
1
2
3
4
5
6
7
8
9
10
11
ps = [[1.8,180,20,0,9], [1,190,3,0,10], [0.28,30,40,50,7], [3.4,10,865,6,12],
      [2.9,260,310,20,60], [0.5,130,30,650,20], [0.1,21,2,200,10]]
me = [118,56,500,8]
 
f ksi = (foldr1 (zipWith (+)) . zipWith (\l k -> map (*k) l) ps $ ks, ksi)
    where ks = map fromIntegral ksi
 
vs 0 = [[]]
vs n = [0..5] >>= \x -> map (x:) $ vs (n-1)
 
main = print $ head . sort . filter (all (<=0) . zipWith (-) me . tail . fst) . map f . vs $ 7
([0.78,160.0,70.0,700.0,27.0],[0,0,1,0,0,1,0])
Итого, молоко это конечно хорошо, но подойдет 1 кг молока и 1 кг крупы, всего за 78 копеек в день
3
1 / 1 / 0
Регистрация: 24.11.2016
Сообщений: 37
05.12.2016, 23:33  [ТС]
Цитата Сообщение от _Ivana Посмотреть сообщение
всего за 78 копеек в день
_Ivana, хороший код — немногословный. Спасибо. Не знаю как им пользоваться, подскажите пожалуйста.

Сначала ввожу только его первую часть, иначе будет тупик (много раз пробовал):
Haskell
1
2
3
4
5
6
7
8
9
ps = [[1.8,180,20,0,9], [1,190,3,0,10], [0.28,30,40,50,7], [3.4,10,865,6,12],
      [2.9,260,310,20,60], [0.5,130,30,650,20], [0.1,21,2,200,10]]
me = [118,56,500,8]
 
f ksi = (foldr1 (zipWith (+)) . zipWith (\l k -> map (*k) l) ps $ ks, ksi)
    where ks = map fromIntegral ksi
 
vs 0 = [[]]
vs n = [0..5] >>= \x -> map (x:) $ vs (n-1)
Ответная реакция
Haskell
1
2
3
4
Prelude> :load "MyBruteForce.hs"
[1 of 1] Compiling Main             ( MyBruteForce.hs, interpreted )
Ok, modules loaded: Main.
*Main>
Что именно надо писать для *Main>, чтобы получить вразумительный ответ?
1
4949 / 2289 / 287
Регистрация: 01.03.2013
Сообщений: 5,991
Записей в блоге: 32
05.12.2016, 23:37
Цитата Сообщение от diligent5 Посмотреть сообщение
Не знаю как им пользоваться, подскажите пожалуйста.
Все просто - покупаете каждый день за 78 копеек теперь жмете кнопку Ран с белой стрелкой на красном фоне - и оно ранится. Только вместе с мэйном кот писать надо.
0
1 / 1 / 0
Регистрация: 24.11.2016
Сообщений: 37
06.12.2016, 00:13  [ТС]
Цитата Сообщение от _Ivana Посмотреть сообщение
и оно ранится. Только вместе с мэйном кот писать надо
Какая-то бессмыслица.
Haskell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Prelude> :load "MyBruteForce.hs"
[1 of 1] Compiling Main             ( MyBruteForce.hs, interpreted )
Ok, modules loaded: Main.
*Main> main = print $ head . sort . filter (all (<=0) . zipWith (-) me . tail . fst) . map f . vs $ 7
 
<interactive>:9:23: error:
    • Variable not in scope: sort :: [([Integer], [Integer])] -> [()]
    • Perhaps you meant ‘sqrt(imported from Prelude)
 
<interactive>:9:81: error:
    • Couldn't match typeDouble’ with ‘Integer’
      Expected type: Integer -> [([Integer], [Integer])]
        Actual type: Integer -> [([Double], [Integer])]
    • In the second argument of(.)’, namely ‘map f . vs’
      In the second argument of(.)’, namely
        ‘filter (all (<= 0) . zipWith (-) me . tail . fst) . map f . vs’
      In the second argument of(.)’, namely
        ‘sort
         . filter (all (<= 0) . zipWith (-) me . tail . fst) . map f . vs’
*Main>
________________________________________ _________
Кто сможет объясните пожалуйста.
Мне нравится Haskell своей краткостью и ясностью.

Саму задачу можно легко решить за 3-5 минут на Excel, вложение ниже.
Миниатюры
Составляем суточный рацион. Как правильно питаться, когда мало денег?   Составляем суточный рацион. Как правильно питаться, когда мало денег?  
Вложения
Тип файла: xlsx Ограниченный набор продуктов.xlsx (11.1 Кб, 53 просмотров)
0
4949 / 2289 / 287
Регистрация: 01.03.2013
Сообщений: 5,991
Записей в блоге: 32
06.12.2016, 00:53
Цитата Сообщение от diligent5 Посмотреть сообщение
Какая-то бессмыслица.
Воистину Особенно если английский не знаешь или читать лень. diligent5, а вы случайно не клон родственник некоего balky02? Очень похоже по симптомам.

Добавлено через 16 минут
Цитата Сообщение от diligent5 Посмотреть сообщение
Саму задачу можно легко решить за 3-5 минут на Excel, вложение ниже.
При 800г молока и 800г крупы мы имеем следующий набор питательных веществ: [128,56,560,21.6], что укладывается в требования, а стоит 0.624 копейки вместо Экселевских 0.683. Эксель мало того, что заставляет вас есть мясо и масло не взирая на советы вегетарианцев, так еще и бесстыдно обирает вас! Выкиньте его
0
1 / 1 / 0
Регистрация: 24.11.2016
Сообщений: 37
06.12.2016, 01:08  [ТС]
Цитата Сообщение от _Ivana Посмотреть сообщение
вы случайно не клон родственник некоего balky02?
Это моя бабушка.

Секрет Полишинеля, добавляем строку в исходный код: import Data.List
Окончательно:
Haskell
1
2
3
4
5
6
7
8
9
10
11
12
import Data.List
ps = [[1.8,180,20,0,9], [1,190,3,0,10], [0.28,30,40,50,7], [3.4,10,865,6,12],
      [2.9,260,310,20,60], [0.5,130,30,650,20], [0.1,21,2,200,10]]
me = [118,56,500,8]
 
f ksi = (foldr1 (zipWith (+)) . zipWith (\l k -> map (*k) l) ps $ ks, ksi)
    where ks = map fromIntegral ksi
 
vs 0 = [[]]
vs n = [0..5] >>= \x -> map (x:) $ vs (n-1)
 
main = print $ head . sort . filter (all (<=0) . zipWith (-) me . tail . fst) . map f . vs $ 7
После появления слов: "Ok, modules loaded: Main." Надо нажать клавишу "Выполнить" (Белый треугольник). Всё! Приехали!!
Haskell
1
2
3
4
5
6
Prelude> :load "MyBruteForce.hs"
[1 of 1] Compiling Main             ( MyBruteForce.hs, interpreted )
Ok, modules loaded: Main.
*Main> :main
([0.78,160.0,70.0,700.0,27.0],[0,0,1,0,0,1,0])
*Main>
Миниатюры
Составляем суточный рацион. Как правильно питаться, когда мало денег?  
0
06.12.2016, 01:11

Не по теме:

Цитата Сообщение от diligent5 Посмотреть сообщение
Это моя бабушка.
Судя по всему, внучек от яблони недалеко упал. Засим удачи в блужданиях среди симплексов, поедании мяса и доверии ошибочным решениям на Экселе.

0
06.12.2016, 01:12

Не по теме:

С просоня не тому плюс привинтил. Ну ладно, считаем за аванс. :sleep: :pardon:

0
06.12.2016, 01:16

Не по теме:

KolodeznyDiver, если не тому - это про меня, то можете на выбор или поставить минус 1 в репу, или я вам верну плюс :) С внучком договаривайтесь сами :)

0
06.12.2016, 01:23

Не по теме:

_Ivana, не выдумывайте. (Я же не написал "не той" :D )

0
1 / 1 / 0
Регистрация: 24.11.2016
Сообщений: 37
06.12.2016, 01:28  [ТС]
Цитата Сообщение от _Ivana Посмотреть сообщение
При 800г молока и 800г крупы мы имеем следующий набор питательных веществ: [128,56,560,21.6], что укладывается в требования, а стоит 0.624 копейки вместо Экселевских 0.683. Эксель мало того, что заставляет вас есть мясо и масло не взирая на советы вегетарианцев, так еще и бесстыдно обирает вас! Выкиньте его
_Ivana, ошибаетесь!

Задача отсюда:
Решение задач линейного программирования в Microsoft Excel 2010: методические указания к выполнению лабораторных работ по информатике для обучающихся по всем программам бакалавриата и специалитета дневной формы обучения / сост. Н. Д. Берман, Н. И. Шадрина. – Хабаровск : Изд-во Тихоокеан. гос. ун-та, 2015. – 27 с.
Возникли сомнения в разумности ответа по учебному пособию
Ответ. Минимальная общая стоимость 0,565947 р. при количестве продуктов: мясо – 0; рыба – 0; молоко – 0; масло – 0,03335; сыр – 0; крупа – 0,90513; картофель – 0.
Истолкование ответа:
0,03335 * 3,4 + 0,90513 * 0,50 = 0,11339 + 0,452565 = 0,565955 — т. е. примерно на сутки надо сливочного масла — 33,3 грамма, крупа гречневая (рисовая) — 905,1 грамма.

Поэтому решил всё перепроверить различными способами. Знаю, Эксель часто грешит примитивными решениями, но не глупостями. Старый конь — борозды не портит.
0
4949 / 2289 / 287
Регистрация: 01.03.2013
Сообщений: 5,991
Записей в блоге: 32
06.12.2016, 01:38
diligent5, мой последний ответ внучку старого тролля: я проверил электроникой и свой результат, и результат авторов методички - мин нет, полет нормальный. Причем, любой школьник средних классов способен проверить это самостоятельно.
Эксель проводит скрытую рекламу мяса за ваш счет. Вот так Майкрософт зомбирует людей.
1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38173 / 21108 / 4307
Регистрация: 12.02.2012
Сообщений: 34,710
Записей в блоге: 14
06.12.2016, 06:43
Цитата Сообщение от _Ivana Посмотреть сообщение
Вот так Майкрософт зомбирует людей.
- я не уверен, что виноват Майкрософт. Надо еще посмотреть, как задавались данные.
0
1 / 1 / 0
Регистрация: 24.11.2016
Сообщений: 37
06.12.2016, 11:08  [ТС]
Цитата Сообщение от Catstail Посмотреть сообщение
Надо еще посмотреть, как задавались данные
Catstail, пусть все посмотрят вложение, выше: #5 (permalink). Картинка ниже.

Вот и думаю: зачем надо было несколько лет изучать Haskell, если никто на форуме не может предложить толкового решения? Напрасно потраченное время жизни.
Миниатюры
Составляем суточный рацион. Как правильно питаться, когда мало денег?  
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38173 / 21108 / 4307
Регистрация: 12.02.2012
Сообщений: 34,710
Записей в блоге: 14
06.12.2016, 11:56
diligent5, тебе Haskell точно не нужен. Расслабься.
0
06.12.2016, 14:22

Не по теме:

Цитата Сообщение от diligent5 Посмотреть сообщение
Вот и думаю: зачем надо было несколько лет изучать Haskell, если никто на форуме не может предложить толкового решения? Напрасно потраченное время жизни.
Не напрасно. ФП формирует ещё один способ мышления. (Как то так). Это бесценно. У меня потом подход в программировании в совсем другой области изменился (в лучшую сторону).
Задачку не в целочисленных килограммах мне сейчас нет времени решать, увы. Так что прошу пардону. В общем, то это чистая математика, какая ни будь "линейная минимизация с граничными условиями". Ну, забыл, да. _Ivana, бы на раз решил(а), но он(а) на Вашу бабушку дуется.

Цитата Сообщение от Catstail Посмотреть сообщение
diligent5, тебе Haskell точно не нужен. Расслабься.
Haskell нужен всем. Даже если я из за него весной основную работу завалил и был бит рублём, то, всё равно не жалею.
(Не, работу завалил не из за нового способа мышления, а о того что я слишком азартный, через чур много времени Haskell уделял, не умею останавливаться.)

0
1 / 1 / 0
Регистрация: 24.11.2016
Сообщений: 37
06.12.2016, 14:50  [ТС]
Ради интереса сделал подсчёты на Эксель, ниже.
Миниатюры
Составляем суточный рацион. Как правильно питаться, когда мало денег?  
Вложения
Тип файла: xlsx Перепроверка по набору продуктов.xlsx (12.8 Кб, 27 просмотров)
0
1 / 1 / 0
Регистрация: 24.11.2016
Сообщений: 37
06.12.2016, 14:58  [ТС]
Цитата Сообщение от KolodeznyDiver Посмотреть сообщение
Haskell нужен всем. Даже если я из за него весной основную работу завалил и был бит рублём, то, всё равно не жалею.
KolodeznyDiver, пусть Казанский изучает Haskell. Всем будет польза.
Он знания рассыпает налево и направо, не скупясь.

Чего ему жалеть, если знания достались талантом, а не горбом.
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38173 / 21108 / 4307
Регистрация: 12.02.2012
Сообщений: 34,710
Записей в блоге: 14
06.12.2016, 15:31
diligent5, Постоянные вопросы типа "как запустить?" или "куда нажать?" свидетельствуют либо об отсутствии элементарных навыков либо о нежелании думать (подозреваю второе). А жалобы при первой неудаче на то, что никто не в состоянии помочь, свидетельствуют об отсутствии характера и элементарного самолюбия. Никто не будет отвечать на твои бесконечные однотипные и достаточно тривиальные вопросы.

Если ты хочешь изучить Haskell - читай книги. Причем - последовательно. Во всех учебниках обязательно пишут в самом начале - куда нажимать и что запускать.

Если же тебе нужно решать задачи, подобные приведенной выше, то тебе не нужен Haskell - используй Excel или какой-либо online-сервис. Если хочешь понять, как решаются такие задачи, то (_Ivana тебе указал) начинать нужно с симплекс-метода. Прямым перебором решаются только простейшие задачи.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.12.2016, 15:31
Помогаю со студенческими работами здесь

Как перезагружать apache, когда остаётся мало свободной памяти?
Привет, ребята! Такая ситуация. Есть на VPS несколько сайтов и одно прожорливое по памяти самописное приложение. Периодически, когда...

Куда пойти с девушкой, если нет денег или очень мало?
Как продержаться целый месяц без значительной финансовой поддержки? 31 малобюджетная идея и места удачного свидания с пассией. Без...

Я понял, мало кто знает, как ПРАВИЛЬНО интегрировать Internet Explorer в свою :-) окно...
Али все же кто-то этим занимался? (Да не сочтет модератор это дублированием :-)) Снорк.

Посоветуйте вентилятор. Ситуация, когда мало место в блоке.
Добрый день, ув. Форумчане. Решил себе полностью выполнить апгрейд компьютера. Оставил только бп, 2 винта, дисковод и вентилятор на...

Замедление работы HDD когда на диске С мало места
У меня жесткий диск на 250 гб, диск С-37,5 гб и D-195 гб. Проблема состоит в том когда на диске Ц остается меньше 15-10 гб свободного места...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru