Vi Veri Veniversum Vivus Vici
Пусть требуется распределить некую сумму по частям в массиве, притом каждая часть в массиве должна достаточно сильно отличаться от другой.
В примере части отличаются в 1,5 раза от предыдущей, помноженного на индекс элемента (без такого умножения разница межу соседями будет значительно меньшей)
Первая функция считает вес первого элемента, а вторая - проверяет корректность подсчетов

  1. function t(arr) {
  2. var d = 1,
  3. x = 1,
  4. i = 1,
  5. len = arr.length;
  6. for (; i < len; i++) {
  7. x *= 1.5;
  8. d += x * i;
  9. }
  10. d = len / d;
  11. return d;
  12. }
  13.  
  14. function test(d, arr, s) {
  15. var i = 0,
  16. x = 0,
  17. k,
  18. len = arr.length,
  19. w = s / arr.length,
  20. wp = 0;
  21. console.log('w = ' + w);
  22. for (; i < len; i++) {
  23. if (!i) {
  24. k = d;
  25. }
  26. else {
  27. k = i * Math.pow(1.5, i) * d;
  28. }
  29. console.log('k = ' + k);
  30. console.log('chunk for ' + i + ' is ' + k * w);
  31. wp += k * w;
  32. x += k;
  33. console.log('x = ' + x);
  34. }
  35. console.log('wp = ' + wp);
  36. return x;
  37. }
  38.  
  39. var sum = 6,
  40. a = [0, 1, 2],
  41. delta = t(a);
  42. console.log(delta);
  43. console.log(test(delta, a, sum));


@темы: JavaScript