Appearance
呃呃没下 Mathematica 就看异世界厕纸
- 原文: https://zhuanlan.zhihu.com/p/2014309323325613393
- 发布日期: 2026-05-10
- 分类: Mathematica / 软件 / 写作与计算工具
我不知道我在写什么但··· 你要 Mathematica 苦手的话可能会认为本文很有启发性, 因为我打 maimai 的具体思路与代码在文中都会被详细地 po 出来.
上个季度有部叫『ヘルモード 〜やり込み好きのゲーマーは廃設定の異世界で無双する〜 / Hell Mode 〜喜欢深度游玩的玩家在废设定的异世界开无双〜』的异世界厕纸实在让我感到興味深い, 它的有趣程度甚至排到了季度第二.
虽说是个总体比较拉的季度但能排到第二还是挺牛的··· 拉也是真的——才排到第 12 左右的『違国日記 / 异国日记』就已经进入被我反复羞辱的状态了, 而才仅仅第 16 位的『転生したらドラゴンの卵だった / 转生完是龙蛋了』就几乎可以用一坨屎去形容了. 但前四确实不错, 不过排第 3 的『正反対な君の僕 / 完全相反的你和我』显然是个邪道选手, 这东西第二季肯定没法看的, 而第 4 位的『呪術廻戦 第3期 死滅回游 前編 / 咒术回战 第三季 死灭回游 前篇』则下一季只会更精彩··· 你们再怎么跟风黑我说实话那好看就是好看, 脑子是骗不了人的.
更具体的排名与比比赖赖, 请:
https://www.zhihu.com/question/1997843021090281330/answer/2011145301323446249本文主角的『ヘルモード 〜やり込み好きのゲーマーは廃設定の異世界で無双する〜 / Hell Mode 〜喜欢深度游玩的玩家在废设定的异世界开无双〜』将在下文被简称为 Hell Mode.
Hell Mode 实在有趣, 因为它竟同时办到了能让异世界厕纸发好发香的这么几点:
- (1). 始终盯着主角走, 没搞你吗的傻仔群像剧也没出现无聊的宫廷限制.
- (2). 场景丰富, 氛围到位且叙事流畅, 不会给人一种轻描淡写或间断的预告片感.
- (3). 人设好看又自然, 而不是什么刻板关键词驱动的扁平人··· 画面虽不精致但却认真.
- (4). 数值有限, 而且是在飙升的基础上办到了保守, 这就保障了发展的可持续性.
其中第 (4) 点中的数值有限包含了宏观与微观两个层面, 宏观来看男主虽一路高升却完全没有发散的趋势, 比如身份上从农奴到平民就花了老半天, 然后到男仆就已经算是飞升了. 而在剧中负责作威作福的杉田智和花了十二集也仅仅只是从男爵进化到子爵, 更不用说他家的骑士团长到最后也还是比主角光环拉满的男主强一大截儿.

杉田智和与他可爱的小女儿数值上的这种克制感在一众的异世界厕纸中实属难得, 因为厕纸必须得是爽文, 直接丢炸当然就能无脑爽但这显然无异于饮鸩止渴嘛. 所以更高级的做法就是像这样借助厚实的铺垫来衬出厕纸的爽点, 道理是很简单的——比如稀松平常的喝杯水, 要放在沙漠背景就构成了爽点——但做起来··· 至少不常见. 当然也不是说一定要这样才能有趣, 但踏实的作品绝对值得夸奖.
而下文将主要分析微观层面的数值操作, 也就是具体的一些参数, 比如经验值、等级等.
其实我平时也不会去特别关注这些内容, 但问题在于这第五集突然提到说他竟只花了三个月就从 3 级升到了 6 级:

EP05 的 10:52 处的截图, 于同一集的 07:52 处提到了时间间隔为三个月要知道标题中所谓的 Hell Mode 的意思指的就是他升级需要常人的一百倍经验, 所以你这样仨月连升三级听起来是有些违和的··· 我是说首先你前期就没啥刷级途径, 其次是你升级要付出的努力是正常情况的一百倍, 所以这连升三级究竟意味着什么呢? 就是说如果你没有这个百倍经验需求的 debuff 的话你的这些努力能让你连升多少级呢?··· 总之我就是非常在意这个事儿, 我很在意他仨月连升三级的这个情节究竟是否说得通, 因为就设定来看这也太反直觉了.
然后我又发现这动画片竟敢把魔导书中的数据展示得那么详细, 那按理说我完全是可以就通过记录这一整季中出现的所有数据来拟合这个世界的升级曲线的, 进而不就能验证仨月连升三级的合理性了吗?
哦哟, 我赶紧就把前五集又重刷了一遍并记录了其中的所有数据··· 也包括第六集之后的数据, 得说总体看来这些参数都给得十分自洽, 时间线也都安排得挺稳的, 我的评价事官方私下肯定有本儿相当具体的设定集:

先将升级所需的经验参数都输入 MMA, 并绘制折线图初步感受一下:
- ExpTab={1,1000},{2,2000},{6,6000},{7,7000},{20,200000},{24,600000},{27,900000},{30,3000000},{34,7000000},{35,8000000},{41,50000000};
ListLinePlot[ExpTab,ImageSize->490,Mesh->All,MeshStyle->PointSize[0.01],PlotStyle->{Nest[Darker,Green,2],Thickness[0.003]},Frame->True,FrameStyle->Directive[Black,Thickness[0.003]],LabelStyle->{Directive[Bold,Black],FontFamily->"Times",FontSize->14},PlotRange->All]

鉴定为想直接插值拟合这条曲线是不太可能的了, 因为它很显然是分段线性的:

当然要试试也很简单, 只不过经验已经告诉我分段线性真不能处:
UpCost[n_]:=Interpolation[ExpTab,InterpolationOrder->n];Plot[#,{x,24,24.1},ImageSize->490,GridLines->{},{600000},GridLinesStyle->{Black,Thickness[0.001]},PlotStyle->Table[{Dashing[n/280],Nest[Darker,Green,n],Thickness[0.003]},{n,1,10}],Frame->True,FrameStyle->Directive[Black,Thickness[0.003]],LabelStyle->{Directive[Bold,Black],FontFamily->"Times",FontSize->10},PlotRange->All,PlotLabels->Table[Callout[n,After],{n,1,10}]]&[Table[UpCost[n][x],{n,1,10}]]
上面为了能先把表格算出来而用到了纯函数的写法, 你可以认为就是 F[#1,··· ,#n]& 这样的写法几乎就等价于 F. 这就是说有 F[#1,··· ,#n]&[x1,···,xn] 几乎等价于 F[x1,···,xn], 呃至于说几乎在哪儿我就有点儿懒得解释了, 你可以去问 AI. 另外就是如果你不去区分各个变量的话那所有的 # 就都会被视为同一个变量, 即有 F[#,··· ,#]&[x] 几乎等价于 F[x,···,x].

同时绘制多项式次数分别为 1 到 10 的插值曲线, 只需考查 24 级的右领域我们便不难发现就只有线性插值才能保证不会出现经验值需求反而降低的情况··· 其实我也没法保证 Hell Mode 的等级系统中就一定不会出现更高等级的升级经验需求反而更低的情形, 但那种情形怎么想都是极不自然的. 那么从这个角度考虑我们就只能选择线性插值了, 毕竟只要能保证单调性问题就都不大了, 像非整数之类的则总可以通过取整来解决.
然而这并不意味着我们就可以将决定升级所需经验值的 UpCost[n] 函数直接确定为:
UpCost[n_]:=Quiet[100Floor[Interpolation[ExpTab,InterpolationOrder->1][n]/100]];
这是因为线性插值将完全丢失数据集的曲率信息, 为了能同时保留数据中非平凡的曲率结构, 我们在进行外推时改为采用二次插值的操作还是较为必要的. 不再考虑更高次的插值则是因为插值的次数越高, 在高等级区域的表现就越不稳定, 甚至还可能会出现负定的情形.
所以决定升级所需经验值的 UpCost[n] 函数较为自然的一个确定方案应当是:
UpCost[n_]:=Quiet[100Floor[If[n<41,#[1],#[2]]&[Interpolation[ExpTab,InterpolationOrder->#][n]/100&]]];
具体的效果表现为:
UpCost[n_]:=Quiet[100Floor[If[n<41,#[1],#[2]]&[Interpolation[ExpTab,InterpolationOrder->#][n]/100&]]];MyGrid=Grid[Transpose[#],ItemStyle->{Directive[Bold,Nest[Darker,Green,3]],FontFamily->"Times",FontSize->14}]&;MyPlot[Scaling_,F_,{n_,nMin_,nMax_}]:=Plot[Scaling F[n],{n,nMin,nMax},Sequence[ImageSize->490,PlotStyle->{Nest[Darker,Green,2],Thickness[0.003]},Frame->True,FrameStyle->Directive[Black,Thickness[0.003]],LabelStyle->{Directive[Bold,Black],FontFamily->"Times",FontSize->14},PlotRange->All]]MyPlot[F_,{n_,nMin_,nMax_}]:=MyPlot[1,F,{n,nMin,nMax}];Table[{n,UpCost[n]/100},{n,1,21}]//MyGridTable[{n,UpCost[n]/100},{n,22,36}]//MyGridTable[{n,UpCost[n]/100},{n,37,49}]//MyGridMyPlot[10^-2,UpCost,{n,1,344}]

可以顺带再看看没有保留曲率信息的结果, 这只需将 UpCost 定义中的参数修改为:
UpCost[n_]:=Quiet[100Floor[If[n<41,#[1],#[1]]&[Interpolation[ExpTab,InterpolationOrder->#][n]/100&]]];

呃呃可以说是非常鬼畜了,,
我们大可以再搬个真实存在的 ARPG 比如说『Elden Ring』的 ExpCurve 出来做个对比:

注意到『Elden Ring』的每升一级所需的经验值显然满足公式:
UpCost[ER,n_]:=Floor[(Max[0,(n-11)/50]+1/10) (n+81)^2+1];
上述公式给出的结果明显更支持我们保留数据集的曲率信息:
UpCost[ER,n_]:=Floor[(Max[0,(n-11)/50]+1/10) (n+81)^2+1];Table[{n,UpCost[ER,n]},{n,1,21}]//MyGridMyPlot[UpCost[ER,#]&,{n,1,344}]

这就意味着决定升级所需经验值的 UpCost[n] 函数更倾向于被确定为:
- ExpTab={1,1000},{2,2000},{6,6000},{7,7000},{20,200000},{24,600000},{27,900000},{30,3000000},{34,7000000},{35,8000000},{41,50000000};
UpCost[n_]:=Quiet[100Floor[If[n<41,#[1],#[2]]&[Interpolation[ExpTab,InterpolationOrder->#][n]/100&]]];
但最后其实还有几个地方需要注意, 那就是在 EP06 的 19:16 处显示男主处于 7 级需要 7000 经验值且当前的经验值为零, 他也正是在这一集前往的男爵宅邸. 然后在 EP07 的 09:23 处的心理活动标明男主前往男爵宅邸后一直到这一刻为止都没出过城镇, 这就意味着他仍处于 7 级零经验的状态. 接着就是重点了, 在 EP07 的 13:10 处可以确认的信息是男主仅通过 7 级后的第一次狩猎就获得了 16050 的经验值并因此连升两级. 这就说明从 7 级升到 8 级需要的经验不会超过 16050 - 7000 = 9050, 但我们前面拟合出来的公式却会得出 UpCost[8] = 21800, 这显然是不合理的:

于是再考虑到 1 到 7 级的纯线性增长, 我认为非常有必要再人为加入一个从 8 级升到 9 级的修正点 {8,8000}, 不过倒也不会引起太大的变化就是了:

所以我最终的答案是:
- ExpTab={1,1000},{2,2000},{6,6000},{7,7000},{8,8000},{20,200000},{24,600000},{27,900000},{30,3000000},{34,7000000},{35,8000000},{41,50000000};
UpCost[n_]:=Quiet[100Floor[If[n<41,#[1],#[2]]&[Interpolation[ExpTab,InterpolationOrder->#][n]/100&]]];
显然这个公式用来回答本文的核心问题属于是绰绰有余的了, 至于说这个公式的外推能力究竟有多强我们可以留到下一季再检验, 我很期待第二季跟杉田智和他可爱小女儿的奇妙冒险.

好的那么仨月连升三级究竟意味着什么呢?
就是说如果男主没有这个百倍经验需求的 debuff 的话, 那他这仨月保底能升到几级呢?
UpCostTab=Table[UpCost[n],{n,1,77}];- TotalSpent[Scaling_,nMin_,nMax_]:=Sum[Scaling Part[UpCostTab,n],{n,nMin,nMax}];
- TotalSpent[nMin_,nMax_]:=TotalSpent[1,nMin,nMax];
- N[#+TotalSpent[10^-2,3,#]/TotalSpent[10^-2,3,#+1]]&[First[Select[Range[77],TotalSpent[10^-2,3,#]>=TotalSpent[3,6]&]]]

答案事几乎要升到 23 级,,
顺带一提如果没加入 {8,8000} 的话则会得到 22.8125 级, 然后 EP08 的信息量非常大:
- (1). 该集的 07:28 处提到杉田智和放假回家的大儿子为 14 岁.
- (2). 该集的 09:57 处表明男主已达 20 级.
- (3). 于该集的 11:02 处男主在比划中被杉田智和的大儿子完虐.
结合上述信息再考虑到男主开了点儿挂, 那杉田智和的大儿子至少不会低于 20 级. 也就是说在这个世界观下一个 14 岁的儿童突破 20 级是完全有可能发生的自然现象, 那男主在有挂的情况下于 7 岁多拿到足以使常人升到 23 级的经验确实也算是不足为奇的吧.
哎呀, 这我就放心了,,

附录:
- 选择需百倍经验穿越且转生游戏, E01-0104.
- 虽然也穿越了但男主认定转生, E01-0210, 00y.
- 选最高难度的好处疑似是无上限, E01-0230.
- 实际为 35 岁, 一事无成打工人, E01-0247, 01y.
- 第一次开魔导书, 01→02: 1k, E01-0512, 01y.
- 于 10 月份满 03 岁, E01-1419.
- 01→02: 1 k, E03-0147-0400, E04-0759, 05y.
- 02→03: 2 k, E04-0811, E05-0718, 06y.
- 从 03 到 06 只花了三个月, E05-0752.
- 06→07: 6 k, E05-1052-1355, 07y.
- 07→08: 7 k, E06-1916, 08y.
- 前往男爵家当佣人, E06-2140, 08y.
- 当天获 16050 经验后连升两级, E07-1310.
- 连升两级后又过了一个月, E07-1422.
- 这一个月通过四次狩猎升到 12 级, E07-1440.
- 从 07 到 12 只花了两个月, E07-1502.
- 于 12 月下旬仍处 08 岁, E08-0005.
- 男爵长子放假回家的次年 03 月, E08-0640.
- 20→21: 200 k, E08-0957, 08y.
- 于 10 月上旬处于 09 岁, E08-1702.
- 确认完整年龄为 43 岁, E08-1806, 09y.
- 24→25: 600 k, E08-1723-2045, 09y.
- 到男爵家一年整为 E08-2107.
- 27→28: 900 k, E09-0424, 09y.
- 于 03 月初旬处于 09 岁且达 28 级, E09-1055.
- 30→31: 3 M, E09-1427-1722, 09y.
- 于 10 月份处于 10 岁, E10-0006.
- 次年 03 月, E10-0448, 10y.
- 34→35: 7M, E10-0531, 10y.
- 次年 05 月为 10 岁, E10-0922.
- 35→36: 8M, E10-0932, 10y.
- 于 09 月份处于 10 岁, E10-1900.
- 于 03 月份处于 11 岁, E11-0603.
- 讨伐超过 5k 只经验为 3k 的铠蚁, E11-0852.
- 于 10 月份处于 12 岁, E11-1409.
- 41→42: 50M, E11-2144.
- 于 11 月份处于 12 岁, E12-2009.