Size: a a a

2021 March 25

🐈П

🐈Борис Гринч Похитит... in 2ch /pr/ ❄️
Вообще абстоагируйся от условий есть задача просто поделить целое число по долям чтобы сумма потом совпала с этим числом
источник

🐈П

🐈Борис Гринч Похитит... in 2ch /pr/ ❄️
//we perform rounding overall and per item, then fix accumulated error by adding it to the biggest element by each channel-model specifically
  var promoQtysBeforeRounding = conditionList
  .GroupBy(cl => new { cl.ChannelCode, cl.ModelCode })
  .Select(cl => new
  {
   cl.Key.ChannelCode,
   cl.Key.ModelCode,
   custModelPromoSum = Math.Round(cl.Sum(a => a.PromotionQty), 0, MidpointRounding.AwayFromZero)
  }).ToList();

  foreach (var calcItem in conditionList)
  {
   calcItem.PromotionQty = Math.Round(calcItem.PromotionQty, 0, MidpointRounding.AwayFromZero);
  }

  var promoQtysAfterRounding = conditionList
   .GroupBy(clg => new
   {
    clg.ChannelCode,
    clg.ModelCode
   })
   .Select(clg => new
   {
    clg.Key.ChannelCode,
    clg.Key.ModelCode,
    custModelPromoSum = Math.Round(clg.Sum(a => a.PromotionQty), 0, MidpointRounding.AwayFromZero)
   });

  foreach (var listGroup in promoQtysAfterRounding)
  {
   var sumPromoQtyByDistAndModel = promoQtysBeforeRounding.Single(a => a.ModelCode == listGroup.ModelCode && a.ChannelCode == listGroup.ChannelCode);
   if (listGroup.custModelPromoSum != sumPromoQtyByDistAndModel.custModelPromoSum)
   {
    var item = conditionList.Where(a => a.ModelCode == listGroup.ModelCode && a.ChannelCode == listGroup.ChannelCode).Aggregate((i, j) => i.PromotionQty > j.PromotionQty ? i : j);
    var difference = sumPromoQtyByDistAndModel.custModelPromoSum - listGroup.custModelPromoSum;
    item.PromotionQty += difference;
   }
  }
источник

🐈П

🐈Борис Гринч Похитит... in 2ch /pr/ ❄️
сисярп линк с группировкой по двум параметрам из массива, которая ему в принципе не нужна
источник

Мв

Мурмур вторая... in 2ch /pr/ ❄️
Так бля
источник

Мв

Мурмур вторая... in 2ch /pr/ ❄️
Неа
источник

Мв

Мурмур вторая... in 2ch /pr/ ❄️
У меня там max_size
источник

Мв

Мурмур вторая... in 2ch /pr/ ❄️
Твои вариант это просто поделить и умножить, так?
источник

Мв

Мурмур вторая... in 2ch /pr/ ❄️
Сейчас попробую куда детальнее описать с примером
источник

🐈П

🐈Борис Гринч Похитит... in 2ch /pr/ ❄️
Мурмур вторая
У меня там max_size
Если у тебя макс сайз больше чем рассчитанная доля - берёшь долю
источник

🐈П

🐈Борис Гринч Похитит... in 2ch /pr/ ❄️
Иначе берёшь макс сайз
источник

Мв

Мурмур вторая... in 2ch /pr/ ❄️
Само собой
источник

🐈П

🐈Борис Гринч Похитит... in 2ch /pr/ ❄️
Один if else сук
источник

🐈П

🐈Борис Гринч Похитит... in 2ch /pr/ ❄️
не вкуриваем, ясно, попробую объяснить на примере еще раз
источник

Мв

Мурмур вторая... in 2ch /pr/ ❄️
Ну хорошо, получается я все эту суммирую и уменя получится число меньше, чем 17
источник

Мв

Мурмур вторая... in 2ch /pr/ ❄️
По факту мне надо увеличить то, число, на которое умножаются без max_size
источник

Мв

Мурмур вторая... in 2ch /pr/ ❄️
назоваем его elvalue
источник

Мв

Мурмур вторая... in 2ch /pr/ ❄️
Я могу его? Пересчитать
источник

Мв

Мурмур вторая... in 2ch /pr/ ❄️
(17 - max_size )/ (n-1)
источник

Мв

Мурмур вторая... in 2ch /pr/ ❄️
Вот теперь тут происходит все куда круче, у нас например 2 без макса и 2 с максом
источник

Мв

Мурмур вторая... in 2ch /pr/ ❄️
Тут придется получается уже пересчитывать прошлый размер
источник