Friday, 30 October 2026

Minesweeper: when ILP Meets SAT

Oh hello minesweeper. It's been a while since I last talked about it even though this is something I never left it up on the shelves: I showed up playing MSN minesweeper at times (perhaps once a year), and tried minesweeper speedrunning at times but those were nothing new. 

What caught my attention is a new minesweeper like mobile game where you fill the tiles by colors. This is immediately a variant of minesweeper with the following rules:

- Colors: there can be 2, 3 or 4 colors, but let's assume we are talking about the 2 color version for simplicity since it is then equivalent to OG minesweeper.
- Difficulty: either basic or advanced.
Basic: you should be able to find tiles that solve directly. For example if you see a red-2 but there are already 6 non-red neighbors (either colored non-red or marked non-red), then you know the remaining two much be red.
Advanced: Only guarantee logical solving.
- Extra rules: some of the games are coupled by extra rules like number of tiles/chained blocks of a certain colors of a row/column, number of 2-chains on a row/column, symmetry, dominant color of a row/column...etc

Every game is composed of a color rule, basic/advanced rule set + optional extra rules and should be solvable logically.

As a minesweeper veteran you would find the basic rule set extremely satisfying to play since everything can be processed quickly. 30 seconds to solve a 8x8 board is almost routine.

However, some of the extra rule set isn't that simple yet it could appear together alongside basic rule set. Consider symmetry rule for example: instead of numbers, some tiles are filled with -> <- arrow pairs, indicating palindrome pattern between arrows.

One expected operation for symmetric rule is the ability to deduct the position of the ending arrow given a starting arrow and a few colored tiles in between. But such deduction does not sound simple at all right?

Despite how the game handles such conflict, we ask an important: how to properly define simple-ness?

And then there comes the advanced rule set.

In the tutorial the following example is given:
2 □ □
x □ 2

(□ = unrevealed tile, x = mine)

Tutorial used that as an example of 'non-simple' logic: if the right top corner is safe then we have to flag both tiles on column 2 violating the 2 at left-top corner. Thus right top corner must be flagged.

I read the whole thing in a different way though. Instead of treating it as a propositional logic problem, I see it as an linear integer programming problem. In plain terms I am looking to deduct using equations.

In the above example let us encode as
2 A C
x B 2
That gives A+B=1 and A+B+C=2 which solves to C=1.

Such approach is nothing new and I believe many are doing the same. In fact, I found this approach almost universal, meaning I can solve most problems simply using such counting trick, but is that true?

The problem here is, assuming the board is logic-solvable can we use equations derived from hints to find the answer?

Simple board

It's so hard to define what a simple rule set is, especially when it is mixed with other extra rules. But what if we separate what we can do per rules?

Define operations allowed under "basic rule set" as follows:
1. If #neighboring mines = mine number, mark all remaining neighboring tiles safe
2. If #remaining neighboring tiles = #remaining mines, mark all remaining neighboring tiles mines

We can do the same for any extra rules. Take "number of mines in a row/column" as example the rules could look like:
1. If #mines on row/column = mine number, mark all remaining tiles on row/column safe
2. If #remaining tiles on row/column = #remaining mines, mark all remaining tiles on row/column mines

Those rules could be a lot more complicated for other rules though. Imagine the rules about number of chains on row/column...

These set of operations are essentially logical inference theorems. That says, a logically solvable board is a (finite) board that at each state there is at least a tile that can be marked either safe or mine using one of the theorems.

Advanced rule set

Ok then what separates from the basic rule set then? In the above example we see that those operations is simply not enough. In fact we know that if we have finite (or polynomially many) rules, each rule has polynomially many scopes to check, each application is in P and a search invokes the rules polynomially many times, it would not be a logically complete search. 

That is unless, of course, if P equals NP (equals coNP) (!!!).

NP-completeness is proven by showing circuit-SAT reduces to minesweeper. In other words we actually have a construction of boards from logically hard problems. That says, the approach of producing a set of quick rules won't get you anywhere.

When (polynomial time) inference approach does not work anymore, the only thing we can do is to rely on the existence of solution. We can define an operation like:

1. Mark a tile safe/mine, if all possible solutions from current board state have that tile marked safe/mine.

That's pretty much it. The universal definition of solvability in one sentence, although it doesn't mean simplicity at all. Check all solutions is an exponential approach. Although the fact that propositional logic is complete means there will be a deduction from the current board if there is possible progress, but at what cost can we find the deduction? I guess you know better unless a certain equality is miraculously true again ;)

In some sense basic vs advanced is just a disguised P vs NP just like 2-SAT vs 3-SAT*.

Logical deduction vs mathematical formulation

This is another issue that looks unrelated to the above but just look at how all previous talks were focused on NP-completeness and SAT solving, how could this be an exception?

On the logical side, minesweeper is obviously a SAT problem. 

On the mathematical side, it isn't just a linear system -- it's a binary system where all variables must be 1 or 0.

The fact that all variables must be below 1 and above 0 is surely well understood as this is precisely how the basic operations work, but this is nothing spectacular. A linear system with inequalities are merely linear programs with well understood properties and polynomial algorithms. Integer programming on the other side, is a completely different beast.

We constructed an example where integrality matters:

x x 4 x x
x F x D 4
4 x x C B
A x 7 x x
2 E x x x

This is a typical successive either-or pattern. Each consecutive pair in the chain  D-F-A-E-C sums to 1 like A+F=1, F+D=1 and so on. The caveat is the head and tail are connected here and is bounded by the extra equation B+C+D = 2. 

Since we know A=C=D we substitute to get 2A+B = 2, so integrality forces (A,B) = (1,0). In logical terms, the cycle forces C and D to be either both safe or both mine but since there is at least one mine among C, D we conclude both must be mine. This would never be solved without quoting the integrality constraint.

Although all the above merely give you a feel on how minesweeper is actually a subproblem of 0-1 integer linear programming (ILP), it's still far from a complete proof that it is NP-complete. Can we reduce any 0-1 ILP problem into minesweeper board? This is actually very tricky because it is almost impossible to corporate large coefficients in minesweeper board given its geometry. That's precisely why the actual proof took the alternative track by showing circuit-SAT reduces to minesweeper in the logical sense instead, which makes Karp happy.

Nonetheless, it is much easier to prove that the universal theorem from the logic side is equivalent to the universal theorem from the math side. We may as well define the operation in the mathematical way:

1. Mark the tile $X_i = 0/1$ if every solution vector $x$ to the system satisfies $x_i = 0/1$.

That says, if you take things to the extreme and consider the complete power of logical solving and mathematical solving the two are equivalent. It will likely be all we will know unless someone start to ask question like "can we compare the strength of a set of operations in solving ILP and a set of inference rules in logical deduction?". 

For example, consider the LP relaxation $\left\{ Ax=b, 0\leq x_i \leq 1\right\}$. This is surely P-time solvable. What is the corresponding logical inference rules? The answer is surprisingly clear with the help of Farkas using duality. The unfortunate bit is that the inference rule basically looks so mathematical where we start to lose the boundary between 'logical' and 'mathematical'.

***

This minesweeper variant got me to think a lot about mathematics behind, but the deeper I go I realized all of them reduce to the basic principle of completeness with basically nothing more. Let's call it a good revision and look over it.

There is an important take away though. Logical approach and mathematical approach are deeply entwined. The deeper we try to look into, the close the they look. Instead of treating the two separately, we should learn to make use of both: we use the logical approach to perform reduction, and we use the mathematical approach to understand its formulation. Minesweeper becomes a beautiful medium where the two meet, and I hope you can appreciate it too :)

(*): to be precise this is not the most accurate comparison as inferences and solvability is coNP-complete not NP-complete but you get it.

Saturday, 17 October 2026

A possible AD4 revitalization?!?

I have been writing about ways to use AD4 in modern systems from win 7 to 10 to 11. It truly gets harder and more frustrating each time...but anymore.

The era of vibe coding has arrived, and someone did it before me. Admittedly this project isn't my priority but it's still nice to have something right? It's major enough I decide to write about this overnight despite having another AD entry half year ago.

Introducing the Long After Dark, another name that abbreviates to a loser team.

According to its description, it runs the original Windows modules through an emulated x86 and old Windows environment, with its own screensaver host and settings window. After Dark 4.0 Deluxe is among the supported releases. That covers a large part of what I had in mind, without having to rewrite every screensaver individually.

It isn't fully what I wanted which is low CPU consumption in modern standard. But for now, this is simply another possible route for those trying to bring AD back. If the old instructions no longer work for you, it may be worth checking the project before spending another evening moving files between System32 and SysWOW64.

As for my own revival plan, I can leave it further down the list until there is something specific that still needs doing. If you give LAD a try, I'd be interested to hear how it works with your favourite modules. :)


Saturday, 10 October 2026

Capturing growth rate in problem solving (3): calculus and generalization

5. Calculus problems

Example 14. (SMMC 2025 A1) A function $f: [0,\infty)\to [0,\infty)$ is max-poly if it is in the form of $f = \max (p_1,\ldots, p_n)$ where $p_i$ are real polynomials with $p_i (x) \geq 0$ for all $i = 1,\ldots , n$ and $x\geq 0$. Determine if $f = \min (x,x^2)$ is max-poly.

Remember how the growth rate of polynomials with distinct orders are completely separated? The same applies here. The growth rate of $f$ is $O(x)$ locking all polynomials to be of order at most 1 that the $x^2$ curve cannot form. 

In fact, interpolation tells us that a segment from a polynomial cannot be a piecewise combination of other polynomials. That says we can prove the other way round. The $x^2$ curve forces at least one of the polynomial quadratic which would destroy the long term growth rate.

Example 15. (Putnam 2017 A3) Let $a<b$, $f,g:[a,b]\to (0,\infty)$ be continous with $\int ^b_a f(x)dx = \int ^b_a g(x)dx$ but $f\neq g$. Define $I_n = \int ^b_a (f(x)/g(x))^n \cdot f(x) dx$ for positive integers $n$. Show that $I_n$ is increasing and diverges to infinity.

Well the diverging part is clear knowing the whole thing is exponential right? Their integral being equal but the function being equal means there exists compact set $K$ of positive measure where $f(x) \geq (1+\delta)g(x)$. Let $m = \min _K f(x)$, then $I_n \geq m(1+\delta)^n \to \infty$.

Sure we need other tricks to help us dealing with the increasing part but that isn't too hard. Here I present something not used in official solution. If we extend definition to $I_0 = \int f(x)dx$ we can prove $I_1\geq I_0$ by direct calculation, then Hölder's inequality gives 

$I_n = \int ^b_a \frac{f(x)^{n+1}}{g(x)^{n}} dx = \int ^b_a (\frac{f(x)^{n+2}}{g(x)^{n+1}})^{\frac{n}{n+1}}f(x)^{\frac{1}{n+1}} dx$
$\leq (\int ^b_a \frac{f(x)^{n+2}}{g(x)^{n+1}} dx )^{\frac{n}{n+1}} (\int ^b_a f(x)dx)^{\frac{1}{n+1}}$

But since $\int ^b_a f(x) dx = \int ^b_a g(x)dx$ that implies $I_n \leq I_{n+1}^{\frac{n}{n+1}}I_0^{\frac{1}{n+1}} \leq I_{n+1}^{\frac{n}{n+1}}I_n^{\frac{1}{n+1}}$
by induction, so $I_n\leq I_{n+1}$. Since $f\neq g$ strict inequality is achieved and we are done. The proof also indicates an exponential growth in long term.

Example 16. (Putnam 2009 B5) Let $f:(1,\infty)\to \mathbb{R}$ be differentiable with $f'(x) = \frac{x^2-f(x)^2}{x^2(f(x)^2+1)}$ for all $x>1$. Prove that $lim _{x\to \infty} f(x) = \infty$.

The derivative looks complicated but the core idea is that $f'(x)$ is slightly below 1 but not too far off, then it grows like $x$ which diverges to infinity. Qualitatively, we know $f'(x) = 1 - \frac{x^2+1}{x^2}\frac{f(x)^2}{1+f(x)^2}$. If $f(x)$ is bounded above then $f'$ is positive and bounded below which forces a contradiction.

The honorable mention here goes to 2010 A6 which like the above B6 will go into exercise. The standard first solution looks horrible but think about the growth rate of that integral...

6. Generalization

From all the questions we have solved above, we see that growth rate sometimes act as a key step, sometimes plays a crucial role, but it's never the full solution. One would be silly to think this is all you need to master functional equation of similar problems.

That does not mean the understanding of growth rate ends here. Let us reconsider what growth rate brings us.

As example 10 exhibited, a polynomial growth rate is preserved, or characterized by powers. In other words, we are filtering other possibilities by looking for functions that satisfy the characterization, rather than calculating the growth rate.

Another way to characterize growth rate is of course eigenvectors. For example we know an exponential function is an eigenvector to frequency alteration $f(\cdot)\mapsto f(a\cdot)$ in the function space. In the same sense a monomial is an eigenvector to the dilation (scaling) operator. Instead of grinding hard  on the growth rate, the implication itself could be more useful at times.

You may guess the keyword to be eigenvector which is not wrong but to me the more important takeaway is how you can understand growth rate as one of the filter which there are many more. Relate that to operators and you can see the problem in a much higher level.

This section is fully dedicated to a single problem which is arguably one of my top favourite contest problems:

Example 17. (SMMC 2025 A4) Let $V$ be a finite dimensional subspace of the space of smooth real functions. For every $f(x)\in V$, we have $f(2x)\in V$. Prove that $V$ only consists of polynomials.

There are two official solutions -- one generalized eigenvectors (what a pity they did not even mention this is generalized eigenvectors) and one by frequency filtering.

For the frequency filtering solution they quoted this lemma:

Lemma 3. Let $\theta _1, \ldots , \theta _m \in [0, 2\pi)$ be distinct angles, $h_1(x),\ldots, h_m(x)$ be polynomials (not necessarily real). Suppose the limit $\lim _{k\to \infty} \sum _{j=1}^m h_j(k) e^{ik\theta _j} = 0$
where limit is taken over integers $k$, then all $h_j$'s are zero.

The factor $e^{ik\theta _j}$ clearly screams Fourier which sparked me to think about a solution that truly utilize transformations. Unfortunately we would run into problems which we will address near the end. Yet, I still come up with an alternative solution of my taste as below.

The solution plays around the non-trivial linear relation $\sum c_jT^jf = 0$. Or rather, the whole solution is a repeated use (abuse) of it. In a pointwise version we write $f(x) = \sum c_i f(2^{-i}x)$.

We know that $f^{(k)}(0) = 0$ for all large enough $k$ as in all other solutions. This is by differentiating the linear combination $\sum c_jT^jf = 0$ and substitute $x = 0$ so get $f^{(k)}(0)\sum c_j 2^{kj} = 0$. For large enough $k$ the highest term dominates forcing the sum non-zero, hence $f^{(k)}(0)= 0$.

That says, $f$ has a finite Maclaurin polynomial $P$. Some other solution focuses on showing $f^{(k)}(x) = 0$ for other $x$, but we deal with the remainder $h = P-f$ instead.

Lemma 4. For any $f\in V$ the function is bounded by polynomial growth. More precisely, there exists a norm $ \|\cdot \|$ for $V$ and constants $C, \alpha >0$ such that $|f(x)| \leq C \| f\| |x|^{\alpha}$.

Proof. Let $M = \sup _{x\in [-1,1]}|f(x)|$ and consider the non-trivial linear recurrence $f(x) = \sum c_i f(2^{-i}x)$. Let $r = 1+\sum |c_i|$. Then induction gives $|f(x)| \leq r^nM$ for $|x| \in [2^{n-1},2^n]$, or simply that $|f(x)| \leq r^{1+\log _2 |x|} M$ which is a polynomial bound.

It is actually easier if we start with a norm although without knowing the polynomial bound it may not be trivial to pull out a norm other than the sup norm. Now we can use norms like $\|f\| = \int |f(x)|e^{-|x|}dx$. We can then have $C, \alpha >0$ that $\|Tf\| \leq c_1\|f\|$ and $\sup _{x\in [-1,1]}|f(x)| \leq  c_2 \| f\|$. For $|x|\geq 1$ write $x = 2^ky$ where $|y|<1$ then $|f(x)| = |T^kf(y)| \leq c_1^k c_2 \|f\|$ which gives the same result. 

The lemma implies that $h$ has at most polynomial growth at the far end. We combine with the fact that it shrinks faster than polynomial at zero as $h^{(k)}(0) = 0$ for all natural number $k$ to show that it is indeed zero.

Note that $h$ also satisfies the recurrence $h(x) = \sum c_i h(2^{-i}x)$. For large enough $k$ there exists $M_k$ such that $|h(x)| \leq M_k |x|^k$ for all $x$. Now we estimate

$\frac{|h(x)|}{|x|^k} \leq \sum (2^{-ik}|c_i| \frac{|h(2^{-i}x)|}{|2^{-i}x|^k}) \leq \sum (2^{-k}|c_i| \frac{|h(2^{-i}x)|}{|2^{-i}x|^k})$.

Taking supremum gives $M_k \leq M_k 2^{-k}\sum|c_i|$. We just need a large enough k where $2^{-k}\sum|c_i| <1$ to conclude $M_k = 0$. Essentially, a fixed dilation does not support nonzero remainder that decays faster than polynomial rate near zero. $\square$

I feel like this is a mix between the two official solutions which gives a clearer picture but meh.

Now back to our concern -- why can't we apply Fourier or Mellin transform and dig the frequency out of it? Usually technicalities like that would be left to readers but this is so fundamental that we shall get our hands dirty. 

The major hurdle is the lack of guarantee that a smooth real function admits a Fourier transform (and converges over where it's useful). However, functions in the big space do not necessarily admit the transform does not mean we can't apply the transforms in the finite dimensional space $V$.

Lemma 4 is very powerful as it allows us to get a well-tamed remainder to work with. Adopt the notation $f = P+h$ and assume $h(x) = O(x^{\alpha})$.

The polynomial bound at both far end and at zero means the Mellin transform 
$\mathcal{M}[h](s) = H(s) = \int ^{\infty}_0 h(x)x^{s-1}dx$
converges absolutely in the half plane $\textrm{Re}\,s < -\alpha$. It now suffices to look at the half plane.

The frequency doubling operator is easily transformed as $\mathcal{M}[T^jh](s) = 2^{-js}H(s)$, so $p(2^{-s})H(s) = 0$. Now pick a real number $\sigma < -\alpha$ that is on the left of all roots of $p$, i.e., $2^{-\sigma} > |z|$ for all $p(z) = 0$. Then $H(s) = 0$ on the vertical line $s = \sigma + i\zeta$ for real $\zeta$. 

By writing $x = e^t$ we have 
$H(\sigma + i\zeta) = \int _{\mathbb{R}} e^{\sigma t}h(e^t) e^{i\zeta t}dt = \int _{\mathbb{R}}u(t)e^{i\zeta t}dt$,
which we retrieved Fourier transform of some sort!

Absolute convergence says $u\in L^1(\mathbb{R})$ meaning this is a valid Fourier transformation on $u$. Since the transform is zero (not even distributional) we conclude that $u = 0$ and hence $h(x) = 0$ for $x>0$. Flip $h$ to repeat the argument then $h(x) = 0$ for $x<0$ then $h(0) = 0$ by continuity.

What differs from the my proposed solution is that we avoided the log-polynomial factors by limiting the reminder, and the technicalities allowed us to apply transformation where it had not been possible.

Something even more fascinating is how fascinatingly close our final trick of constructing a Fourier transform $\int _{\mathbb{R}}u(t)e^{i\zeta t}dt = 0$ to force zero looks almost the same as the lemma. They are of course child of two face, the discrete and continuous version of frequency filtering. There are so much more to talk about this, but I am afraid that such topic alone would be longer than this whole series and too hard to fit even the upper end of the taste here.

(Question - we used smoothness implicitly. Where did we use that? In particular, why do we need smoothness of infinite order? If you get stuck check the elementary solutions again.)

This question is one of my favourite in the sense it is a massive collaboration between advanced analysis and linear algebra but also allow specific branches like Fourier transform to kick in. There are so many perspectives you can look into, but each one of them is a generalization of growth rate tracing. I would even call this problem a major motivation to write this whole seminar.

7. Food for thoughts

Problems well worth mentioning but I was too lazy to fill them after all the work.

Problem 1. (Putnam 2022 B6) Find all functions $f:\mathbb{R}^+\to \mathbb{R}^+$ such that $f(xf(y)) + f(yf(x)) = 1 + f(x+y)$ for all $x,y>0$.

Problem 2. (SMMC 2021 B3) Find all real functions satifying the following two properties:
i) The Riemann integral $\int^b_a f(t)dt$ is well-defined for real $a<b$.
ii) For all real $x$ and positive integer $n$, $f(x) = \frac{n}{2}\int ^{x+1/n}_{x-1/n}f(t)dt$ holds.

Problem 3. (Putnam 2010 A6) Let $f:[0,\infty)\to \mathbb{R}$ be a strictly decreasing continuous function with $\lim _{x\to \infty}f(x) = 0$. Prove that $\int ^{\infty}_0 \frac{f(x)-f(x+1)}{f(x)}dx$ diverges.

Ask yourself -- what's the growth rate -- when you are stuck!!

Monday, 21 September 2026

New domain for the blog (2026 ver.)

如果早知道當初 .io 會變貴,我的網名才不會改成io結尾呢。
開玩笑。
網名拿掉io之後跟任何正常字搭不上關係,說貴也就一頓飯的程度。

2026的我:
啊啊啊啊.io太貴了啊啊啊啊。
這些錢與其拿去給英屬印度洋群島亂花還不如讓我多生成幾張庫里斯QwQ……

嗯,總之我換網域了:


看看若干年後我會不會後悔吧,嘻嘻

*

I decided that I shall use .com instead of feeding the greedy .io and I hope to use this for much longer time. Sorry for the inconvenience!

Sunday, 20 September 2026

Capturing growth rate in problem solving (2): functions and sequences

3. Functional equations

Of course it has to be functional equations as they beg for growth rate checking. Among those degree checking is probably the most common approach.

Example 7. Find all real polynomials $P(x)$ satisfying $(x-8)P(2x) = 8(x-1)P(x)$.

Suppose the leading term is $a_nx^n$ equating the $x^{n+1}$ term gives $2^na_n = 8a_n$ so $n = 3$, and the polynomial has to be cubic.

Simple substitution shows $P(2)=P(4)=P(8)=0$. Why do we find these roots? It starts from $P(1)$ and doubling using the formula. Since $P$ is cubic we have the general solution $P(x) = c(x-2)(x-4)(x-8)$. Note that it also includes the special solution $f=0$.

Frequency alteration usually strong hint degree chasing.

Example 8. (IMO 2004 Q2) Find all real polynomials $f$ such that $f(a-b)+f(b-c)+f(c-a) = 2f(a+b+c)$ for any reals $a,b,c$ satisfying $ab+bc+ca=0$.

By linearity it suffices to check the monomial $x^n$ only (exercise). One also shows that only even power works, with $x^2$ and $x^4$ working by substitution (and that $x^6$ doesn't for those curious). It is clear that we just need to find a bound for the degree.

It is not obvious to find examples fulfilling $ab+bc+ca=0$, but for IMO you have all the time to do that. One approach is the tuple of $(a,b,c) = t(6,3,-2)$ giving $f(3t)+f(5t)+f(8t)=2f(7t)$. Since $3^n+5^n+8^n=2\cdot 7^n$ is false when $n\geq 5$ our job is done.

One even better tuple would be $(a,b,c) = t(1-\sqrt{3}, 1, 1+\sqrt{3})$. That gives $2P(-\sqrt{3}t)+P(2\sqrt{3}t) = 2P(3t)$ and the equation $2(-\sqrt{3})^n+(2\sqrt{3})^n = 2\cdot 3^n$ which has no odd solution with LHS strictly larger than RHS when $n \geq 6$. (Solution credit to AoPS)

In all, the solution would be the family $f(x) = Ax^2+Bx^4$.

More often than not, degree chasing is hidden within the details...

Example 9. (IMO 1992 Q2) Find all real functions satisfying $f(x^2+f(y)) = y + f(x)^2$ for all real $x,y$.

Putting $x=0$ we get $f(f(y)) = y + f(0)^2$ yelling two facts: $f$ is surjective and very, very likely just linear with linear coefficient 1.

With our educated guess it takes minimal effort to conclude that $f$ is also injective and $f(0) = 0$ (which saves us the trouble), hence $f(x) = x$ is the only solution.

Let's ramp up and look at Putnam problems.

Example 10. (Putnam 2016 B5) Find all functions $f:(1,\infty)\to (1,\infty)$ with the following property: if $x,y\in (1, \infty)$ with $x^2\leq y \leq x^3$ then $f(x)^2 \leq f(y) \leq f(x)^3$.

The gap between $x^2$ and $x^3$ could be large at first glance but if you think the other way round, for each $y$ you have a range of $x$ bounding $f(y)$, some of which can be arbitrarily close.

Say, I can choose $x = \sqrt{y}-\varepsilon$ or $x = \sqrt[3]{y}+\varepsilon$ then we know $f(\sqrt{y}-\varepsilon)^2 \leq f(y) \leq f(\sqrt[3]{y}+\varepsilon)^3$. When $\varepsilon$ is small enough it actually provides a rigid structure. For what function does $f(x^{1/n})^n \sim f(x)$ holds? It has to be the monomial $x^c$, and we are going to prove it.

It's very hard to work with the given condition, but with some smart transformation we can apply a neat trick. Let $g(x) = \ln f(e^x)$. Then for $2\leq \frac{y}{x} \leq 3$ we have $2\leq \frac{g(y)}{g(x)} \leq 3$ which is a way nicer representation of powers.

The neat trick is to notice that the powers $2^a3^b$ for integer $a,b$ is dense over positive reals. That says, we can turn our idea on ridigity into formal statement.

For positive integers $a,b,c,d$ so that $2^a3^{-b}\leq x \leq 3^c2^{-d}$ we have $g(2^a3^{-b}) \geq 2^a3^{-b}g(1)$ and $g(3^c2^{-d}) \leq 3^c2^{-d}g(1)$. Note that $g$ has positive real domain.

By choosing close enough exponent we can show monotonicity by contradiction, then for any $y$ we can pack $2^a3^{-b}\leq y \leq 3^c2^{-d}$ for positive integers $a,b,c,d$ to force $g(y) = yg(1)$, recovering $f(x) = x^{g(1)}$. 

I showed full solution here to appreciate the beauty of Putnam solutions. There is another question I wanted to show (2022 B6) but that is such a beast and has less emphasize over growth rate but that question is definitely worth a check.

4. Sequences

Well...the technique would not be useful if it's solely for a highly artifical genre of problems. I want to show a wider variety of problems where such mindset is actually useful.

Let's start with something simpler.

Example 11. (IMO 2014 P1) Let $a_0 < a_1 < a_2 < ...$ be sequence of increasing positive integers. Prove that there exists unique $n\geq 1$ such that $a_n < n^{-1}(a_0+\ldots+a_n) \leq a_{n+1}$.

There are many different solutions, but let's think it in the growth rate way. Two sequences -- the main sequence $(a_n)$ and the average sequence. It is clear that the main sequence is growing quicker, so we only need to prove the existence of the crossing point.

Define difference term $d_n = a_n-a_{n-1}$, sum $S_n = a_0+\ldots+a_n$ and the difference between the two sequences $\Delta _n = S_n/n-a_n$. The main condition becomes $0<\Delta _n \leq d_{n+1}$ and the recurrence becomes $\Delta _{n+1} = \frac{n}{n+1}(\Delta _n - d_{n+1})$.

Note that this is an increasing sequence of positive integers, meaning $d_n\geq 1$, so $(\Delta _n)$ is destined to cross zero and never turning back. We just need to check two more technicalities: $\Delta _1 >0$ and that once $0<\Delta _n \leq d_n$ the next term $\Delta_{n+1}$ is non-positive, and both are easy.

Example 12. (Putnam 1966 A3) Let $a_1 \in (0,1)$ and define the sequence by $a_{n+1} = a_n(1-a_n)$. Prove that $\lim _{n\to \infty}na_n = 1$.

We are asked to prove that $a_n$ behave like $1/n$, or that $1/a_n$ behaves linearly. This isn't hard as $\frac{1}{a_{n+1}} = \frac{1}{a_n(1-a_n)} = \frac{1}{a_n} + 1 + a_n +...$.

That gives the difference $1/a_{n+1}-1/a_n = 1/(1-a_n)$. From here either you showoff by using Stolz-Cesàro, or use the fact that $a_n\to 0$ to estimate the limit $\lim na_n$.

Example 13. (Putnam 2020 A3) Let $a_0 = \pi/2$ and $a_{n+1} = \sin a_n$. Determine if $\sum a_n^2$ converges.

Note that this is not the usual sin sequence (which would probably be dense) because $\sin x \leq x$ which lead to a decay. What is the growth rate of $a_n$? Should the series $\sum a_n^2$ to just diverge the sensible growth rate is $n^{-1/2}$, which turned out to be the case. We can prove this by the estimation $\sin x \geq x - x^3/6$.

In fact, this order is tight heuristically although the error term isn't exactly $O(n^{-2})$. When $a_{n+1}^2-a_n^2$ doesn't work, what if we try $a_{n+1}^{-2}-a_n^{-2}$? That yields a direct use of a theorem that we already used above...and I leave that as exercise.

Both examples utilizes the reciprocal trick. In a more general heuristic, if we have predicted the rate then we can apply the right transformation where increments is constant which gives a strong characterization or bound.

Mathematically, for $a_{n+1} = a_n - ca_n^p + o(a^p_n)$ for $c>0, p>1$ then the transformation $b_n = a_n^{-(p-1)}$ gives $b_{n+1}-b_n \sim c(p-1)$ and so $a_n \sim (c(p-1)n)^{-1/(p-1)}$.

~~

One great example on question of this type (sequence involving growth rate) would be 2006 B6 which the answer is crystal clear (you just consider the continuous case with difference turned into differential equation). It is so delicate in details, yet much simpler with an answer in mind.

Some may say these sequence type problems are merely discrete functions that are not much different from continuous functions. Let us look at problems that do not associate with a particular function yet the same mindset remains useful.

(Cont.)

Saturday, 12 September 2026

Capturing growth rate in problem solving (1): motivation

This is a sketch of seminar I will deliver to undergraduate problem solvers, and I feel like this is a good chance to fill more advanced math content into my blog. I like going deep in small concepts, but bigger projects like this also brings much fun.

I will split into three parts as follows.

I. Motivation
II. Contest problems
III. More problems and generalization

Enjoy :)

*

1. Introduction

Why growth rate? We start with a very simple example.

Example 1. Consider the limit $\lim _{x\to \infty}\frac{2x^2-3x-2}{x^2+7x+100} = 2$.

Before the access to the $\varepsilon - \delta$ approach, students are taught to bound the function by simpler fractions with clear limit then apply squeezing. It's a torturing analytical workout and students often get lost in the process. 

Everyone knows clearly the answer is $2/1 = 2$, the problem is how do we reach there. Then we ask the question: why is that clear in the first place?

The answer is the order -- both are of order $x^2$. Once we divide by the order we have the limit

$\frac{2+o(1)}{1+o(1)} \to \frac{2}{1} = 2$.

The essence is to identify the order work around it. And the important takeaway of the seminar as to be laid below -- is to show that such thinking is widely applicable, far more than simple real analysis exercise.

To this end, let us recall a simple but important lemma, the polynomial dominance:

Lemma 1. Suppose $f(x), g(x)$ are polynomials of order $m,n$ with $m>n$, then there exists $L>0$ such that $|f(x)|>|g(x)|$ for all $|x|>L$. Call $f$ dominates $g$ (over applicable domain).

Proof. Exercise(!).

Every polynomial order is a distinct growth rate with a strict order. Actually the same applies to non-integer power although that is not our main focus today.

Think about a smooth function $f \in \mathbb{R}$. For each point $x\in \mathbb{R}$ we have a converging Taylor expansion $f(c) = \sum a_{n,c}(x-c)^n$ then we know $f(x)\approx a_m(x-c)^m$ around $x=c$ where $a_m$ is the lowest non-zero coefficient. The same applies when you look into the complex space where the poles and zeros are decided by the leading terms (both in positive negative powers) in the Laurent series.

Of course, one may extend the complex plane to the Riemann sphere (or by projective geometry in words of some geometers), one my find that infinity and behavior at infinity is merely zeros and poles at another point!

There are for sure more growth order than just polynomial. Exponential and log grwoth are the most typical one. Their growth rate is characterized by whatever quicker and slower than polynomial. 

Lemma 2. Let $a>1$. Then the exponential function $a^x$ dominates any polynomial and the log function $\log _a x$ is dominated by any (non-constant) polynomial over $x >0$.

Exponential curve is even more common in branches of mathematics, in particular on anything involving time. Since exponential functions of larger base also dominates that of lower base -- we actually get to know the growth rate by bounding such function.

Suppose we have an (eventually) increasing function on our hand. The growth rate has to be one of those -- log, polynomial, exponential (of course, sub-log and hyperexponential as well), and these growth rates are mutually exclusive. Then within the same category each subclasses -- bases of exponentials or order of polynomials (well logs of different bases are constant multiples of each other) -- are mutually exclusive in the sense that one always dominates another and forms a total order in it. Knowing the growth rate pretty much locks the behavior, and in some problems the functions themselves.

The aim of the seminar, is to appreciate how common growth order becomes a crucial piece of information that can be used, or acts as a motivation towards the solution of a problem. 

To start with, we lay down even more examples where undergraduate results uses growth rate as a centerpiece of the argument.

2. Classic examples

Let us look at some relatively accessible examples. We emphasize that the growth rate often provide crucial information.

First, we look at more results in complex analysis.

Example 2. (Liouville) Suppose $f$ is an entire function with $|f(z)|\leq M|z|^k$ for some $M>0$ and non-negative integer $k$, then $f$ is a polynomial of degree at most $k$.

Proof. Cauchy's integral formula.

In other words, any non-polynomial entire function admits a path $\gamma$ such that $|f(\gamma(t))|$ is not bounded by polynomials.

Example 3. (Rouché) Let $f,g$ be holomorphic over closed region $K$. If $|f(z)|>|g(z)|$ for all $z\in \partial K$ then $f$ and $f+g$ has equal number of zeros in $K$.

Proof. Argument principle. Note that it also extends to poles counting (!).

The inequality $|f(z)|>|g(z)|$ does not necessarily means $g$ is dominated by $f$ even just over $K$ but classic examples involve a higher degree polynomial and a lower degree polynomial, showing how the dominating term dictates the behavior of the function.

Example 4. (Ergodic Markov chain) Denote the correspondant matrix of the chain $A$, then $A$ has eigenvalue $\lambda _1 = 1 \geq |\lambda _2| \geq |\lambda _3|\ldots$. Furthermore, the error term (the $L_{\infty}$ distance) from the terminal state $v_{\infty}$ has decay rate dominated by the second eigenvalue. More precisely for $v_k$ the $k$-th state vector satisfies $\| v_k-v_{\infty}\|_{\infty} = O(|\lambda _2|^k)$.

Proof. Perron-Frobenius. This second eigenvalue characterization is quite widely used in fields like harmonic analysis. Note that we implicitly infer the chain to be finite reversible so that we don't run into non-trivial Jordan blocks.

Example 5. (Liouville approximation) If $x$ is an irrational algebraic number of order $n$ then there exists constant $c_x>0$ such that $|x-\frac{p}{q}| > c_xq^{-n}$ for all integers $p,q$ with $q>0$.

Proof. Elementary number theory. I feel like I have been applying tricks avoiding proofs too much here. Perhaps left as exercise.

This time, the function or concern is the approximability -- we don't necessarily need a continuous function to talk about growth rate. The result basically says approximability is bounded below be the decaying factor $q^{-n}$.

We conclude our introduction with a heavyweight classic.

Example 6. (PNT) $\pi (x) \sim x/\ln x$.

Proof. By wikipedia...joking but seriously the analysis details are so delicate despite the simple idea.

This result is not proving by capturing the growth rate. Instead, the result itself is about growth rate and it becomes the pillar of analytical number theory, one among the most important branch in modern mathematics. Much of the problems here starts from a counting function that turns out to be much, much more fundamental...like the Riemann hypothesis which is also a growth rate problem in nature.

But don't worry, we are not here trying to prove anything big. We just demonstrated how common such concept is, and we try to equip such mindset to facilitate problem solving.

(Cont.)

Wednesday, 2 September 2026

世界觀設定與Meta演化論(下): 現實歷史中的遺留代碼

一代版本一代神,這是任何遊戲的真理。從WoW和FF的版本改動、到DOTA和格鬥遊戲的微調、到遊戲卡的官方禁卡表,每一個改動都可以顛覆現有環境,把舊有的meta毀掉,把新的meta給捧出來。

這種改meta的版本改動在現實有可能發生嗎?

如果說<<設定>>中四個時代對應的是古巴比倫-維多利亞時代-近未來-???的話,這個時間尺度顯然超出了現實人類史的可比較範圍。所以如果答案是有的話,我們需要把格局拉大一點才行。

比如地球的生物演化史。

這當然不是我個人的見解,把地球環境分割成不同的版本這件事某Youtuber早就在天天做了。更妙的是地球Online的版本除了有不斷變化的meta以外,還能天然滿足「刪檔重置」這個要素。想想也是,這種毀天滅地的事也有大自然(literally)能幹得出來了。隨便舉幾個大版本的例子好了:

比如說太古宙的時期,姑且叫2.x版本吧。這是一個充滿甲烷和氨氣的硬核世界,可存活地帶僅限火山口或深海熱泉這些新手村,出了其他地方就是死。當時沒有氧氣,所以meta非常明確:靠化學能生活的厭氧生物。本來如果這些玩家們一直相安無事,沒想到藍綠菌點出了光合作用這破壞遊戲平衡的技能,最終導致大氧化事件這個版本更新。

從大氧化事件開始又經過好幾個大版本,來到石炭紀和二疊紀先叫版本5.x好了。此時大氣環境跟之前截然不同,來到了30%以上的歷史新高。伴隨高熱和潮濕環境下地球被蕨類植物覆蓋。這時的meta是巨大化--只要氧氣夠濃,普通的呼吸也能撐起巨大的身軀。這次在陸上稱霸的竟然是昆蟲,蠍子和蜻蜓可以長至接近一米。恐龍的祖先也已經出現,但這時牠們也只是比巨蟲大一點點的大蜥蜴罷了。如果說終結2.x的改版是玩家自己造成的話,那這次的改版就是官方親自動手了。2.5億年前西伯利亞超級火山一聲巨響,各類族群紛紛被踢下線再也沒法登入。

在經典的5.x恐龍版本被官方再次出手用隕石強制終結後,地球再次迎來6.x的全新版本。氣候劇烈波動,在溫暖和冰凍之間來回擺盪,中間還有新仙女木時期等限時活動。本來就淘汰得八八九九的大型動物和冷血動物紛紛投降,本來只能在底層苟活的哺乳動物終於迎來了出頭天!當中有一支名為人類的種族特別突出,遊戲正以前所未有的速度挑戰官方的拔線容忍度……

然後我們悲哀地發現,所謂大版本的變動都是極漫長時間裡的偶然事件,再不濟是太古宙那種幾億年來的厚積薄發。就算所謂的小版本更新也不是開玩笑的。比如說……寒武紀實裝眼睛、盤古大陸拆分伺服器、還有顯花植物的實裝,這些改變不會徹底改變環境,卻把生態位換了一遍。我們人類迄今所預見的氣候變化,充其量只是引發一次限時活動吧。

……以上。

當我們把虛構作品的設定迭代和現實作出比較時,我們會發現小說的改版往往是徹底砍掉重練,但地球Online的更新雖然會強制更新地圖和氣候,生命卻保留了上一版的「遺留代碼」。環境是全新的,但生命卻是帶著上一個版本的破爛程式碼,硬著頭皮去適應新的伺服器規則。鯨魚的身體裡至今還藏著退化的後腿骨,那是曾經陸地哺乳類Meta的殘留;人類的胚胎早期會出現腮裂,DNA裡甚至塞滿了遠古病毒留下來的基因碎片。大自然的演化從來不會從零開始寫代碼,遇到Bug就打個補丁,只要程式還能跑(能繁衍)就千萬別去動它,結果就是造就了我們這些充滿冗餘代碼的「縫合怪」。

這種靠著「基因打補丁」來適應環境的龜速演化,直到人類這個開掛玩家崛起才發生了質變。我們不再等待官方幾百萬年一次的版本更新,而是利用智慧、工具與社會結構,自己手動切換文明的Meta。

如果你把時間尺度縮短,把目光聚焦在人類文明史上,你會驚訝地發現,現實社會的演變邏輯居然跟<<設定>>中從「餘燼神代」到「魔藥時代」的演化如出一轍!

在人類文明的早期,地球就像是一個剛開服、資源滿溢的伺服器。那是一個現實版的「餘燼神代」。當時的核心資源獲取門檻極低:河床裡隨便就能撿到高純度的狗頭金,砍伐幾十人合抱的千年神木來建宮殿,在近海就能輕易捕殺巨大的鯨魚取油。這些「低垂的果實」就像是神代的高純度「火種」,古人不需要懂什麼高深的化學萃取或重工業,只要運氣好撿到火種,就能輕易建立起龐大的財富、奇蹟與帝國。

但正如同小說中神明對火種的揮霍,人類對這些不可再生的原始資源也進行了不可逆的消耗。復活島的島民把棕櫚樹砍光後發現自己再也找不到安居之所,明朝的初代紫禁城焚毀後再也找不到同等級的千年古木重建;為了燃油把鯨魚海豹屠光、為了口腹之慾把曾經沿海隨便就能撿到的鮑魚生蠔吃成珍品。當高純度的火種被揮霍一空,人們悲哀地發現已經沒有純粹的「火種」可以白嫖了,於是我們被迫進入了現實版的「魔藥時代」。

因為失去了最直觀的資源,現代人類只能透過極度複雜的「配方」——也就是現代科學與重工業——去榨取環境中純度極低的殘渣。當河水再也濾不出黃金,我們只能用幾十噸的貧礦經過重重程序煉出幾克黃金;當「白色黃金」鳥糞枯竭,我們只能尋找化學合成氨的道路。力量不再是撿來就用的原石,而是被少數掌握了技術專利(配方)與生產資料的財閥與國家所壟斷。這不就是徹頭徹尾的魔藥時代社會結構嗎?至於為何現代社會走出了魔藥時代那種維多利亞式社會結構,那又是另一回事了。

總之,把這個當成一種世界觀吧。用設定的方式去理解世界,雖然不可避免地會將複雜的現實給降維簡化——畢竟真正的現實充滿了隨機的Bug、無法預測的變量,以及無數拖泥帶水的舊代碼殘留,它遠比任何精妙的小說設定都要混亂且不講道理。但這並不妨礙我們用這種框架去拆解歷史。正是透過尋找每個時代的「版本答案」與「底層邏輯」,我們才能從龐雜的歷史碎片中,看清資源、權力與生存環境是如何互相博弈與重塑的。或許,當我們習慣了用看透Meta更迭的視角去審視這個世界,在面對未來科技爆發或環境劇變的下一次「版本更新」時,我們也能提早猜出,誰會是被官方強制封號的舊時代霸主,而誰又會是下一個適應全新機制的版本之子。

等等,站在2026的我們不已經身處一個「版本更新」之中嗎XD

題外話,火紋的萬紫千紅要出了。劇透中時值1449年,但這並非帝國曆,而且幾乎肯定是IS有意誤導。這是一個除了緣毛以外還有其他「神明」的時代,有地底科技(還有美式居合)的時代。這是地表、屬於她的子民(還是說這片和風花主大陸Fodlan相鄰的大陸其實是原住民?)的年代嗎?既然已經有地底科技,也就說地底人已經被趕到地底了?如果還能在外的大陸冒頭,那這打壓其實也就還好?看建築和(地底科技以外的)似乎比風花還要原始,加上大人形態的綠毛和種種線索,可以確定是風花前的時代嗎?真的可以嗎?還是說一切都是IS的煙霧彈?

Sunday, 16 August 2026

16/8/2026: DDR/開竅/野球人生

在座各位讀者,你們有試過突然開竅是怎樣的嗎?

你一定會說平常訓練丟骰子都只拿到3顆骰子,丟出來都是123點,旁邊的天才隨便練都丟5顆起跳而且保底四點,練一次抵你練兩三次。當你突然從前者變成後者,那就是突然開竅。

看不明白嗎?沒關係,我們換一個講法。

大概幾年前我就說過我讀譜的速度變慢了,從boost 450掉到boost 420。那時還是A20+的時代,大致可以排除升級至DDR WORLD導致的問題,更大機會是因為換了一台慣用機台。在升級到DDR WORLD後我的速度又掉了一次,從420-430掉到了410-420。這次倒沒有甚麼大問題,在DDR WORLD的constant設定下很多東西本來就要重新調較。在constant 620ms下其實410和420看到的東西幾乎是一樣的。

然後我這個月又瘋狂slow起來,是那種很誇張的1:5快慢比,更改offset也沒有用那種。我很頑固地用410又打了一個月,每次都陷入一直改設定→想太多→打不好→提早力竭的死循環。以前打BOOST 450的時候也不是沒試過用420-430熱身,但明明我用BOOST 410用很久了也沒事啊?

在其他玩家建議下我在調低速度和放棄BOOST之間還是選了前者。

這時、奇跡出現了。

隨便就能在lv13打AA+、熟的穩定980;16不用出力就能打AA,還不小心全連了POSSESSION (20th mix)。至於我在努力推進的lv18全F1更是怎樣打怎樣有:東方妖々夢 ULTIMATE MEDLEY、Lose Your Sense、Over the Period……

這狀態甚至不是一天半天的事,已經連續幾次打成這樣了。也不像是單純睡眠充足、或者是排隊所以可以喘息。只要我調到390開始,一切就會好起來。

我還發現我不是不能打410。只要從390開始熱身,在lv18上打400-410打慢歌還會fast,說明這。

到底是我變得不得不從更低速開始熱身,還是這是我刷了這麼久lv18 F1厚積薄發帶來的副作用?不知道,但我知道現在打就對了。以這個狀態把絕大部分F1給刷下來,然後就能打足神和開刷lv19了(望

簡單寫一個尚未F1的lv18難度表好了。以我主觀的F1難度為准:

18.95:量子の海のリントヴルム、EYE OF THE HEAVEN、New Millennium
三首都是齊集交互、高物量、高速、發狂連跳等所有困難元素的終極BOSS,剛好正是我心中唯三升格lv19(如果把lv19標準下放的話)的可能候補。

18.90:逆月、伐折羅-vajra-、VOLAQUAS、Lightspeed、Endymion、Re:RHYZE
這些沒被當成18.95只因為上面那三首太變態而已。Lightspeed和Re:RHYZE就算用關東打法也很麻煩。

18.85:The World Ends Now、DIGITALIZER、鳳 (Five Flares Mix)、Paranoia Evolution、灼熱 Pt.2 Long Train Running、Lachryma《Re:Queen’M》
當中好幾首都是實際打過,並且F1能堅持到最後才被尾殺的。

18.80<:The Least 100sec、Meteor
找到願意讓我蹭這兩首的比較重要。

我想、等我把C類清掉一半後維持這狀態就能開刷lv19了吧?

*

ptt大約每五年就會迎來一個席捲全網的頁遊(雖然ptt現在也沒多少人了)。十年前是ACGN-stock,五年前是我桐,這次是棒球人生模擬器,這是從高中時代開始養成棒球手直到退役的故事。

跟[我們的甲子園]和[高校野球]不同,這是更為完整,更有血有肉的模擬器。每個人的潛力上限都不同,遇上的隨機事件不同,際遇也會不同。在高中後可以投入選秀、在大學磨練或者挑戰旅外。往上可以挑戰進入大聯盟名人堂、做某支隊伍的神主牌或者帶領國家隊的隊魂,往下也有可能成為在二軍掙扎,甚至連業餘也混不下去的平凡人。

當中最真實的無疑是那個種子選取器。遊戲並不是完全隨機的,而是按著種子生成隨機事件,同樣種子加上同樣選擇--就是同樣的人生。每個種子就是一個獨立的棒球員人生。有些東西比如球員潛力,在決定種子那刻已經固定了,就像你一出生某些上限就已經決定好一樣。

大家都是差不多的訓練量,為甚麼就有人進步就是比較快?大家都是投一休六每年100局,為甚麼他可以投十年我三年就開TJ?受傷也就算了,為甚麼他能當薪水小倫,而我偏偏是在合同年變成痛痛人?

然後你又發現不只人生的種種不順遠不止於此。保守訓練還能踩雷,被國家隊隊強行徵召操傷,打封閉還要失敗--怎樣才算是一個成功的棒球生涯呢?以前覺得就算沒成為明星也要當個打好打滿的everyday player才算成功,現在看來光是可以兌現潛力上限打好打滿已經難能可貴了。

玩到後來大家開始互相分享好的種子。要進入大檸檬名人堂當然就要講究中式網文的一步先、步步先。最好高一骰出5個6拿到天才、高三要三大比賽冠軍、進大學一年解鎖學院派,順便解鎖自律狂和鐵人buff;21歲升上大聯盟表白要一次成功,國家隊徵招我最好每次拿冠軍包括12強和WBC還不能受傷--

但現實中,有可能嗎?

事實就是可能幾億個種子才有一個這樣的人生,對應現實就是幾億個棒球選手才有這樣一個歷史級球星。更多是大聯盟邊緣人和日職韓職球員,更多更多是中職打工仔,更多更多更多是連選秀也選不上,業餘也沒人要的體育差生。他們有努力過嗎?大部分應該是有的。但很可惜,通向更高殿堂的大門從來沒有為他們打開過。

如此真實的遊戲也難怪不只鄉民,就連球員、教練、球評、所有棒球圈的人也都玩到一份了。大量的二創改版,還有台灣人生模擬器等等。不過我只能說在這個人人都能寫遊戲的年代,成為始創者實在十分難得。

*

回頭看,我這樣打DDR突然開竅大概就是[正常應對]中了個+2控制(本季狀態火燙x1)吧?喔這個[正常應對]成功率是50%,因為我不是天才。

誰不想升上[世界],誰不想[真.足神]通關呢?現實就是有人兩年通關,有人打到頭髮都白了還摸不到lv19。嘛,我勉強算摸到lv19就是。

總之這個模擬器真的非常值得所有棒球迷試試,短短十分鐘讓你領悟人生百態。

Wednesday, 12 August 2026

世界觀設定與Meta演化論(上): 虛構沙盤裡的社會重塑

作為一個設定控,理解一個世界觀的底層根源永遠是個迷人的課題。這個世界為甚麼會變成這個樣子呢?當你投入一個設定時,有沒有想過這個設定會不會動搖大世界樣式的根源呢?縱向地看的話這個世界是怎樣才會演變成這樣子呢?或者說,甚麼才是合理的演變呢?

以現實作品舉例的話不妨思考一下一九八四的世界線。誠然,在奧威爾動筆的時候二戰才剛結束,就算讓他看到鐵幕的開始,推導出之後的歷史並非易事。先假設一九八四真的發生在二戰延續的世界線,亦即二戰完結的一九四五年的三十九年後(亦即時間點本身是沒有被修改的話),世界有沒有可能透過一系列事件演變成書中一九八四的樣子呢?如果有,書中所述的步驟,比如侵略和核戰,是充分而必需的嗎?有沒有其他更關鍵的必經步驟?

咳咳、扯遠了。

現實的歷史相當複雜、充滿人性和不確定性。討論這類問題總是免不了往細節裡問,每次找出破綻又只能對框架作出修補,框架越來越臃腫,卻沒法歸納出甚麼有用的東西來。同樣的問題,在小說世界就簡單多了。比如說一九八四的世界觀,如果對地理邊界的合理性問太多的話,人家一句就能堵死你:你怎樣知道老大哥給你的資訊是真確的呢?

這篇雜談其實源自我無聊點開的網文<<我的設定在你之上>>,一本寫得不錯的縫合怪,至少玩弄設定這點很吸引我。

簡單來說,主角的面板外掛讓他有能力穿梭不同「版本」。所謂版本就是世界的環境設定--我稱之為meta,而版本和版本之間也許是滄海桑田、也許是甚麼大災變、抑或是長年累月的自然演化,總之meta完全不同,所能用的能力體系也不同。在掛逼加持下主角可以在同一時間點裡切換不同meta下收集下來的能力。每個版本的能力都有其獨到之處,舊世代的數值碾壓、新世代的科技碾壓,每次總有一款適合對手,想不到吧?

小說目前已披露的「版本」有四個。餘燼神代、魔藥時代、超能時代、空洞時代。

「餘燼神代」是一個神明與凡人爭奪極度稀缺「火種」的末法時期,力量強大卻不可再生,社會被圈養成神權割據的死水;「魔藥時代」則是神代遺留的力量殘渣化為了需要配方調製的「序列」,造就了由秘密組織和王權壟斷晉升資源的寡頭社會;到了「超能時代」,神秘學被徹底否定,力量變成了由中央大數據分配的「算力」超能力,世界化為被財閥極權管控的賽博龐克都市;最後是算力網路崩潰後的「空洞時代」,天空被撕裂並降下災厄,倖存者只能在廢土上收集「以太」,靠著與舊時代殘存意識簽訂契約,在傭兵公會的體系下拼死求生。

之所以說縫合怪,是因為這些時代的設定都是致敬(?)其他作品而來的。餘燼來自魂系設定、魔藥的序列來自詭秘之主、超能時代頂點是Lv.5的話當然是魔禁。至於空洞時代,那不是尊貴的米遊嗎?

但是致敬歸致敬,我更在意的是裡面呈現的科技水平和社會結構--這些都是致敬對象不會重點描寫的。為甚麼這種meta就要配搭這個社會結構,而不會是其他的呢?

我把這個問題丟給了AI:我把魔藥世代的設定寫了出來,讓它把科技水平和社會結構猜出來,回答的正是維多利亞式貴族寡頭與蒸汽龐克社會,與書中的設定幾乎一致!當然其中一個解釋是,AI早就知道致敬對象。如果致敬對象的設定是正解的話,那麼按著致敬對象的設定來回答就好了。所以為甚麼致敬對象的設定是合理的呢?

背後道理並不難懂:社會是按著需求而建立運作的。在神權社會裡,最重要的是進行宗教儀式的場所;在祭祀社會裡,最重要的是祭壇;在農耕社會裡,最重要的是水源。像玩天際線(Skyline)那樣把一個個設施按需求拼上去,那這裡離實際社會也就不遠了。同樣道理,在異世界就更簡單,因為有了壓倒性的基本需求--力量。超凡力量的獲取門檻與稀缺性,直接決定了該時代的社會階級與經濟分配模式。

以小說中的魔藥時代為例子好了。AI給出的答案是甚麼呢?維多利亞時代、蒸氣龐克、社會秘黨,而這恰好是書中的設定。魔藥的序列被大勢力壟斷(或者可以說壟斷序列者成了大勢力)、其中一條序列甚至由王室持有。外面表面上神代消亡人類以理性自力更生而出現工業化和工業社會,然而暗地裡卻到處都是非自然力量。畢竟魔藥體系的核心在於「配方」與「超凡材料」,這就等同於早期的專利與知識產權壟斷。既然上位者掌握了技術知識和材料產地,他們自然會築起高牆形成階級,嚴格限制晉升途徑來維持剝削。這種表面文明優雅、暗地裡階級森嚴且充滿血腥積累的氛圍,完美契合了掌控生產資料來統治下層的經濟學邏輯。

又或者餘燼神代應該是怎樣的呢?在這個時代,「火種」是不可再生的絕對資源。當資源極度稀缺且無法透過生產增加時,社會就必然是一場零和博弈。高高在上的神明不可能把珍貴的火種分給世人。反而用火種的力量操弄著世人。他們只能像螻蟻一樣聚集在神明的領域之內,依靠神明無意識的「賜福與詛咒」苟延殘喘。外面的世界是致死的廢土,貿易與交流幾乎不存在,科技樹也因為過度依賴神力而徹底畸形。這造就了極度中心化、沒有流動性的神權社會,靠著火種強行維持著,直到薪火徹底耗盡。當然,小說裡並未完整敘述這個時代的結局,所以最後一句是我猜的。

超能時代雖然參考的是魔禁,但正常人動腦想一想就知道這種設定下社會必然會比魔禁中殘酷得多。……(解釋時代設定)。當然,你也可以說魔禁是超能者的視角,超能者在一座服務超能者的都市裡吃香不是必然的嗎?

空洞時代就……咳咳,玩過米遊的應該已經都明白了。

當然,像<<設定>>這種直接刪檔重置的玩法並不常見。首先是要有橫跨幾個世代的敘事,那幾乎已經將作品鎖死在穿越、面板等設定上。穿越不同世界的萬界系統很多,在同一世界、還要是同一條時間線上反覆橫跳則幾乎沒有。祖父悖論要怎樣解決?把種種問題用設定解決,剩下的唯一解差不多就是這部小說。

再說「力量」根源本身的改變就是非常反常的一件事。比較常見的原因是「力量」的根源徹底耗盡,像是餘燼神代失去火種的神明,又或者現實中失去錫供應的青銅文明,又或者「力量」隨科技進步進行範式轉移。在人和傳承(至少在可傳承的東西,比如非壟斷性的科技、知識上)沒有斷絕下,光是要阻止主流「力量」進步就不容易了,何況是徹底推翻舊有「力量」系統呢?

比如說哈利的世界。

我已經在很多地方講過哈利世界的漏洞了。比如課綱和考試,比如巫師界對人類的理解。最近我又在聊天模型中問出了一個。你有想過英國至少住了多少巫師才能維持書中的描述嗎?羅琳隨口說的是三千人,但你看看斜角巷和活米村那麼多高度細分的專賣店,雖然有學生這個穩定的需求,但真的每家店都是靠學生才不會餓死嗎?學校每年這麼多新生,需要多少人口才有這個出生率啊?書裡有提過為魔法部工作的公務員至少一千人,要多大人口才能養活一千個公務員?如果這些還不夠,那你想想英國和愛爾蘭有13支職業魁地奇球隊,是不是要有百萬之數的人口才能支撐呢?嘴硬一點可以說冰島也有足球聯賽啊。可是冰島能養起五萬人的大球場(魁地奇世界盃)嗎?

……羅琳承認過她的數學不怎樣,但差兩個零也太過份了吧。

如果不是修仙那樣靈(魔)力衰竭,那又會是甚麼原因呢?

回到正題,哈利的世界正是「力量」沒有進步的世界觀--甚至有時還在退步。如果要從書中尋找答案的話,這個問題其實比人口問題簡單得多。

簡單來說,meta一直在變,卻始終沒有讓魔法一直進步的動力。或者說,那些魔法的進步的方向一直都不是我們想象中的進步。

霍格華茲創校的四巨頭世代,那是一個蠻荒拓荒期。當時沒有《保密法》,巫師與麻瓜混居,生存環境極端且狂野。這個時代主打天生神力,沒有標準化的魔法,全靠天才巫師自己手搓出來。到底要多大的人口基數、怎麼樣的運氣才能讓巫師界生出四巨頭還能聚在一起把霍格華茲給生出來呢?現在已經無證可考了。

到了中間沒有詳細描寫的空白世代,麻瓜的獵巫運動達到巔峰,迫使魔法界在1692年簽署了《保密法》並全面轉入地下。到底是怎樣無能的政府才會把保密的責任全數下放到每一個巫師身上呢?反正這逼使巫師的行為模式徹底改變,從此從人類眼中消失。那些抹除和無痕伸展(先不算九又四分三月台,那明顯是十九世紀才有的)的魔法,是這個時期發展出來的,還是以前就有了?如果是前者,那這也算是個進步吧。

之後是一二戰時期的黑魔王世代。東躲西藏的巫師們實力有進步了嗎?看起來是沒有。當保密法和保密手段變得成熟,巫師們不再需要因為麻瓜而擔驚受怕。但當黑魔王這種真正的危機到來時,一般的巫師就像待宰羔羊一樣,潰敗的魔法部就是最好的證明。說好的拿五條O才能當的傲羅呢?天才們的的確很強,但那很明顯沒有成體系地傳承下去。

最後是哈利波特身處的和平世代。OWLs好像從十九世紀就有了(話雖如此,這考試總不能比普魯士的軍事化教育早吧),但其教育水平是否一直在往下走呢?至少我們看到黑魔化防禦術被閹割得不成模樣,惡作劇商店賣帶有(OWLs程度的)鐵甲咒的防具居然成了暢銷品,去去武器走居然成了標準的攻擊咒語。就算不算哈利六七年級時學校被黑魔王爪牙亂搞的時代,這群巫師和這個體制似乎就沒想過要進步。

吃的找家庭小精靈,住可以霸佔人類房子,一切都能用魔法解決。沒錯他們還是會有慾望也有需求(比如躲避人類),但是能發明一個魔法能解決的東西絕不會去發明一個體系,最好弄個天才出來把一切擺平就好。從初代四巨頭、到實施保密法的巫師(不覺得這幫人其實是隱形英雄嗎?)、到對抗黑魔王的老鄧、再到「那個男孩」。凡事依賴個人而缺乏體系,這才是一個主流「力量」停滯不前的根源。

每次想到這裡都不禁為這些巫師們捏一把汗,這些巫師真的有能力跟持續進步的人類(以保密法的形式)共存嗎?真的每一次都有人出來救世嗎?如果保密法失效,在2026年的網絡世界下還有可能把魔法的痕跡抹除嗎?這才是巫師界的未來的大危機,至於妙麗弄的那個甚麼家庭小精靈保護協會還是算了吧。

講了兩個虛構的例子,那現實又有沒有可能用這種框架去理解呢?

答案當然是有……

(續)

Wednesday, 22 July 2026

IMO 2026 quick thoughts

Wow hello it's time for another year of IMO review. I even didn't realize it is mid-July instead of early August somehow with all the workload in reality where solving math problem is actually more of a relief for me.

As usual, this is a quick attempt on the questions with my thoughts and insights where I didn't try them under formal time limit. I would also feed them to mainstream AI models as a cross section study of AI capabilities. Let's go!

Q1. Wow a question on lcm and gcd! One of my favourite lemma, as I wrote a whole entry about it in 2013, is $mn = [m,n](m,n)$ where $[m,n]$ stands for lcm and $(m,n)$ stands for gcd.

We are replacing $m,n$ by $(m,n)$ and $[m,n]/(m,n)$ this time, so not quite the application of that lemma yet the direction is clear -- the way the question is formulated screamed for specific approaches.

When they asked for finite termination, this is asking for a metric that is strictly monotone upon the operation. Is there any metric better than products of all numbers?

Notice that every operation either (1) turns a number into 1 (when $(m,n)=1$) or (2) decreases the product (when $(m,n)>1$). Since the number count and the product are both finite this is done.

They also asked for the final number standing is fixed given the starting parameters. This is to find an invariant. To this end we look at the prime powers of each number -- i.e. we look at $v_p()$ of the 2026 numbers. We are sending $v_p(m), v_p(n)$ to $\min (v_p(m), v_p(n))$ and $\max (v_p(m), v_p(n)) - \min (v_p(m), v_p(n))$. But wait! This is the operation in Euclidean algorithm! And what's invariant? The gcd across all prime exponents.

When there is one number above 1 left, it must take all the prime powers (the prime powers of all the rest are zero -- think about how Euclidean algorithm works a step further to turn the two numbers $(m,n)$ and zero). Since the question does not ask to determine $M$ we don't even need to write it down! (But you can write it down right?)

Q2. Oh coordinate geometry. Not my taste and probably won't be able to brute force it under exam environment. When I checked on AoPS, it seems like this question is relatively hard as Q2 and have deep relation to projective geometry? Interesting.

Q3. While Q2 is surprisingly difficult (average score of 1.6), Q3 is actually relatively easy. In fact, one very rare combinatorics Q3/6 that I solved without trying hard.

It boils down to the essence of equilibrium where it is reached only when you make a move that opponent's move is indifferent. In this case, indifference means even by not cutting the rod. Technically you can't do that given the rules but it is always possible to cut infinitesimally small portions.

First a simple note: when the cut is done, it is clear that player A will always take the 1st, 3rd, 5th... largest portions and B will take the rest. We are therefore minmaxing the total length of the odd ordered pieces.

Consider the case $n=1$ where player A makes a cut then player B makes a cut. Where would player A choose? The answer is to cut the rod into 1/3 and 2/3 and the claim is A will be claiming 2/3 of the rod.

Case 1: If player B cuts on the 1/3 portion then A can simply take the 2/3 portion and done.

Case 2: If player B cuts on the 2/3 portion into $x, 2/3-x$ then either portion will be at least 1/3. Take the larger one so that B will take 1/3, and you will take the rest for 2/3.

The key is to realize that "cutting the 1/3 portion" has the same minmax result compared to "cutting the 2/3 portion". For case 2 above A is guaranteed to have 2/3, no more, no less. It sounds like A would get more than 2/3 in case 1 but not really if B cuts an infinitesimally small piece on the 1/3 portion leaving A with $2/3 + \varepsilon$ in total. It is easy to show that 1/3 is the sweet spot making the two cases indifferent.

Can we generalize this? Absolutely. The first cut would divide the rod into $\alpha < 1-\alpha$ such that if you don't break the $1-\alpha$ portion A will take the whole portion, with $1-\alpha$ being the part A can always get regardless of B's choice. 

With the first cut being made, this forces B's first cut to land on the $1-\alpha$ portion -- and the best he can do is to split the portion into 2 equal parts or else A would claim the larger part. How can we guarantee that he won't make multiple cuts on this portion? Again, indifference -- divide the smaller portion in a way such that making multiple cuts on the already halved $1-\alpha$ portion is equivalent to making cuts on smaller portions. A can simply make a $(1-\alpha)/2$ portion out of the $\alpha$ portion which is as much as the halved $(1-\alpha)$ portion, and so on. That gives a geometric series of division, foul proof and hence optimal.

Do you realize the solution already? Once you write down the partition the rest of the proof is easy case by case argument.

One question I really like, probably very much to my taste although students think otherwise as reflected by the average score of 0.58.

Q4. Another game? 

At first I was thinking about countability argument like is there a way to iterate all rational angle, but if they asks for the largest possible set of angle why not just $\mathbb{Q}[\pi]$? Why not $\mathbb{Q}[\pi, \sqrt{2}]$? ...then you know this isn't the way to go.

It reduces to something very simple: it only works it integral divisions of 180 degrees where you can divide the angle $k \theta$ into lower multiples of $\theta$ and there is no stopping it. If the initial triangle contain no such angle you can create that by dividing the 180 degree angle. On the other hand it is easy to prove that if a triangle contains no integral multiple of $\theta$ then there is no move that grants you a win within a single move, then induction does the job. Do you realize what is needed for the inductive step? External angle of triangle! This is such cute geometry trick when you don't have to summon huge block of geometry argument like Q2.

Q5. Functional inequality! Always nice to have them. The more complicated it looks, the more important it is to find the right substitution to draw useful information out of it. The given relation involves variable with and without passing into the function $f$, so the natural approach is to substitute $(x,y)\mapsto (f(x),x)$ so find the relation between $x$ and $f(x)$: $f(f(x)) = 2f(x) - x$.

A linear relation!

That screams a simple linear function being the sole answer, although there is a lot to do before we can reach that conclusion. The fact that recurred linear function is also linear with the sequence of $f^n$ being arithmetic themselves is also covered in another entry, this time dating back to 2011 (probably not worthy for a read but yeah). 

By induction we have $f^n(x) = nf(x) - (n-1)x$, showing that $f(x)\geq x$ for all $x$ by taking $x\to \infty$. The rest is probably the hardest -- to argue $f(x)-x = g(x)$ is constant by equating $g(x)$ and $g(y)$ using the given inequality involving quadratic mean. Perhaps I can do it given the time, but I didn't spend too much time thinking into it.

Q6. A NT Q6 is always the ultimate thriller like 1988 Q6, and this one is of no difference. What an elegant formulation.

At first, I even struggle to come up with a single example where the sequence isn't simple arithmetic. I was trying larger numbers with no luck, before I finally ran into $a_1 = 15$. Then I ran into another problem: isn't it strictly arithmetic after a while, and if that was true the demanded statement is false right?!?

Well no. The sequence starting from 15 looks like 15, 18, 20, 24, 30, 36, 40, 42, 45, 48,... with an increment of 30 and period 8.

Think it this way. $a_2-a_1$ must be the smallest prime factor of $a_1$ denoted $p$. The sequence of $(a_1 + (n-1)p)$ clearly satisfies the gcd requirement, and it only fails only when an increment below $p$ somehow satisfies the gcd requirement as well. For example when $a_1 =15$ you know $a_2 = a_1+3$, but somehow an increment of 2 worked for $a_3$ breaking the pattern. It is clear that it's the small prime that matters.

That is, we claim that only prime factors at most $a_1$ would matter. Something is wrong if you have an increment that is bigger the products of these smaller primes. With that you can argue periodicity by finiteness (of course we need to be careful to show that $a_1$ is mod-repeated in the sequence).

The details aren't precisely straightforward -- of course that should be the case considering how this is Q6 not Q3 or Q5. I don't think I can write a complete proof under exam environment either. The average score of 0.38 defends the family of NT Q6 on the harder end among boss questions, although I feel like 1 or 2 points based on nature of increments shouldn't be hard.

*

How do I feel about the questions this year? It feels strangely familiar.

If we ignore the geometry question, every single question points to something familiar on my side directly applicable towards the intended solution. Writing the full proof is one thing, but being able to analyze the question without wasting time on wrong directions would be a huge bless after all. Although there's also a bad side for being familiar with the questions -- I can't really evaluate the difficulty of these questions accurately. With that being said, average score shows that the difficulty this year is surely not out of the blue.

As for AI models, it is not surprising that GPT 5.6 Sol has managed to solve it all. When someone like me managed to get all directions correct easily it is madness to expect difficulty for leading models to do the same.

...leading thinking models only, of course.

It is still far away for mid level LLMs to perform up to that level. GPT Terra had problem from Q3, Grok can't even solve Q1 properly. Our poor follow Gemini Pro 3.1 managed to solve Q1-4 properly, completely messed up Q5 but solved Q6 with minor mistakes.

It has been a spectacular year of AI progress, so much to the point it becomes fearsome. But for now, there is no better timing to start embrace the use of AI to relief us from the calculation. It has been shown that once we get the direction right, AI can do the rest for us.

Let's meet again in 2027.

Thursday, 16 July 2026

被青梅竹馬抓來(略) (17):戴手套也是為了銷毀文件

Character design: @kuonyuu, Illust: @BAZA commissioned by forretrio. Skeb
Editing and re-posting are prohibited // 無断転載、無断使用禁止です

「早安,庫里斯大人。你有三封新信件。」管家把早餐的餐車推了進來。早餐被放到餐桌中央,他把蓋子掀開露出蒸氣騰騰的早餐全餐。他把報紙和信件放到早餐旁邊伸手就能碰到的地方後便彎腰示意後倒退出房間,沒有多餘的動作。

他一邊吃著豐富的早餐一邊看著報紙。報紙上沒有甚麼跟他有關的東西,全是甚麼地區抓了個飛賊、甚麼食材最近價格飛漲、當然還有最近王都地下城的冒險進展。在他以前理解裡,一邊吃早餐一邊看報紙就算得上是富足生活了。當然,這種觀念在他進學園以後就被擊得粉碎。

他的老爸勉強有個爵位,但也就領點象徵性的月俸,跟貴族完全扯不上關係。小時候的生活品質只能算是個中產。雖然請得起佣人下廚,但他從少就被教導不要浪費食物,煮食的份量都是按食量來的。與之相比,眼前的早餐可就豐盛多了。他是能堪堪把這盤早餐吃完,但換成女性或者老人的話肯定就會浪費掉,而廚房裡肯定還預備了額外的份量。那些有錢人的家裡還會讓廚房一直煮東西,這樣才能讓主人可以隨時吃到新鮮出爐的東西。那得消耗多少食物啊?

所謂的報紙也只是滿足自以為看了就能知道天下事的人的慾望罷了,有價值的資訊從來不會在這種地方出現。「千面鴉」好像有提供類似報紙的定期服務,但收費大概不是正常人能負擔的吧。比起有用的資訊報紙更像是一種娛樂,看到街頭巷尾那誰遭到不幸的事可以讓讀者笑上幾下,看到哪個權貴的秘聞更能讓讀者以為他們就是這圈子的人。就算明知道這種感受如此虛偽,報紙還是成了社會的必讀之物。

一邊胡思亂想一邊把餐盤清空,他放下報紙拿起信件一封一封閱讀。

第一封信來自阿蕾西亞。她問候了庫里斯,又問他適應了沒有。她隻字不提測驗和出來的成績,但是在這個時間來信已經說明了一切。他能想象對方就坐在房間的沙發,用淡淡的語氣問著同一問題。那麼這封信更像是個給他講故事的機會,又或者是邀請她吃飯的機會。他要好好想一下怎樣回信,現在他先把這封信珍重的疊好放進抽屜裡面。

第二封來自魔法師協會,協會邀請庫里斯前去演講。這是學園的魔法科老師能享受的諸多禮遇之一。協會雖然勢力龐大,但魔法科老師掌握了未來苗子的人脈,是協會不能不交好的對象。加上酒會和晚宴,這算是高規格的社交活動了。

第三封來自校園裡的另一位老師,史特勞斯老師。她負責管理學生社團,這次寫信來問庫里斯能有沒有興趣看看兩個在存廢邊緣的社團。雖然實際管理學生組織的是學生會,但如果由學生會找上老師的話不太合適,由史特勞斯老師出面正好。

平日根本不會有人寫信給庫里斯。他的上司也就是學園長、或者他的學生直接找上他就可以,根本不需要寫信。這樣一口氣來三封信的原因是甚麼呢?

他覺得是他的試用期合格了。這種合格與否甚至不需要學園長出來點頭,測驗的成績所有人都打聽到了,他們紛紛作出反應。阿蕾西亞是適時的問候,而協會和史特勞斯老師則是把他看成一位正式的魔法科老師了。有了更大的權力,當然也要肩負更多的責任,這兩封信都是衝著這樣的想法來的。

協會邀請的演講題目並沒有限制,但他知道魔法師協會是個很講求純度的地方,所以演講要以理論為主。這個純度不是血統的純度,而是他們看重純粹的魔法理論而非其應用。講求應用的魔法師不是去當冒險者就是從事各種魔法相關工作、而綜合實力最強大的人都跑到宮庭魔法師體系裡了,剩下的人自然以理論派為大宗。

可是叫他講魔法理論不是自曝其短嗎?教一年級學生們是一件事,要講出能滿足老學究們的內容則是另一回事。當然就算自己開宗名義說自己對理論沒興趣他們也不會說甚麼,但是能交好的大勢力少了一個還是有點可惜。

史特勞斯老師的請求就簡單得多了。只要擺出老師的架子,大不了雙手一攤自己也不願意掛名,這件事就算完了對吧?

其實庫里斯最希望的是把探索地下城的大型計劃交上去,但現在還不是時候。整個計劃只有最後一步,也就是挑戰有危險性的地下城這一步要得到額外批准,在此之前的訓練和在地下城的練習聽上去都不會超出過往的難度--當然實際上可能是另一回事。學生們先前表現出極佳的學習能力,但他們有能力「安全地」挑戰地下城嗎?這是他接下來要證明的目標。

他看著窗邊的景色。早上的晨光照在學園上特別柔和,連帶著空氣中的風元素也給他一種生機勃發的感覺。今天又是新的一天,是他真正被認可為老師的第一天。他將在這裡從處理雜務開始重新出發。

*

學園鼓勵學生成立興趣社團,但不代表隨便成立一個都能拿到官方的認可。沒有官方身分的話就不能用社團名義利用學園的資源,不能租用設施、不能找老師掛名、當然也不會拿到經費。這個身份由學生會續年批核,要持續拿到許可就要拿出實績來。新社團的門檻相對高,但往後的審查沒那麼嚴格,不少社團實際上不怎樣活躍。學生會每年都會挑出不過審的社團並傳到史特勞斯老師手上。史特勞斯老師找上相近領域的老師。如果有老師願意掛名拉一把的話社團就能續命下去,如果沒人願意出手的話這社團就要被除名了。

史特勞斯老師給他挑的是……「荒廢地下城研究會」和「飛行興趣小組」。

「……怎麼有這麼奇怪的社團啊,」庫里斯想了很久擠出了簡短的嘀咕:「我以前都沒聽過這種東西。」

「庫里斯老師你沒有聽過也是正常的,」史特勞斯笑道:「這是現在學園長上來才有的政策。就算社團聽上去十分奇怪,只要有實績就沒問題。當然這兩家就是這方面過不了關才被送到你我手上。」

史特勞斯把紀錄翻給他看,飛行興趣小組的年度活動報告跟廢話沒兩樣。活動大部分都是例行聚會,也沒有詳細寫上聚會都幹了甚麼。比較好認出來的是書本讀後分享……只是書本的水平有點慘。作為研究魔法的社團,居然也沒有像樣的魔法練習。

「這個社團前身是風魔法研究小組,三年前才改成這樣。交上來的活動紀錄乏善可陳,學生會沒直接除名就算不錯了。」

他瞳孔猛地一縮,風魔法研究小組?不就是那個當年被小圈子霸佔,拒絕他進去的那個小組嗎?他也不知道這社團以前過得怎樣,大概是學生畢業後沒人要繼承才變成這樣的吧。

「然後這是荒廢地下城研究會的。」史特勞斯遞上另一份資料,他們的活動報告也沒好到哪去。雖然有固定的每週聚會,但活動方面還是以情報交流和心得分享為主。很可惜最重要的地下城相關活動數量為零,更別提跟荒廢地下城相關的探險活動。正因如此學生會判定其欠缺實績而放在除名名單之上。

庫里斯:「這也叫欠缺實績嗎?」

「沒辦法啊,學生會定下的唯一標準就是實績。如果沒有跟名字對應的實績能拿出手的話是很難通過審查的。比如說,冒險科的學生不少都在『地下城學會』裡面,他們每年都舉辦冒險活動,也會請畢業生來演講。學生會多半會說如果只是對地下城有興趣的話為何不參加地下城學會而要另立門戶呢?」

他拿著兩邊的報告互相比對。如果是他的學生找上他詢問這兩方面的事情的話他二話不說就會出手幫忙,但這兩個不過是熱情不足的社團罷了。史特勞斯以為他非得二選一不可連忙補充道:「庫里斯老師不別勉強自己選一個,就算兩個都不救或者兩個都救也沒有問題,他們不會知道是你下的決定。」

是嗎?一股私心閃過,他很快就把風魔法研究小組給判了個死刑:「我就不看了。有夢想是不錯,可是夢想太遙遠也沒有實際的行動,留著也沒有意思。」

史特勞斯附和:「的確,是我也會直接當掉他們。不過庫里斯老師你是這方面的專家,這方面會比我更清楚。那老師是怎樣看荒廢地下城研究會的呢?」

大概是想要補償剛才的私心他點頭道:「我去看一下吧。」

「太好了!那庫里斯老師可以在兩星期內下決定除名還是續留嗎?」

「沒問題。」

他拿著資料離開的時候不禁在想,憑甚麼他就要看一下這個荒廢地下城研究會呢?兩邊的報告都差不多爛,同樣被學生會刷下來。論實績,兩邊大概也拿不出任何實績。他想帶自己學生去地下城都要搗鼓許久,怎可能放任學生去危險的荒廢地下城呢?不要說是他,任何老師都不會批准這種活動。還有研究飛行是甚麼鬼?現在的風魔法跟飛行是兩回事不是常識嗎?

他只知道他拒絕飛行興趣小組的原因不是因為報告寫得不好,單純就是因為他的私心罷了。也許這算是他的小小特權吧。

……

飛行興趣小組被除名了。他們毫無掙扎,大概是把報告交上去那一刻就知道結局了吧。學生會給他們幾天時間把專屬活動室裡重要東西拿走,但這幾天下來活動室完封不動,彷彿這裡所有東西都跟他們無關一樣。

庫里斯以尋找有用資料的名義要到了鑰匙,現在就在飛行興趣小組的前.活動室裡面。這裡沒有甚麼佈置,單純地只有一長桌、一堆椅子和一整列儲物櫃而已。儲物櫃的鎖已經全數解開,他現在可以不受阻攔地調閱裡面已經無主的東西。

他首先想看的是飛行興趣小組--或者以前的風魔法研究小組,到底真的有在研究魔法的嗎?如果他們真的有努力過只是拿不出成績來,他可能會後悔自己這樣下決定。

幸運的是他翻不出太多有關利用飛行研的資料。他只翻了淺淺一層,上面標示的社團名稱已經從飛行研究小組變回風魔法研究小組,說明改組後他們就是單純在混,被除名了一點也不可惜。他繼續翻下去,發現風魔法研究小組以前真的有在認真研究,文件上的內容超出了教學的範圍。儲物櫃的陰暗角落裡還有一些舊書,雖然蒙了塵但書本的狀態還不錯,就是好一段日子沒人碰過了。那些都是正經的魔法書籍,不是圖書館藏,大概是舊書店撿來的。

這風魔法研究小組看上去還可以,至少真的有在研究東西。可是如果以前的風魔法研究小組是正經的研究向社團的話,為何當初要搞小圈子、為何又要拒絕他呢?

他繼續翻查剩下這些留下來的文件。某屆某社員留下來沒寫完的作業(沒交上去嗎?)、毫無吸引力的宣傳單張(當然宣傳的是風魔法研究小組)、簡潔得可怕的帳目表等等。最吸引他注意的是用文件夾特別裝起來的歷屆成員名單。

名單沒有很厚。這個社團加上前身也就十幾年左右,每年也沒招到多少社員。庫里斯默默翻到他二年級那一年,上面果然有幾個他在意的名字。他凝視名單很久,臉上看不到一點表情,最後他把整疊成員名單摺起放進衣服裡。他把裝著名單的文件夾撕成可以握在拳頭裡的大小。心念一動,拳頭裡一股火炎把文件夾化為灰燼卻沒有傷他分毫;拳頭張開的時候就剩一捧灰了,一陣清風把灰燼吹出窗外。他重覆這個動作好幾次,直到裝有成員名單的文件夾徹底消失為止。

這……也算是他的小小特權吧?

完成了這事心情大好的他輕快地向魔法科教室上方的社團活動室走去,今天也是「荒廢地下城研究會」每週聚會的日子。

在掛著「荒廢地下城研究會」牌子的門上叩了幾下的庫里斯推門而入。裡面大概有十人,其中一人臉色變得煞白快要昏倒的樣子,他肯定就是這研究會的會長了--如果一個跟你社團無關的老師在學年這個時候突然走進來,很可能就只有一個原因。

一把熟悉的聲音立刻怪叫起來:「庫里斯老師你怎麼會在這裡?!?」
「…………艾基爾同學你怎麼會在這裡?!?」

***

再次提醒大家,好孩子不要玩火。如果要在緊閉的拳頭裡面召喚火炎,請務必配戴有足夠魔防的高級手套。可以的話不要學他那樣耍帥用短手套,手套應該至少及腕才能完整保護施法者的安全。

這次也沒有甚麼要補充的,簡短講兩點就好了。

說到報紙,最有名的描述當數英國政治喜劇Yes Minister:每份報紙都有自己的取向,有甚麼樣的讀者就會有甚麼樣的報紙。我有想過,這個世界裡有報紙嗎?答案當然是有的,報紙這東西在古羅馬就有了。但是這個世界會有讓讀者自以為在管治國家的報紙嗎?會有真正給治理國家的讀者的報紙嗎?這兩個我不知道,但我知道這世界肯定會有足夠下流的小報。

說到社團的審核機制,我總覺得這種規制下的社團更像一家公司了?把審核的機制簡化,設立清晰的指標也就是與社團相關的實績,自然讓社團進行淘汰但不用增加審核的工作量。

這種機制會引發社團之間的惡性競爭嗎?在我的設定下是不會。

我引用一個實驗好了:有一個著名的實驗是把老鼠放在資源充足的箱子裡養著。不用勞動就有水和食物,老鼠也樂得把精力放在生殖上。直到鼠口突破臨界那一刻,天堂變成了地獄。即使食物和水還是充足,但空間不足的牠們還是開始了慘烈的撕殺。剩下來的老鼠又回到那個無憂無慮的狀態,直到下次突破臨界點的時候。

在這個名為學園的養殖箱裡,社團資源充足又不會增殖,惡性競爭當然不會出現。廢話,這是王國最重要的學園耶,各種資源還不是手到拿來?以空間為例,除了魔法科教室上方的社團活動室以外,學園還有一座學生活動大樓之類的東西,各種社團活動室都塞在裡面了。學園還預留了一堆備舉辦茶會、舞會等社交活動的地方,根本不愁學生們不夠用。只要能分到的資源夠多,淘汰下來的都是像上面那兩家廢到不行的社團,真能拿出成績的社團不用擔心被裁。

至於躺平的社團當然有,上面那兩個在除名以前大概也混了好幾年了吧。那為甚麼大家一起擺爛的情況不會出現呢?大家都知道自己只能在這養殖箱裡留個三年,三年以後就要靠自己了。退一步來說,人類總是渴求進步的。在需求層次裡面自我實現就在金字塔的頂端,是人類需求的極緻。既然環境許可,為甚麼不試一試呢?

最後是插圖時間。這次是BAZA老師的插圖!本來我已經看膩了「發動魔法」的姿勢,但老師在其他委託畫這個姿勢又打動了我,所以才有了這張插圖。到底庫里斯的魔法會以何種形式呈現,文中似乎還沒有定論,但在下一章我們或許能窺探一二。只能說いのた老師影響我太多,對庫里斯的構建都成了她筆下的樣子(?)了。

Sunday, 5 July 2026

4/7/2026: 奇蹟之星

時間過得真快,節奏天國的發售來得猝不及防。

當初看介紹的印象是switch 2限定,正在考慮要不要買switch 2的我自然沒有第一時間預購,不過也就晚了半天時間開玩而已。

一邊看世界盃一邊玩,雖然號稱對節拍準繩度要求很高,但對於長期打音遊的人來說也就還好。三場比賽扣去緊張的部分已經足夠我把遊戲打個七七八八了。遊戲入門難度全P,[2]也大概P了一半。

怎麼說呢?這是一款滿足了大家對系列期望的遊戲,但私心下好像又帶點遺憾。

這次新作有30款新的小遊戲加上一堆舊作復刻,加上20首remix,就體量來說本來就是歷代之冠。Remix覆蓋的範圍很廣,從各種電子音樂到流行、外語都有,這方面應該是照顧外國玩家的考量吧。有歌詞的remix大概12首左右,當然有淳君旗下組合的作品,也有像是Ado那樣的驚喜。

因為是刷首通要盡快過關不是每一首音樂都清楚記得,盡管如此還是有幾個讓我印象深刻的小遊戲:


1) 月亮2:看youtube留言感覺是非常個人差的遊戲?兩種節奏的音效提示非常接近,一度讓我懷疑老任是不是把不用看也能過關這個傳統丟掉了。不過從後續彩P和彩P星星的設定就知道老任沒有把這個忘掉,只是讓這關在盲打的情況下特別難而已。感覺把難點全背上就是。音樂是金屬風,但是加上平交道的音效就立刻讓我聯想到音遊裡兩首樂曲:pop'n的西馬込交通曲和DDR的阿波おどり Awaodori やっぱり踊りはやめられない。兩首都是節奏非常明快而且隨著平交道音效變奏的曲子,不知道如果放在節奏天國上又會怎樣呢?另外不得不讚很漂亮的背景設計,呼嘯而過的電車和各種詭異物件成功把萬聖節的氣氛襯托得很好!這是我認為本作最好的小遊戲。

2) 跨欄2:對很多一般玩家來說可能是惡夢般的一關吧。最大的問題是視覺提示變得極快而且難以反應,這時候音效提示的重要性就出來了。還是那一句,音效提示在節奏天國中非常重要,但不是每個玩家在遊玩過程中都會意識到這一點。甚至可以說,只要有音感的話在進入黑夜模式之前純用看的理論上足以在所有關卡拿下perfect並非不可能。所有一個幾乎看不見、逼你用聽的關卡會是一個很好的接駁。可惜的是老任似乎有意隔開一般人能拿下的perfect和更硬核的彩P玩法,因此也沒有特地重用這個關卡,可惜了。

3) 雷雲2:明確為兩朵雲的節奏而寫的一首歌。開頭有點擔心像月亮關卡一樣難以分辨但打下去感覺還可以,尤其連續打雷時都是同一朵雲,這樣就不會搞混了。不過連續打雷時畫面上還會好心顯示剩餘次數會不會太好人了一點?

4) 武士1/2:算是遊戲裡少數較熱血的樂曲了,不過不論是樂曲還是打法上比起前代的武士都更像Karate Man就是,更複雜的節奏通通不見了。

5) 跳繩:新版lockstep,比lockstep更快而且誤差範圍也感覺變少了。如果說lockstep基本上全曲都有視覺提示的話跳繩2有一半時間都是被擋住的。整個遊戲最難關大概就是這個。欸還有說我腿短所以要跳兩次是怎樣?

6) Remix 8的阿斗,非常有她的個人風格。這首直接拉去中二做過Lv.13+甚麼的絕對沒問題,或者說不定很快就有人做節奏天國鬼畜mad呢?(喔對了這首還有彩蛋!)

7) 最後的最後,remix 20。混奏中的混奏,把好大部分的關卡都混進去了,非常合適的的收尾。那個encore的部分讓我想起前作remix 10,老玩家應該會會心微笑吧。

以上。

從上面的評語不難發現我關注的主要就是兩點,歌曲對不對口味以及難度。我的感覺是在這兩方面上老任都朝著面向大眾的方面走。歌曲多了些外語、取材也更廣泛,就是欠了點古風和熱血;難度方面則是缺失了幾種前代本質上比較難的形式,比如多種拍子重疊(比如初代的polyrhythm)、或者記住一節以上拍子(摩艾石像、second contact之類),把這些拿掉的話遊戲就偏單調,以輸入特定短節拍、以及無間斷式打拍子為主。更挑剔一點的話就是完整復刻前代的關卡還是不夠,拔鬍子和忍者都被放到多人模式上,像是Dreams of Our Generation的經典結尾也沒有,不過這一點已經是情懷作崇的問題了。想要情懷、想要難關、想要鬼畜的一律建議回去看MAD。

作為一個闊別15年,創始班底跟沒了差不多的系列來說已經不能要求再多。感謝淳君讓我們二十年前有了這個系列,又在二十年後抱著殘軀大力奔走讓我們能玩到這個續作。

還有天國的聰哥,你又看到了嗎?

Tuesday, 9 June 2026

Thoughts on CTWC2026

Roses are red, violet are blue, and boom tetris for jeff.

That meme was born in 2016, and 10 CTWCs had been held since. Who would have expected such huge change in the world of classic tetris in all these years?

Welcome to my CTWC thoughts, 2026 edition. 

Like before, I am not crazy enough to watch every bit of the stream, but I try to catch the flow and give my comments.

Qualifiers

I talked about the ranking system used last year (+most of the years prior). It was reasonable without much space for foul play. But the new point system implemented this year is MUCH better.

For those who don't know, we are not counting maxouts anymore. We award bonus for those scoring much above maxout. A maxout (1.0xM) are rewarded 1 point, and you get 1 extra point for every extra 100k you scored in the game. With super kill screen intact and how scores parabolic up at higher levels this is extremely rewarding...of course only if you can reach there. 

The elimination match seeks for those who can score high on demand. When we say score high it's not maxout anymore, but to score considerably above maxout utilizing lv29+ plays. The qualification round managed to filter players who can do that by looking for those who can score high, just without extra pressure. It's working so well to the point you can clearly almost see a strict order in tournament competence by seed number.

Elimination phase

As cruel it is, top 32 is a one-sided slaughter against the lower half of the bracket.

The seeding just works so well that top seeders are literally crushing their opponents with zero difficulty. Think of the 8th place at 41 points -- that's 4-4.5 points on average which is about 1.25M. And then 24th has 25 points, so 2.5-3 (considering more games topped out without maxouts) points on average indicating an average of 1.05-1.1M. On top of that, his top score in the qualifer is merely 1.27, the average of what his opponents could score! And that is not even including the 33-48th players who in theory has a slim chance to reach top 32 in a playoff...

Take Dog(5) v. zrobot(28) as example. Dog does not have to take any risk at all. He did it safe and methodologically. In game 2, Zrobot was leading by up to 4 tetrises all the way up to level 34 or so, then zrobat struggled due fatigue, bad sequence or just lose of concentration. Once he topped out Dog has all the levels to override your scores before lv39 even without much tetrises. In the game point, Zrobat took even more risk but luck is on his side so he scored up to 1.35M. Dog just following him from behind, wait him to top out and take the game.

Unfortunately, this is not the only instance where that happened. Zrobat is already kind of the outlier who has the potential to score much higher than his average around that lower bracket with his 1.7M qualifier top score. For the rest, they simply stand no chance. Top players always play up to lv29, no exception, and they know you don't. No matter how bad they did before the two transition, they can always catch up. Oh and what if you managed to survive up to lv39 AND win on tetris rate aka score? Well, good luck doing that three time -- they wouldn't have fallen to the lower bracket had they be able to pull this out in the first place. 

What's worse is the third game. You are trailing 0-2 and you have to take extra risk which is a quick way to crash out. I have to say that Zrobat is arelady one of the most potent player at the lower bracket with qualifier top score 1.7M. There is just nothing to watch for the rest of the top 32 round. There are actually a noticible portion of early topped out games, mostly due to the trailing side taking too much risk.

I talked about a balance in aggression in 2025, and perhaps that was in the context of top player vs top player. For these top 32/48 matches that barely mattered it seems. Do we really need such a large bracket in single elimination, all at BO5? Should we think about other format like Swiss?

The matchup becomes much better starting from top 16. Tetristime (7) vs. Tugi (23) is a great match...wait! Does that mean Tugi defeated upper bracket player? Cobra (7) vs Huff (11) is also a close game. Then Tristop and Scuti is a thriller with classic players and a nail-biting tiebreaker.

Finals

I skipped the rounds in between not only because they shifted to twitch, but also due to timezone. Finals is perhaps the only round I am happy to watch in the middle of my sleep. It seems that Twitch promoted the event by putting them at front page, and that also forces them to boardcast the later rounds in Twitch exclusively.

It's hard to say whether this is good or bad - Twitch is greedy with ads, but they also provide streams at high quality consistently. Decisions are strictly commerical and you can't blame them for that.

This is a final between two well known players -- Dog the two time champion (2) and Meme the founder of rolling technique. This is an ensured historical game without needing to watch the actual game since the two play quite differently. Dog prefers lower stack but has extreme efficiency, while Meme's speed allowed extreme stacking. The different in height also means Dog will trail in lines, and the asynchronization is always fun to watch.

G1 and G2 are extremely similar. Meme built a solid lead with higher stack, higher risk and faster line completion. Dog trailed but not falling behind. In G1 Meme had a tetris right into lv39, but Dog did the same too reverse the game at the last line clear. G2 was the same all the way up to Meme getting a last tetris at line 327, but different this time Dog waited too long for an I-piece at line 329 and topped out.

G3 and G4 are another pair of similar games. Both players topped out 'early' after second transition, yet at considerably high scores (1.2-1.3M) that is enough to beat most players.

G5 is special. Both players were quickly approaching lv39 at *neck and neck* scores. An unfavorable sequence struck Meme combined with the fact that he probably want to take more risk at the final game of the final round of this big tournament, he topped out before lv39 allowing Dog's tripeat.

Can you say Dog performed better than Meme based on performance? Not at all. The results simply fell on luck where the sequence favored Dog's stacking (I doubt if Dog played enough to meet that sequence by the time Meme has it, since Dog was much slower) but not much so towards Meme. They performed almost equally throughout. Both are best of the top players I would say.

Funnily, you often find Meme downstacking from a dangerous position. When you thought the lost in tetris rate must imply that Meme would start falling behind, you look on the side to find Dog struggling the same sequence as well. It seems that regardless of stacking height, they possess efficiency not far from each other after all.

Phew.

I talked about the decline of the game partially due to game format in 2024. Tried to shift my focus back to the game but still talked about how poor the view counts were in 2025. This year I find myself enjoying the game more. I bet many more audiences felt the same (shouts out to the 4800-5000 watching live with me). This is not only because of the qualification format, but also players doing their best. 

Perhaps we don't need to be only entertained by players playing at theoretical precision. Watching them fighting for the grand prize at lightning speed of lv29+ is already enjoyable enough. The rise of DAS format and Jonas cup has been a success drawing more casual or nostalgic players in, leaving CTWC a hyper-tensioned format. The current format is perhaps most of the remaining audiences wanted to see.

Lastly, I hope Alex T could recover from his injury. I talked about fatigue from time to time, but he is likely the first high profile injury. He's been an extreme hypertapper, and you just can't imagine how much stress that would have accumulated in him by hypertapping. He is still young, half of Meme the finalist's age young. Just take a good break, and I am sure he will return stronger.

Other than classic Tetris

Oh by the way the GTM4 championship is back again, along with all the Japanese players. Nice to see GreenTea, CTWC veteran but also the new GTM4 GM King of Rounds again! He just looks joyful as ever.

As for the GTM4 format it's too hard to comment with such small player pool, but the final opening all 5 modes is a very interesting format. I want to see lower rounds hosted in that way too.

We also had the SMB1 tournament at the same venue. It's a pity that the system of merging multiple Marios onto the same screen seemed lagging to much + we don't get to see the any% finals online. Good to see Niftski in good form, and I hope he will be back to SMB1 as soon as the issue around him got lifted.

And that's it! A very fun weekend to watch and write on, and I will see you in 2027.

Wednesday, 27 May 2026

After Dark 4.0 in Win 11: updates, control panel and throttling

Oh man it's time to revisit After Dark again.

For those who don't know, I'm a long time After Dark enthusiast, and I keep looking for ways to preserve this treasure from the past in modern OS. I already wrote 2 entries about installing AD4.0 on modern systems:


When I check those guides again, some of the instructions went into obscurity -- not that the solutions do not work anymore, but the sites containing solutions were gone. Videos on YouTube became private, and the important bat file that replaces the After Dark control panel is no longer accessible.

It's time to update the guide with the assistance of LLMs.

Installation

1) Install with Windows 95 compatibility mode. Do not try with later compatibility like Windows XP sp2/3. 

The reason is simple: AD4 is simply too old to even adapt the NT architecture. If you install using more recent compatibility mode several errors would occur: estimate memory needed is shown at zero, a few files couldn't be written...but there are more deeper problems like registry not properly edited and so on.

2) Move AfterDark.scr from SysWOW64 back to System32.

Same problem occurred when you leave it in SysWOW64.

3) Fix the path to screensaver at HKEY_CURRENT_USER/Control Panel/Desktop.

*

These are the known steps and has never changed since we are still in Windows 11. Two problems remained:

4) How to change the AfterDark screensaver settings?

In my previous guide I attached a YouTube video with a .bat file, but that video went private. Instead I found another video teaching you how to install AD4, with a bat file that looks very similar (with more functions), but I am not sure if this is the exact same author, so use it with caution. (And since this is somewhat accessible on YouTube I am not going to post that old .bat file directly.)

There is also an alternative: someone called rafaga12 made an after dark settings panel compatible with Win 10 and 11, probably worth a try as well.

5) Why is it so CPU demanding as a software 30 years ago?

I have asked a number of developers similar questions under different contexts, but I finally realized I might have asked the wrong person. I should ask OS engineers instead of software developers.

The reason is simple: how CPU works differently 30 years ago and now. Quoting what I got:

Back in the 1990s, multitasking was primitive. Many programs were written with "busy loops"—code that constantly asks the CPU, "Is it time to draw the next frame yet? How about now? Now?"

Then: On a 33MHz processor, that loop took up 100% of the CPU, but the CPU was already "on" and didn't have complex power-saving states.

Now: Modern CPUs are designed to "race to sleep." They want to finish a task in microseconds and then shut down parts of the chip to save power. A 30-year-old screensaver that constantly polls the CPU prevents the processor from entering its C-States (deep sleep modes). Because the CPU can't fully sleep, it stays warm, and the fans stay on.

This is likely the main reason -- the resources needed to render or fit compatibility is minimal when you are using a computer 30 years later. So the solution is also simple: we just need to throttle the program for most of the time. It would still run fine even when it was throttled 95% of the time or even more.

I tried the utility called Battle Encoder Shirase -- it worked so far and the fan went quiet when the screensaver turns on, but I need more time before the conclusion can be made.

***

It's hard to imagine that we are already in the unwelcomed operating system Windows 11 for a few years. So much have happened in these 4 years, the resources shifted, and the appearance of language models greatly helped solving the problem. I'm even looking for more independent projects, like surviving old IDE into 64-bit compatible modern IDE.

Well I hope you would find this useful. If it becomes outdated again don't hesitate to notify me :)