PageUp
@PageUp
Default

Как рассчитать нужное число по нескольким условиям?

Здравствуйте. Это на мой взгляд очень сложная задача. Что бы минимально нагрузить процессом выполнения сервер, но выполнить условие. У меня все сводится к повторяемым циклам, до нужного результата, но не думаю, что это хорошее решение. Может есть какие то более простые способы. Как говорится, все гениальное просто, но до этого еще додуматься нужно.

В общем. Задача такая. Есть Число. Переменная $Maxkolvo. Она меняется по разному и может быть 100 и выше, ну к примеру возьмем $Maxkolvo=15.

Есть неограниченное количество других переменных. Чаще всего от двух до четырех.

$file_in = file($file);
$rbase=explode(",", $p_data[9]);
for ($ir = 0; $ir < count($rbase); $ir++){
$rs=explode(":", $rbase[$ir]);
$rs[0]=trim($rs[0]);
for ($id = 0; $id < count($file_in); $id++){
$in_data = explode("|", $file_in[$id]);
if($in_data[0]==$rs[0]){ // находим нужное (искомый ид)

//Тут функцией удаляем из $file_in ($in_data[6]-$rs[1];)

}}
}


Все бы ничего. Цикл пройдется сколько нужно раз, и удалит столько, сколько требуется. Отнимет.
Но этот цикл это единичное действие, а проверок таких должно быть на $Maxkolvo. В данном случае 15. До тех пор, пока одна из ячеек ($in_data[6]) не приобретет значение 0. Тогда на этом все заканчивается.

$rs[1] может быть разным числом. Где то он 1, где то 4. Если $rs[1]>$in_data[6] то означает, что на этом финал.

Эх, это даже трудно объяснить, не говоря о том, что бы выразить в виде кода.

К примеру так. Есть Корзина в которой различные овощи и фрукты. Их можно взять от туда, смешать и получить салат. На салат требуется определенное количество разных овощей. К примеру Огурец:1, помидор: 2, лук: 1, укроп:4.

В корзине имеется Огурец: 15, помидор 30, лук: 40, укроп: 8.

За раз я могу сделать не более 15 салатов: $Maxkolvo

Для этого идет цикл с проверкой нужных овощей в корзине. $in_data[0]- Название овоща в корзине. $rs[0] - Название требуемого овоща.
В цикле находим нужный овощ, который есть в корзине.

if($in_data[0]==$rs[0]){

Количество овоща в корзине это $in_data[6], количество требуемого на салат это $rs[1].

Отнимем в корзине нужное кол-во.

$in_data[6]-$rs[1];

Я должен израсходовать ровно столько сколько требуется, если овощей меньше чем нужно, то столько, сколько смогу. Лишнее остается. Видно что укропа требуется 4. А есть 8. То есть в итоге я смогу сделать 2 салата лишь.

Если бы всего было в избытке в корзине, то максимально мог бы сделать 15 ($Maxkolvo). Очень надеюсь что понятно объяснил эту нелегкую задачу. Я сегодня уже весь день голову ломаю.
  • Вопрос задан
  • 222 просмотра
Решения вопроса 1
syamskoy
@syamskoy
Все просто. Делим и получаем минимальное возможное число продуктов на салат.

<?php

const TOMATO = 'tomato';
const CARROT = 'carrot';
const APPLE = 'apple';
const POTATO = 'potato';

$basket = [
    TOMATO => 15,
    POTATO => 10,
    CARROT => 5,
    APPLE => 16,
];

$salad = [
    TOMATO => 3,
    POTATO => 2,
    CARROT => 1,
];

function calculate(array $basket, array $salad): int
{
    $total = max($basket);

    foreach ($salad AS $key => $value) {
        if ($value === 0) {
            continue;
        }
        $total = min(floor(($basket[$key] ?? 0) / $value), $total);
    }

    return $total;
}

echo calculate($basket, $salad) . PHP_EOL;

Total: 5
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Raff85
Тебе нужно показать сколько овощей не хватает для $Maxkolvo салатов или показать сколько можно сделать из текущих остатков овощей?
Ответ написан
Ваш ответ на вопрос

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

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