/** * @author jiutou * @updateTime 2022/12/02 * @tip 8-3 先拿后放 * @description * 一.挑战模式 1.参数默认值:①堆数:3 堆 ②每堆数量 (5,3,7) 2.参数范围: ①总数:30 ②堆数:固定为 3 ③每堆 起始数量:[0,15] 3.过程记录 二.练习模式 一级:L1、W2 二级:L2、W3 三级:L3、W4 四级:L4、W5 五级:L5、W6 【必胜策略: (a,b,c)满足约束条件 a+b+c∈[1,30], 穷尽所有满足该条件的的一维三元坐标集, 即该游戏的状态集 S。 ①遍历游戏状态集 S,找出所有满足约束条件有且只有1 个坐标非 0 的点,构成第一个胜点集,记为 W1; ②求出 S-W1的差集,对差集中的每一个状态进行游戏规则的遍历,如果某个状态存在一种操作方式进入 W1, 则把所有具有这样属性的状态归结为第一个败点集(实际上就是存在两堆数量相等的状态即为第一个败点集),记为L1; ③接着对状态集 S 与必胜集 W1和必败集 L1的差集 S-W1-L1(为方便描述,我们把它记为:ΔS)中的状态用规则进行遍历, 如果某个状态 ai(i 有可能不唯一)实行任意一合法操作之后,其所得到的状态都属于 L1,则该状态也属于胜点集,记为 W2。 ④计算更新后的ΔS,接着对ΔS 中的状态用规则逐个进行遍历,并筛选出所有存在1 步之内到达 ai的状态,并形成 L2(L=L1+L2,L2是指存在 2 步之内到达最终必胜点的方法的点)。 ⑤重复③和④,直至ΔS 为空。 * */ import { GameAutoWay } from '../common/pojo'; import DeskData8_3 from './data'; export declare class GameData8_3 { typeSet?: number | undefined; desk: number[]; player: number; constructor(player: number, desk?: number[]); } export declare class GameAction8_3 { action: number[]; num: number; constructor(action: number[], num: number); } export default class example8_3 { persistenceData: DeskData8_3; getRiddleByLev(level: number, config: any): GameData8_3; getRiddle(config: number): GameData8_3; checkRiddle(deskData: GameData8_3): number; checkDesk(deskData: GameData8_3): number; checkAction(deskData: GameData8_3, dataAction: GameAction8_3): number; doAction(deskData: GameData8_3, dataAction: GameAction8_3): [flagResult: number, dataResult: GameData8_3]; getActionAuto(deskData: GameData8_3): GameAutoWay; merge(n1: Set, n2: Set): Set; getDesk(n: number): Set; getAllDesk(n: number): void; getAllAction(desk: number[]): GameAction8_3[]; getEmptyAction(desk: number[], action: number[][]): number[]; getSplitAction(n: number): Set; desksort(desk: number[]): number[]; deskToStr(desk: number[]): string; writer(filename: string, lw: Map>): void; }