数学的魅力:口诀合成成本计算
投票2024/05/051735 浏览综合
结论:
- 「修诀堂」的「一键研修」成本极高,极力避免。
- 「商店购买成品口诀」成本很高,要避免。
- 「门派活动兑换金1口诀」成本高,要避免。
- 根据需要的口诀,手动合成是成本最低的方式。口诀合成成本表在帖子最后,大家可根据成本表自行计算可接受的成本。
免责声明:本文只包含成本计算,成本也是唯一的衡量纬度,不包含其他维度(比如门派是在没啥好换的,只能换金1)。
计算比较繁杂,如有计算错误或者代码错误,劳烦指出,我来修改。
背景
最近卡武圣进阶了,需要4个金4口诀,自己合成了一点,商店买一点紫3,活动换一点金1,还是遥遥无期。于是抽空计算了一下口诀的合成成本,不算不知道,一算吓一跳;感慨数学真有魅力。
计算过程
口诀分为白1至红5,3个当前等级的口诀 + 合成费用可以合成下一等级口诀。这是一个指数关系,即 3 的 n 次方。
在计算之前,先试着回答上述问题:
- 我需要金4,假如我有无限个白1(挂机免费所得),合成1个金4需要多少金币?
- 我需要金4,假如我有无限个蓝1(挂机免费所得),合成1个金4需要多少金币?
- 我需要金4,假如我有无限个紫3(商店花44000金币购买),合成1个金4需要多少金币?
- 我需要金4,假如我有无限个金1(门派花800声望兑换,可理解为80000金币购买),合成1个金4需要多少金币?
计算方式:
- 用白1合成金4,总成本 8037450
- 177147 个 白1,成本 0
- 合成 59049 个绿1,合成成本 2952450
- 合成 19683 个绿2,合成成本 1968300
- 合成 6561 个蓝1,合成成本 1312200
- 合成 2187 个蓝2,合成成本 787320
- 合成 729 个紫1,合成成本 451980
- 合成 243 个紫2,合成成本 291600
- 合成 81 个紫3,合成成本 129600
- 合成 27 个金1,合成成本 75600
- 合成 9 个金2,合成成本 39600
- 合成 3 个金3,合成成本 21600
- 合成 1 个金4,合成成本 7200
- 用免费蓝1合成金4,总成本 1804500;计算过程略。
- 用商店购买的紫3合成金4,总成本 3708000;计算过程略。
- 用门派活动兑换的金1合成金4,总成本 2228400;计算过程略。
可以看到:
- 用免费白1合成金4,成本奇高无比(800w),几乎不可承受。
- 排序:
- 商店购买紫4合成(370w)
- > 门派兑换金1合成(222w)
- > 用免费蓝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]