数学的魅力:口诀合成成本计算

投票2024/05/051735 浏览综合

结论:

  1. 「修诀堂」的「一键研修」成本极高,极力避免。
  2. 「商店购买成品口诀」成本很高,要避免。
  3. 「门派活动兑换金1口诀」成本高,要避免。
  4. 根据需要的口诀,手动合成是成本最低的方式。口诀合成成本表在帖子最后,大家可根据成本表自行计算可接受的成本。
免责声明:本文只包含成本计算,成本也是唯一的衡量纬度,不包含其他维度(比如门派是在没啥好换的,只能换金1)。
计算比较繁杂,如有计算错误或者代码错误,劳烦指出,我来修改。

背景

最近卡武圣进阶了,需要4个金4口诀,自己合成了一点,商店买一点紫3,活动换一点金1,还是遥遥无期。于是抽空计算了一下口诀的合成成本,不算不知道,一算吓一跳;感慨数学真有魅力。

计算过程

口诀分为白1至红5,3个当前等级的口诀 + 合成费用可以合成下一等级口诀。这是一个指数关系,即 3 的 n 次方。
在计算之前,先试着回答上述问题:
  1. 我需要金4,假如我有无限个白1(挂机免费所得),合成1个金4需要多少金币?
  2. 我需要金4,假如我有无限个蓝1(挂机免费所得),合成1个金4需要多少金币?
  3. 我需要金4,假如我有无限个紫3(商店花44000金币购买),合成1个金4需要多少金币?
  4. 我需要金4,假如我有无限个金1(门派花800声望兑换,可理解为80000金币购买),合成1个金4需要多少金币?
计算方式:
  1. 用白1合成金4,总成本 8037450
  2. 177147 个 白1,成本 0
  3. 合成 59049 个绿1,合成成本 2952450
  4. 合成 19683 个绿2,合成成本 1968300
  5. 合成 6561 个蓝1,合成成本 1312200
  6. 合成 2187 个蓝2,合成成本 787320
  7. 合成 729 个紫1,合成成本 451980
  8. 合成 243 个紫2,合成成本 291600
  9. 合成 81 个紫3,合成成本 129600
  10. 合成 27 个金1,合成成本 75600
  11. 合成 9 个金2,合成成本 39600
  12. 合成 3 个金3,合成成本 21600
  13. 合成 1 个金4,合成成本 7200
  14. 用免费蓝1合成金4,总成本 1804500;计算过程略。
  15. 用商店购买的紫3合成金4,总成本 3708000;计算过程略。
  16. 用门派活动兑换的金1合成金4,总成本 2228400;计算过程略。
看到口诀成本感受如何? (单选)
不过如此,洒洒水啦
26.7%
意料之中
20%
???!!!
53.3%
可以看到:
  1. 用免费白1合成金4,成本奇高无比(800w),几乎不可承受。
  2. 排序:
  3. 商店购买紫4合成(370w)
  4. > 门派兑换金1合成(222w)
  5. > 用免费蓝1合成(180w)

附件:成本表 & 计算方式

在成本表中,找到目标口诀和原材料口诀,计算方式为:总成本 = 合成成本 + (原材料成本 * 合成所需个数)
举个例子:紫3合成金4。找到「金4 <- 紫3: 合成成本=144,000;合成所需个数=81」这一行。商店购买紫3的成本是 44000,所以总成本 = 144000 + 81 * 44000 = 3708000。
绿1 <- 白1: 合成成本=50;合成所需个数=3
绿2 <- 白1: 合成成本=250;合成所需个数=9
绿2 <- 绿1: 合成成本=100;合成所需个数=3
蓝1 <- 白1: 合成成本=950;合成所需个数=27
蓝1 <- 绿1: 合成成本=500;合成所需个数=9
蓝1 <- 绿2: 合成成本=200;合成所需个数=3
蓝2 <- 白1: 合成成本=3,210;合成所需个数=81
蓝2 <- 绿1: 合成成本=1,860;合成所需个数=27
蓝2 <- 绿2: 合成成本=960;合成所需个数=9
蓝2 <- 蓝1: 合成成本=360;合成所需个数=3
紫1 <- 白1: 合成成本=10,250;合成所需个数=243
紫1 <- 绿1: 合成成本=6,200;合成所需个数=81
紫1 <- 绿2: 合成成本=3,500;合成所需个数=27
紫1 <- 蓝1: 合成成本=1,700;合成所需个数=9
紫1 <- 蓝2: 合成成本=620;合成所需个数=3
紫2 <- 白1: 合成成本=31,950;合成所需个数=729
紫2 <- 绿1: 合成成本=19,800;合成所需个数=243
紫2 <- 绿2: 合成成本=11,700;合成所需个数=81
紫2 <- 蓝1: 合成成本=6,300;合成所需个数=27
紫2 <- 蓝2: 合成成本=3,060;合成所需个数=9
紫2 <- 紫1: 合成成本=1,200;合成所需个数=3
紫3 <- 白1: 合成成本=97,450;合成所需个数=2,187
紫3 <- 绿1: 合成成本=61,000;合成所需个数=729
紫3 <- 绿2: 合成成本=36,700;合成所需个数=243
紫3 <- 蓝1: 合成成本=20,500;合成所需个数=81
紫3 <- 蓝2: 合成成本=10,780;合成所需个数=27
紫3 <- 紫1: 合成成本=5,200;合成所需个数=9
紫3 <- 紫2: 合成成本=1,600;合成所需个数=3
金1 <- 白1: 合成成本=295,150;合成所需个数=6,561
金1 <- 绿1: 合成成本=185,800;合成所需个数=2,187
金1 <- 绿2: 合成成本=112,900;合成所需个数=729
金1 <- 蓝1: 合成成本=64,300;合成所需个数=243
金1 <- 蓝2: 合成成本=35,140;合成所需个数=81
金1 <- 紫1: 合成成本=18,400;合成所需个数=27
金1 <- 紫2: 合成成本=7,600;合成所需个数=9
金1 <- 紫3: 合成成本=2,800;合成所需个数=3
金2 <- 白1: 合成成本=889,850;合成所需个数=19,683
金2 <- 绿1: 合成成本=561,800;合成所需个数=6,561
金2 <- 绿2: 合成成本=343,100;合成所需个数=2,187
金2 <- 蓝1: 合成成本=197,300;合成所需个数=729
金2 <- 蓝2: 合成成本=109,820;合成所需个数=243
金2 <- 紫1: 合成成本=59,600;合成所需个数=81
金2 <- 紫2: 合成成本=27,200;合成所需个数=27
金2 <- 紫3: 合成成本=12,800;合成所需个数=9
金2 <- 金1: 合成成本=4,400;合成所需个数=3
金3 <- 白1: 合成成本=2,676,750;合成所需个数=59,049
金3 <- 绿1: 合成成本=1,692,600;合成所需个数=19,683
金3 <- 绿2: 合成成本=1,036,500;合成所需个数=6,561
金3 <- 蓝1: 合成成本=599,100;合成所需个数=2,187
金3 <- 蓝2: 合成成本=336,660;合成所需个数=729
金3 <- 紫1: 合成成本=186,000;合成所需个数=243
金3 <- 紫2: 合成成本=88,800;合成所需个数=81
金3 <- 紫3: 合成成本=45,600;合成所需个数=27
金3 <- 金1: 合成成本=20,400;合成所需个数=9
金3 <- 金2: 合成成本=7,200;合成所需个数=3
金4 <- 白1: 合成成本=8,037,450;合成所需个数=177,147
金4 <- 绿1: 合成成本=5,085,000;合成所需个数=59,049
金4 <- 绿2: 合成成本=3,116,700;合成所需个数=19,683
金4 <- 蓝1: 合成成本=1,804,500;合成所需个数=6,561
金4 <- 蓝2: 合成成本=1,017,180;合成所需个数=2,187
金4 <- 紫1: 合成成本=565,200;合成所需个数=729
金4 <- 紫2: 合成成本=273,600;合成所需个数=243
金4 <- 紫3: 合成成本=144,000;合成所需个数=81
金4 <- 金1: 合成成本=68,400;合成所需个数=27
金4 <- 金2: 合成成本=28,800;合成所需个数=9
金4 <- 金3: 合成成本=7,200;合成所需个数=3
红1 <- 白1: 合成成本=24,123,150;合成所需个数=531,441
红1 <- 绿1: 合成成本=15,265,800;合成所需个数=177,147
红1 <- 绿2: 合成成本=9,360,900;合成所需个数=59,049
红1 <- 蓝1: 合成成本=5,424,300;合成所需个数=19,683
红1 <- 蓝2: 合成成本=3,062,340;合成所需个数=6,561
红1 <- 紫1: 合成成本=1,706,400;合成所需个数=2,187
红1 <- 紫2: 合成成本=831,600;合成所需个数=729
红1 <- 紫3: 合成成本=442,800;合成所需个数=243
红1 <- 金1: 合成成本=216,000;合成所需个数=81
红1 <- 金2: 合成成本=97,200;合成所需个数=27
红1 <- 金3: 合成成本=32,400;合成所需个数=9
红1 <- 金4: 合成成本=10,800;合成所需个数=3
红2 <- 白1: 合成成本=72,393,450;合成所需个数=1,594,323
红2 <- 绿1: 合成成本=45,821,400;合成所需个数=531,441
红2 <- 绿2: 合成成本=28,106,700;合成所需个数=177,147
红2 <- 蓝1: 合成成本=16,296,900;合成所需个数=59,049
红2 <- 蓝2: 合成成本=9,211,020;合成所需个数=19,683
红2 <- 紫1: 合成成本=5,143,200;合成所需个数=6,561
红2 <- 紫2: 合成成本=2,518,800;合成所需个数=2,187
红2 <- 紫3: 合成成本=1,352,400;合成所需个数=729
红2 <- 金1: 合成成本=672,000;合成所需个数=243
红2 <- 金2: 合成成本=315,600;合成所需个数=81
红2 <- 金3: 合成成本=121,200;合成所需个数=27
红2 <- 金4: 合成成本=56,400;合成所需个数=9
红2 <- 红1: 合成成本=24,000;合成所需个数=3
红3 <- 白1: 合成成本=217,215,150;合成所需个数=4,782,969
红3 <- 绿1: 合成成本=137,499,000;合成所需个数=1,594,323
红3 <- 绿2: 合成成本=84,354,900;合成所需个数=531,441
红3 <- 蓝1: 合成成本=48,925,500;合成所需个数=177,147
红3 <- 蓝2: 合成成本=27,667,860;合成所需个数=59,049
红3 <- 紫1: 合成成本=15,464,400;合成所需个数=19,683
红3 <- 紫2: 合成成本=7,591,200;合成所需个数=6,561
红3 <- 紫3: 合成成本=4,092,000;合成所需个数=2,187
红3 <- 金1: 合成成本=2,050,800;合成所需个数=729
红3 <- 金2: 合成成本=981,600;合成所需个数=243
红3 <- 金3: 合成成本=398,400;合成所需个数=81
红3 <- 金4: 合成成本=204,000;合成所需个数=27
红3 <- 红1: 合成成本=106,800;合成所需个数=9
红3 <- 红2: 合成成本=34,800;合成所需个数=3
红4 <- 白1: 合成成本=651,695,450;合成所需个数=14,348,907
红4 <- 绿1: 合成成本=412,547,000;合成所需个数=4,782,969
红4 <- 绿2: 合成成本=253,114,700;合成所需个数=1,594,323
红4 <- 蓝1: 合成成本=146,826,500;合成所需个数=531,441
红4 <- 蓝2: 合成成本=83,053,580;合成所需个数=177,147
红4 <- 紫1: 合成成本=46,443,200;合成所需个数=59,049
红4 <- 紫2: 合成成本=22,823,600;合成所需个数=19,683
红4 <- 紫3: 合成成本=12,326,000;合成所需个数=6,561
红4 <- 金1: 合成成本=6,202,400;合成所需个数=2,187
红4 <- 金2: 合成成本=2,994,800;合成所需个数=729
红4 <- 金3: 合成成本=1,245,200;合成所需个数=243
红4 <- 金4: 合成成本=662,000;合成所需个数=81
红4 <- 红1: 合成成本=370,400;合成所需个数=27
红4 <- 红2: 合成成本=154,400;合成所需个数=9
红4 <- 红3: 合成成本=50,000;合成所需个数=3
红5 <- 白1: 合成成本=1,955,157,150;合成所需个数=43,046,721
红5 <- 绿1: 合成成本=1,237,711,800;合成所需个数=14,348,907
红5 <- 绿2: 合成成本=759,414,900;合成所需个数=4,782,969
红5 <- 蓝1: 合成成本=440,550,300;合成所需个数=1,594,323
红5 <- 蓝2: 合成成本=249,231,540;合成所需个数=531,441
红5 <- 紫1: 合成成本=139,400,400;合成所需个数=177,147
红5 <- 紫2: 合成成本=68,541,600;合成所需个数=59,049
红5 <- 紫3: 合成成本=37,048,800;合成所需个数=19,683
红5 <- 金1: 合成成本=18,678,000;合成所需个数=6,561
红5 <- 金2: 合成成本=9,055,200;合成所需个数=2,187
红5 <- 金3: 合成成本=3,806,400;合成所需个数=729
红5 <- 金4: 合成成本=2,056,800;合成所需个数=243
红5 <- 红1: 合成成本=1,182,000;合成所需个数=81
红5 <- 红2: 合成成本=534,000;合成所需个数=27
红5 <- 红3: 合成成本=220,800;合成所需个数=9
红5 <- 红4: 合成成本=70,800;合成所需个数=3

附件:实现源码

```ts
const 口诀成本 = [
  { name: '白1', cost: 0 },
  { name: '绿1', cost: 50 },
  { name: '绿2', cost: 100 },
  { name: '蓝1', cost: 200 },
  { name: '蓝2', cost: 360 },
  { name: '紫1', cost: 620 },
  { name: '紫2', cost: 1200 },
  { name: '紫3', cost: 1600 },
  { name: '金1', cost: 2800 },
  { name: '金2', cost: 4400 },
  { name: '金3', cost: 7200 },
  { name: '金4', cost: 7200 },
  { name: '红1', cost: 10800 },
  { name: '红2', cost: 24000 },
  { name: '红3', cost: 34800 },
  { name: '红4', cost: 50000 },
  { name: '红5', cost: 70800 },
];
function calCost(target: string, src: string, srcCost = 0): number {
  const targetIndex = 口诀成本.findIndex((item) => item.name === target);
  const srcIndex = 口诀成本.findIndex((item) => item.name === src);
  if (targetIndex === srcIndex) {
    return 0;
  }
  const array = 口诀成本.slice(srcIndex + 1, targetIndex + 1).reverse();
  let result = 0;
  array.forEach((item, itemIndex) => {
    // 计算合成成本
    result += item.cost * 3 ** itemIndex;
    // 计算原材料成本
    if (itemIndex === array.length - 1) {
      result += srcCost * 3 ** (itemIndex + 1);
    }
  });
  return result;
}
function calCount(target: string, src: string): number {
  const targetIndex = 口诀成本.findIndex((item) => item.name === target);
  const srcIndex = 口诀成本.findIndex((item) => item.name === src);
  return 3 ** (targetIndex - srcIndex);
}
function consoleCostAndCount() {
  for (let i = 0; i < 口诀成本.length; i++) {
    for (let j = 0; j < i; j++) {
      console.log(
        `${口诀成本[i].name} <- ${口诀成本[j].name}: 合成成本=${calCost(
          口诀成本[i].name,
          口诀成本[j].name
        ).toLocaleString()};合成所需个数=${calCount(口诀成本[i].name, 口诀成本[j].name).toLocaleString()}`
      );
    }
  }
}
consoleCostAndCount();
```
[END]
9
14
15