Gistrec

VK Coins максимальная прибыль

Apr 6th, 2019
304
0
Never
1
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /**
  2.  * Для VK Coins
  3.  * Расчет оптимальных покупок для определенной суммы
  4.  */
  5.  
  6. const PRICE   = 0; // Индекс в массиве, где хранится цена
  7. const PROFIT  = 1; // Индекс в массиве, где хранится прибыль
  8. const RATIO   = 2; // Индекс в массиве, где хранится отношение прибыли к цене
  9. const COUNT   = 3; // Индекс в массиве, где хранится количество покупок
  10. const NAME    = 4; // Индекс в массиве, где хранится название
  11.  
  12. let price   = 0; // Сколько денег было потрачено
  13.  
  14. let balance = 6000000.000; // Максимальное количество денег для траты
  15.  
  16.  
  17. // Для каждого ускорения храним цену, доход, отношение прибыли к цене и сколько позиций нужно купить
  18. let data = [
  19.     [   0.051, 0.001, null, 0, 'Курсор'             ],
  20.     [   0.100, 0.003, null, 0, 'Видеокарта'         ],
  21.     [   1.000, 0.010, null, 0, 'Стойка видеокарт'   ],
  22.     [  10.000, 0.030, null, 0, 'Суперкомпьютер'     ],
  23.     [  50.000, 0.100, null, 0, 'Сервер ВКонтакте'   ],
  24.     [ 200.000, 0.500, null, 0, 'Квантовый компьютер'],
  25.     [5000.000, 1.000, null, 0, 'Датацентр'          ]
  26. ]
  27.  
  28. /**
  29.  * Функция обновляет отношение прибыли к цене
  30.  * @param index индекс обновляемого элемента
  31.  *              если null, то обновляем все
  32.  */
  33. const updateRatio = function(index = null) {
  34.     if (index != null) {
  35.         data[index][RATIO] = data[index][PROFIT] / data[index][PRICE];
  36.     }else {
  37.         // Обновляем отношение прибыли к цене у каждого элемента
  38.         for (index = 0; index < data.length; index++) {
  39.             updateRatio(index);
  40.         }
  41.     }
  42. }
  43.  
  44. /**
  45.  * Получаем индекс лучшего товара по отношении прибыли к цене
  46.  */
  47. const getBestProduct = function() {
  48.     let best_index = 0;               // Индекс лучшего товара
  49.     let best_profit = data[0][RATIO]; // Отношение прибыли к цене у лучшего товара
  50.  
  51.     data.forEach(function(product, index) {
  52.         if (product[RATIO] > best_profit) {
  53.             best_index  = index;
  54.             best_profit = product[PROFIT];
  55.         }
  56.     })
  57.  
  58.     return best_index;
  59. }
  60.  
  61. /*
  62.  * Покупаем продукт
  63.  * @param index - индекс продукта
  64.  */
  65. const buyProduct = function(index) {
  66.     price += data[index][PRICE]; // Увеличиваем сумму трат
  67.  
  68.     data[index][PRICE] *= 1.3;   // Увеличиваем цену в 1.3 раза
  69.     data[index][COUNT] += 1;     // Увеличиваем количество
  70.  
  71.     updateRatio(index); // Обновляем соотношение цены к прибыли
  72. }
  73.  
  74.  
  75. updateRatio();
  76.  
  77.  
  78. for (let i = 0; i < 1000; i++) {
  79.     if (data.length == 0) break;
  80.  
  81.     let index = getBestProduct();
  82.  
  83.     // Хватает ли денег для покупки
  84.     if (price + data[index][PRICE] > balance) {
  85.         break;
  86.         // console.log(`${data[index][NAME]}: ${data[index][COUNT]}`);
  87.         // data.splice(index, 1);
  88.         // continue;
  89.     }
  90.    
  91.     buyProduct(index);
  92. }
  93.  
  94. data.forEach(function(element) {
  95.     console.log(`${element[NAME]}: ${element[COUNT]}`);
  96. })
  97. console.log(`Потрачено: ${price}`);
  98.  
  99. /**
  100.  * Пример вывода:
  101.  * Курсор: 38
  102.  * Видеокарта: 40
  103.  * Стойка видеокарт: 36
  104.  * Суперкомпьютер: 31
  105.  * Сервер ВКонтакте: 30
  106.  * Квантовый компьютер: 30
  107.  * Датацентр: 20
  108.  * Потрачено: 5504646.582115372
  109.  */
Advertisement
Comments
  • User was banned
Add Comment
Please, Sign In to add comment