1function nimSG(piles) {
2 // Nim: 一堆 x 个石子的 SG 值为 SG(x) = x
3 return piles.map((p) => p);
4}
5function nimSum(piles) {
6 return piles.reduce((x, p) => x ^ p, 0);
7}
8function isWinning(piles) {
9 return nimSum(piles) !== 0; // 异或和非零 → 必胜态
10}
11function findWinningMove(piles) {
12 const xs = nimSum(piles);
13 if (xs === 0) return null; // 必败态,无必胜策略
14 for (let i = 0; i < piles.length; i++) {
15 const target = piles[i] ^ xs;
16 if (target < piles[i])
17 return { pile: i, take: piles[i] - target };
18 }
19 return null;
20}