;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;; http://www.research.att.com/~njas/sequences/A126000.scm.txt;;;; ;;;; 由Antti Karttunen编码(his-firstname.his-surname(-AT-)gmail.com);;;; 2006年12月。(一些部件较旧,例如功能A106485-7);;;; ;;;; 此文件包含计算序列的Scheme-函数;;;; A106485-A106487和A1259xx-A126xxx;;;; 在中找到;;;; 尼尔·斯隆的整数序列在线百科全书(OEIS);;;; 在;;上提供;;;; http://www.research.att.com/~njas/sequences/;;;; ;;;; 此源文件的副本也可从以下网址获得:;;;; http://www.iki.fi/kartturi/matikka/Schemuli/A12600.scm ;;;;;; 此方案代码在公共领域,并且运行(至少);;;;在MIT Scheme Release 7.7.x中,可以找到文档;;;; 和预编译的二进制文件(用于运行的各种操作系统;;;; Intel x86体系结构)在URL:;;;; http://www.swiss.ai.mit.edu/projects/scheme(瑞士)/ ;;;; ;;;; 另请参见http://cgsuite.sourceforge.net/(组合游戏套件);;;; 网址:http://www.ics.uci.edu/~eppstein/cgt/;;;; http://www.gustavus.edu/~wolfe/论文(David wolfe的论文);;;; 参见中给出的定义;;;; “第n天出生的博弈的分配格结构”;;;; W.Fraser、S.Hirshberg和D.Wolfe的论文;;;; ;;;; 如果您有改进、建议、补充,请发送给我们;;;; 通过电子邮件发送给我(主题为:CGT相关序列)和;;;; 我可能会将它们添加到此程序中。或者,您可以发送;;;; 直接向Neil Sloane改进程序;;;; ;;;; 最后编辑于2006年12月19日,作者:Antti Karttunen;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;; 待办事项:;;;; ;;;; 还实现了两个游戏的添加;;;; 使用S表达式,因为A106486代码很快就会变得非常大;;;; 一种可能的表示:()。()=())=游戏零,{|};;;; ((甲、乙、丙)。(X Y Z))=((A B C)X Y Y Z)=游戏{A,B,C|X,Y,Z};;;; (( (() . ()) ) . ()=((())))=游戏{0|}=游戏1;;;; (() . ( (() . ()))=()()(())())=游戏{0}=游戏-1;;;; (( (() . ()) ) . ( (() . ()))=((())())=游戏{0|0}=*;;;; 应明确定义转换回A106486代码;;;; 大概左边和右边的选项在;;;; 某些顺序,尽管相同序列(列表)的顺序不同;;;; 映射到同一组选项;;;; ;;;;如果游戏{A,B,C|X,Y,Z}被表示为;;;; (*A057163(A B C)。(X Y Z));;;; 那么(至少我认为如此)*A057163将诱导;;;; 与A106485相同的游戏否定,以及那些CGT-树;;;; 对称,也会产生对称二叉树(S表达式);;;; 如果左选项和右选项的顺序相同;;;; ;;;; 通过A126012传递结果的第一个版本,即giving;;;; 总和的最小代表值,即A126012(g+h);;;; ;;;; 第二版A126013(A126012(A126011(i)+A126011;;;; 只有用最小代表的指数才能给出一个数组;;;; 其中每行和每列是A001477的置换,因为;;;; 组合对策的加法形成一个组;;;; ;;;; 其次,总和以某种方式“自然膨胀”;;;; (通过将新选项分为适当的级别);;;; 然后保留为非最小代码,不使用任何A126011-A126013;;;; (这将产生巨大的编码。);;;;问题:许多愚蠢的问题;;;;;;还有:游戏的分配格,一个集合数组的示例;;;; 利用指数(即A126011-A126013)进行连接;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;(声明(通常整合));;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;; 用于定义缓存(“记忆”)N->N函数的辅助宏;;;; 等等;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 定义一元缓存的N->anything函数。语法如下;; (定义(函数参数)…)方案的。;; 注意,此函数和其他缓存函数依赖于MIT方案;; 特性,比如向量被初始化为包含f;; 而且f实际上和()是一样的。待更正。;; 添加了这10个。2002年7月,避免分配灾难;; 由于粗心使用缓存的整数函数导致:(定义*MAX-CACHE-SIZE-FOR-DEFINEC*128);;没必要在这里缓存这么多!(定义-语法-定义(语法规则()((定义(名称参数)e0…)(定义名称(letrec((_缓存_(向量#f#f#f#f#f#f#f#f#f#f#f#f#f#f))(姓名(λ(arg)(cond((null?arg)_cache_)((>=arg*最大尺寸-尺寸-定义*)e0。。。)(否则(如果(>=arg(矢量长度_cache_))(设置!_cache_(矢量增长_高速缓存_(最小值*最大尺寸-定义值*(最大值(1+arg)(*2(向量长度_缓存_)))))))(或(vector-ref_cache_arg)(λ(res)(向量集!缓存参数资源)物件)(开始e0…))))) ; 康德))) ; letrec-定义名称) ; letrec公司) ;; (定义名称…))) ;; 句法规则);; 这是为了定义基于一的排列。;; 同时自动存储逆置换(在_invcache_中),;; 可以使用负参数访问。;; 注意,定义的函数与状态密切相关。定义的排列必须是;; 先计算后求逆!;; 是的,这又脏又危险。(定义语法定义erm1(语法规则()((defineperm1(名称arg)e0…)(定义名称(letrec((_缓存_(向量#f#f#f#f#f#f#f#f#f#f#f#f#f#f))(_invcache_(向量#f#f#f#f#f#f#f#f-f#f#f#f));;用于反转。(姓名(λ(arg)(cond((null?arg)_cache_)((等式?#t参数)_invcache_)((<arg 0);;(foo-n)指(foo ^-1 n)(cond((>=(-arg)(向量长度_invcache_))#t)(其他(向量引用_invcache_(-arg)))))((>=arg*最大尺寸-尺寸-定义*)e0。。。)(否则(如果(和(>=arg(矢量长度缓存))(<arg*MAX-CACHE-SIZE-FOR-DEFINEC*))(设置!_缓存_(矢量增长_高速缓存_(最小值*最大尺寸-定义值*(最大值(1+arg)(*2(向量长度_缓存_)))))))(或(vector-ref_cache_arg)(λ(res)(let((invcachesize(向量长度_invcache_)))(如果(<arg*MAX-CACHE-SIZE-FOR-DEFINEC*)(向量集!缓存参数资源));; 处理反向缓存。首先确保有足够的空间:(条件(和(<res*MAX-CACHE-SIZE-FOR-DEFINEC*)(或(>=res invcachesize)(>=arg invc缓存size)))(设置!_invcache_(矢量增长_invcache数据库_;; (最小值*最大尺寸-定义值*(最大值(1+res)(1+(向量长度_缓存_))(*2(向量长度_invcache_)));; )))(格式#t“反向缓存大小:~a->~a。\n”invcachesize(向量长度invcache)));; 如果此结果已存储在invcache中,请检查它是否未针对不同的参数进行缓存:(和(<res*MAX-CACHE-SIZE-FOR-DEFINEC*)(矢量引用缓存资源))=>(lambda(旧n)(如果(不是(=old_n arg))(错误(格式#f定义的函数不是单射的,所以它不能是双射的:f(~a)=f(~a)=~a。\n旧_参数资源))))))(如果(<res*MAX-CACHE-SIZE-FOR-DEFINEC*)(向量集!_invcache_ res参数))物件)) ;; (λ(res)…)(开始e0…))))) ; 康德))) ; letrec-定义名称) ; letrec公司) ;; (定义名称…))) ;; 句法规则);; pred-on-i?应该是N->#f/#t函数,从偏移量0开始。(定义(fun-succ-matching-is1 pred-on-i?)(letrec((_缓存_(向量#f#f#f#f#f#f#f#f#f#f#f#f#f#f))(tvimadur;;我们在这里定义和返回的函数。(λ(n)(条件((非(整数?n))缓存);;只是为了调试。(否则(如果(>=n(向量长度_缓存_))(设置!_缓存_(矢量增长缓存_(最大值(1+n)(*2(向量长度_缓存_))))))(或(vector-ref _cache n)(λ(结果)(向量集!缓存n结果)结果)(秒((=0 n)-1)(否则(让回路((i(1+(tvimadur(-1+n))))(秒((pred_on_i?i)i)(else(循环(1+i)))))));;lambda形式的调用) ;; ) ;; 其他的) ;; 康德) ; λ(n))) ;; letrec-定义。特维马杜尔) ;; letrec公司);; fun_on_i应该是N->N函数,从偏移量0开始,最好是缓存的。(定义(fun-succ-distinacts0 fun_on-i)(letrec((_缓存_(向量#f#f#f#f#f#f#f#f#f#f#f#f#f#f))(belgthor;;我们在这里定义和返回的函数。(λ(n)(条件((非(整数?n))缓存);;只是为了调试。(否则(如果(>=n(向量长度_缓存_))(设置!_缓存_(矢量增长缓存_(最大值(1+n)(*2(向量长度_缓存_))))))(或(vector-ref _cache n)(λ(结果)(向量集!缓存n结果)结果)(条件(<n 1)n)(否则(让外环((i(1+(belgthor(-1+n))))(此处的值(fun _ on-i(1+(比利时(-1+n)))))(让inloop((j(-1+n)));;((j(-1+i));; 如果我们没有找到任何j<i,其中fun_on-i(belgthor(j))应该是belgthos(i),那么。。。(秒((<j 0)i)。。。我们发现了一个新的独特值。(=(fun_on_i(belgthor j))val_here)(outloop(+i 1)(函数_on_i(+i 1)))(其他(inloop(-j 1)))))))) ;; lambda-form的调用) ;; ) ;; 其他的) ;; 康德) ; λ(n))) ;; letrec-定义。比利时) ;; letrec公司);; fun_on_i应该是N->N函数,从偏移量0开始,最好是缓存的。(定义(fun-succ-distinacts-cgts0 fun_on-i)(letrec((_缓存_(向量#f#f#f#f#f#f#f#f#f#f#f#f#f#f))(belgthor;;我们在这里定义和返回的函数。(λ(n)(条件((非(整数?n))缓存);;只是为了调试。(否则(如果(>=n(向量长度_缓存_))(设置!_缓存_(矢量增长缓存_(最大值(1+n)(*2(向量长度_缓存_))))))(或(vector-ref _cache n)(λ(结果)(向量集!缓存n结果)结果)(条件((<n 1)n)(否则(让外环((i(1+(belgthor(-1+n))))(此处的值(fun _ on-i(1+(比利时(-1+n)))))(设inloop((j(-1+n)));;((j(-1+i));; 如果我们没有找到任何j<i,其中fun_on_i(belgthor(j))应该是belgthor(i),那么。。。(秒((<j 0)i)。。。我们发现了一个新的独特值。((=1(A126010bi(fun_on-i(belgthor j))val_here))(outloop(+i 1)(fun_on-i(+i 1))))(其他(inloop(-j 1)))))))) ;; lambda-form的调用) ;; ) ;; 其他的) ;; 康德) ; λ(n))) ;; letrec-定义。比利时) ;; letrec公司);;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;(定义(first_pos_with_funs_val_gte函数n)(let循环((i 0))(如果(>=(fun i)n)i(回路(1+i)))))(定义(first-n-here-funn-is-i1 fun i)(让循环(n 1))(cond((=i(fun n))n)(else(循环(+n 1)))))(定义(num-of-n-where-funn-is-less-than-i-funi)(let循环((n 0))(cond((>=(fun)i)n)(else(循环(+n 1)))))(定义reversed_iota(λ(n)(如果(零?n)(列表)(cons n(反向为iota(-n 1))))))(定义iota(λ(n)(反向!(反向iota n)))(定义(iota0 upto_n)(let循环((n upto_n)(结果(列表)))(cond((zero?n)(cons 0结果))(else(循环(-n 1)(cons n result)))))(定义(首发位置列表pred?)(let循环((lista lista)(i 0))(cond((null?lista)#f)((pred?(汽车列表))i)(else(循环(cdr列表)(1+i)))))(定义(合成列表funlist)(cond((null?funlist)(λ(x)x))(else(lambda(x)((car funlist)((compose-funnlist(cdr funlist))x))))(定义(compose-funs.funlist)(cond((null?funlist)(λ(x)x))(else(lambda(x)((car funlist)((应用compose-funs(cdr-funnist))x))));;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;(定义(获取整数位-函数位-字符串-函数)(λ(x y)(let(尺寸(最大(箱宽x)(箱宽y)))(位字符串->无符号整数(位字符串-FUN(无符号整数->位字符串大小x)(无符号整数->位字符串大小y))))))(定义A003986bi(获取整数位-函数位-字符串-or))(定义A003987bi(获取整数位-函数位-字符串-xor))(定义A004198bi(获取整数位-函数位-字符串和))(定义(功率2?n)(和(>n 0)(零?(A004198bi n(-n 1))))(定义(A004442 n)(A003987bi n 1));;自然数,反向配对:a(n)=n+(-1)^n;n异或1。(定义(二项式n_2n)(/(*(-1+n)n)2));; (地图A025581(cons 0(iota 20)))-->(0 1 0 2 1 0 3 2 1 0 4 3 2 1 5 4 3 1 0)(定义(A025581 n);;方形{0..inf}数组的X分量(列)(-(二项式n_2(1+(楼层->精确(+(/12)(平方(*2(1+n)))));; (地图A002262(cons 0(iota 20)))-->(0 0 1 0 1 2 1 2 3 0 1 2 3 4 0 1 3 4 5)(定义(A002262 n);;方形{0..inf}数组的Y分量(行)(-n(二项式n_2(楼层->精确(+(/12)(平方(*2(1+n)))));;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;(definec(位诱导n)(让循环((n n)(i 0)(c(列表)))(秒((零?n)(反向!c))((奇数?n)(循环(/(-n 1)2)(+1 i)(cons ic))(其他(循环(/n 2)(+1 i)c)))))(定义(减半n)(/n 2))(定义(shr n)(如果(奇数?n)(/(-n 1)2)(/n 2)))(definec(left-options n)(映射减半(keep-matching-items(on-bit-indices n)偶数?))(definec(right-options n)(映射减半(map-1+(keep-matching-items(on-bit-indices n)奇数?));; . = 0;; \ = 1;; / = 2;; \/ = ;; \;; / = 8;; /;; \ = 16;; \;; \ = 4;; /;; / = 32;; \;; \ \ \ \/ \/;; \/ = 9 \/ = 12 \/ = 129 \/ = 524289 = 2^(2*9+1)+1(定义(A057300 n)(减少+0(map(lambda(i)(expt 2 i)))(map A004442(on-bit indices n))))(定义(A106485 n);;取反,即取CGT树的镜像。(let循环(n n)(i 0)(s 0))(秒((零?n)s)((奇数?n)(循环(/(-n 1)2)(+1 i)(+秒(如果(甚至?i)(expt 2(+1(*2(A106485(/i 2))))(出口2(*2(A106485(/(-i 1)2)))))))(其他(循环(/n 2)(+1 i)s)))))(定义(A106486 n)(秒((零?n)0)(其他(左折(λ(x y)(+x y 1)))0(地图A106486(地图shr(on-bit-indices n))))));; 在(0)之后,在n=64时第一次与A000120不同。(定义(A106487 n)(条件((零?n)1)(其他(应用+(map A106487(map shr(on-bit indices n))))));; 这是您要求的40个A号码:A125974--A126013。;; 代码为n的CGT游戏的值>=0,左侧获胜,移动第二,;; 也就是说,第二个玩家总是可以赢(=0),或者左边的玩家赢;; 无论他打第一还是第二(>0)。;; 如果游戏是零游戏,或者:;; 对于所有G^R:-(G^R)>=0,而不是(G^R>=0),(即所有G^R<0)。;;;; 请注意,如果右翼没有选择,那么左翼将立即获胜。(定义(字符_A126001 n);;A106486代码给出的CGT游戏n>=0(条件((零?n)1);;是的,游戏0的CGT值为0。((所有人?(权利选项n);;或者没有右选项Gr<=0。(λ(Gr)(=0(char_A126001(A106485 Gr)))) 1)(否则为0)));; 替代配方。;; 游戏G>=0,如果G或者是零游戏,或者对于所有G^R来说,有一些G^R^L>=0。;; 请注意,如果右翼没有选择,那么左翼将立即获胜。;; 而如果右翼的一些选项根本没有左翼选项,;; 那么左边就赢不了(如果右边打得聪明),因此在这种情况下char_A126001(n)=0。;; 为了证明这些替代配方的等效性,;; 我们注意到,第一个公式中的条件等价于:;;;;对于所有G^R,-(G^R)>=0是错误的;;;; 在扩展了一个递归步骤之后,它变成:;;;; 对于所有G^R,它是错误的,对于所有(-(G^R)^RR,它是虚假的-(-(G ^R))^RR=0;;;; (RR指右翼在选择了一些一级选项后的“二级”选项);; 但是,正如-与A106485相同,后者反映了树,结果是:;; (L是指在选择了一些右侧选项后的左侧选项);;;; 对于所有G^R,这是错误的,对于所有G*R^L,(G*R)^L)>=0是错误的;;;; (和as(非通用量子非条件)<=>(存在量子条件):;;;; 对于所有G^R,存在一些G^R^L,这样((G^R)^L)>=0;;(定义(字符_A126001v2 n);;A106486代码给出的CGT游戏n>=0(条件((零?n)1);;是的,游戏0的CGT值为0。((所有人?(右选项n)(λ(右-右)(存在吗?(左-右-右)(λ(rlopt)(=1(char_A126001v2 rlopt))) 1)(否则为0)))(定义(字符_A125991 n)(*(字符_A126001 n)(字符_A124002 n));;零游戏?A125991的特征函数(定义(字符_A126002 n)(字符_A26001(A106485 n));;CGT游戏是由A106486代码n给出的吗?(定义(字符_A126003 n)(*(-1(字符_A124001 n))(-1(字符串_A126002 n)));;代码为n的游戏相对于零的游戏是模糊的吗?(定义(字符_A126004 n)(*(字符_A127001 n)(-1(字符_A124002 n)));;严格肯定?(定义(字符_A126005 n)(*(字符_A1126002 n)(-1(字符_A124001 n)));;严格否定?(定义A125991v2(fun-suck-matching-is1(lambda(i)(=1(char_A125991 i))))(定义A126001(fun-succ-matching-is1(λ(i)(=1(char_A126001 i))))(定义A126002(fun-suck-matching-is1(lambda(i)(=1(char_A126002 i)))));;不是A079599、A047467(定义A126003(fun-succ-matching-is1(λ(i)(=1(char_A126003 i))));;不是A047556。(定义A126004(fun-succ-matching-is1(λ(i)(=1(char_A126004 i))))(定义A126005(fun-succ-matching-is1(λ(i)(=1(char_A126005 i))))(定义(A126010bi g h);;CGT游戏g>=h和h>=g,即g和h具有相同的CGT值吗?(*(A125999bi克小时))(定义(A125999bi g h);;CGT游戏是g>=h吗?(秒((0?h)(字符_A126001克))((零?g)(字符_A126001(A106485小时));;如果g=0,则相当于-h>=g,即h<=0。(存在?(权利选项g);;如果存在右选项Gr<=H,则不存在!(λ(Gr)(=1(A125999bi h Gr))) 0)((存在?(左选项h);;或者,如果存在左opt Hl>=G,则不存在!(λ(Hl)(=1(A125999bi Hl g))) 0)(否则为1);;g的CGT值>=h。))(定义(A126012 n);;找到n基于零的最小代表CGT码!(let循环((i 0))(如果(=1(A126010bi in))i;;找到了。(回路(+1 i));;保证至少在i=n时停止。)));; 序列A126011,表A126000第1列,每个CGT树的最小代码:;; A126012获得不同新值(也是记录)的位置。;; 我还没有研究实施它是否有意义;; 主导期权的剪枝和反转;; 主导选项。然而,它证明了原作的优雅;; C.G.T.的归纳公式具有相同的结果;; 即使没有任何这样的优化也可以获得,;; 具有A125998bi这样的简单定义。;; 再说一次,我们更感兴趣的是纠正错误;; 而非快速结果:;; (此处n=57):;; 0,1,2,3,4,6,9,12,18,32,33,36,48,66,67,96,97,129,131,132,134,195,;; 256,258,264,288,384,386,516,768,4098,4099,4102,4128,4129,4132,4227,;; 4230,8196,8198,8204,8448,8450,8456,12294,262146,262152,262176,262272,;; 262274,266242,266272,266370,524289,524292,524544,532484,532736(定义A126011(fun-succ-distinacts-cgts0(λ(x)x));;基于零,不再那么慢。(定义A126011慢(功能-成功-区别0 A126012));;基于零,速度很慢。;; (定义A126011(compose-funs(fun-succ-distincts0 A126012)-1+);;不再是单一的。;; 基于零的还包括:(定义(A126013 n);;A126011的倒数形式,稍后可能会有用。现在不是最佳状态。(秒((零?n)0)(非(=(A126012 n)n))0);;n不是n的最小代表。(else(第一个n-where-fun_n-is-i1 A126011 n)));; (0 2 1 3 9 10 8 12 6 4 5 11 7 17 18 19 20 13 14 15 16 21);; 现在无法计算超过21,因为在此之后,A106485 o A126011的项变得太大:;; A106485(A126011[0..22]);; = 0 2 1 3 32 33 18 48 9 4 6 36 12 129 131 132 134 66 67 96 97 195 36893488147419103232(定义(A126009 n)(A126013(A106485(A126011 n)));; 虽然不是最佳的,但现在已经足够了:(缓存A126011会有所帮助。);; 基于零。此处仅计算到n=20。(定义(A125990 n)(n中的num-of-n-其中-fun_n-is-less-than-i A126011(导出2 n));; 缓存闭包的函数,其本身是缓存的(“记忆”)函数:(定义(用于_A126000 n的rowfun_n);;一个基础。(设((minrepr(A126011(-n 1))));;A126011是基于零的(函数-成功匹配-i1(lambda(i)(=1(A126010bi i minrepr))))))(定义(A126000双列行)((rowfun_n_for_A126000行)列));; 这是置换,但我们不在乎计算它的逆!偏移,你看。(定义(A126000 n)(A126000bi(+1(A025581(-n 1))))(定义(A125999n)(A12599bi(A025581n)(A002262n))(定义(A126010 n)(A126010bi(A025581 n)(A002262 n))(定义A125991(用于_A126000 1的rowfun_n_f))(定义A125992(用于_A126000 2的rowfun_n_f))(定义A125993(用于_A126000 3的rowfun_n_f))(定义A125994(用于_A126000 4的rowfun_n_f))(定义A125995(rowfun_n_for_A126000 5))(定义A125996(用于_A126000 6的rowfun_n_f))(定义A125997(用于_A126000 7的rowfun_n_f))(定义A125998(用于_A126000 8的rowfun_n_f));; (output-entries-to-file120_45 Dec2006-list-a“./seqs/A126000-seqs.txt”“2006年12月18日”)(定义2006年12月-list-a(列表(列出125991“带零值的组合游戏的A106486编码。”'(关闭:1)(c:“在这些比赛中,第二名球员总是可以获胜。”)(list'e:(字符串附加“游戏0被编码为零,给出该序列的第一项。”24也属于这个序列,因为它编码游戏{-1|1},第二个“玩家总是赢。同样,对于代码为2^(1+2*3)+2^(2*3)=192的游戏{*|*},”“因此192是该序列的成员。”))(list'y:(string-append“第1行,共A126000行”)“A126001和A126002的交叉点。”“特征函数出现在A126010的第0行。”)))(列出125992“值为1的组合游戏的A106486编码。”'(关闭:1)(list'c:(string-append“这些是属于同一个游戏的代码”)“等价类作为游戏{0}(即游戏1)。”))(list'e:(字符串附加游戏{0|}编码为2^(2*0)=1,因此1是这个序列的第一项17也属于这个序列,因为它编码游戏{-1,0|},其中选项-1是“由选项0控制,前者可以删除,结果是”“同一个游戏{0|}。”代码65536(=2^(2*(2^(1+2*1)))也属于这个序列“因为它对游戏{{|1}|}进行编码,这对游戏1是可逆的。”))(列表“y”:(字符串附加“A126000的第2行”))(列出125993“A106486-值为-1的组合游戏编码。”'(关闭:1)(list'c:(string-append“这些是属于同一个游戏的代码”)“等价类作为游戏{0}(即游戏-1)。”))(list'e:(字符串附加游戏{|0}编码为2^(1+2*0)=2,因此2是这个序列的第一项10个成员也属于这个序列,因为它编码游戏{|0,1},其中,选项0占主导地位选项1,后者可以删除,导致“同一游戏{0}。”“同样,代码8589934592(=2^(1+(2*2^(2*2)))也属于这个序列,”“因为它对游戏{{-1}}进行编码,这对游戏-1是可逆的。”))(list'y:(字符串附加“A126000的第3行”))(列出125994“A106486相当于游戏明星的组合游戏编码。”'(关闭:1)(list'c:(string-append“这些是属于同一个游戏的代码”)“等价类作为游戏{0|0}(即游戏*)。”))(list'e:(字符串附加游戏{0|0}编码为2^(2*0)+2^(1+2*0)=3,因此3是这个序列的第一项“然而,11也属于这个序列,因为它编码游戏{0|0,1},其中,”“因为选项0占主导地位”“选项1位于右侧,后者可以删除,因此”“同一游戏{0|0}。”))(list'y:(string-append)A126000第4行。A126003子集。”))(列出125995“值为2的组合游戏的A106486编码。”'(关闭:1)(list'c:(string-append“这些是属于同一个游戏的代码”)“等价类作为游戏{1}(即游戏2)。”))(list'e:(字符串附加游戏{1|}编码为2^(2*1)=4,因此4是这个序列的第一项5也属于这个序列,因为它编码游戏{0,1|},其中,因为选项1占主导地位“左侧的选项0,则可以删除零,从而生成”“同一游戏{1}。”))(list'y:(字符串附加“A126000的第5行”))(列出125996“相当于游戏{1|0}的组合游戏的A106486编码。”'(关闭:1)(list'c:(string append)“这些是属于同一游戏的代码”“等效类为游戏{1|0}。”))(list'e:(字符串附加游戏{1|0}编码为2^(2*1)+2^(1+2*0)=6,因此6是这个序列的第一项7也属于这个序列,因为它编码游戏{0,1|0},其中,选项1占主导地位“左侧的选项0,前者可以删除,结果是”“同一游戏{1|0}。”))(list'y:(字符串附加“A126000的第6行”))(列出125997“与游戏{0|1}等价的组合游戏的A106486编码。”'(关闭:1)(list'c:(string-append“这些是属于同一个游戏的代码”)“等价类作为游戏{0|1}。”))(list'e:(字符串附加游戏{0|1}编码为2^(2*0)+2^(1+2*1)=9,因此9是这个序列的第一项“另外,25(=2^(2*2)+2^(2%0)+2^(1+2*1))也属于这个序列,因为它编码游戏”{-1,0|1},其中选项-1由选项0控制,前者可以删除“结果是相同的游戏{0|1}。”))(list'y:(字符串附加“A126000的第7行”))(列出125998“与游戏{1|1}等价的组合游戏的A106486编码。”'(关闭:1)(list'c:(string-append“这些是属于同一个游戏的代码”)“等价类作为游戏{1},公正游戏1*。”))(list'e:(字符串附加游戏{1|1}编码为2^(2*1)+2^(1+2*1)=12,因此12是这个序列的第一项“13也属于这个序列,因为它编码游戏”{0,1|1},其中,由于选项0由选项1控制,前者可以删除“结果是相同的游戏{1}。”))(list'y:(字符串附加“A126000的第8行”))(列出126001“非负组合游戏的A106486编码,即值大于等于0的游戏。”'(关闭:1)(c)“在这些比赛中,如果他是第二名,左翼总是可以获胜的。”;; '(成分:(126002 106485);;对于特征函数也是如此!(list'y:(string-append)“特征函数作为A125999的第0行出现。”“请参阅A125991、A126003-A12605。”)))(列表126002“值<=0的组合游戏的A106486编码。”'(关闭:1)(c:“在这些比赛中,如果右后卫打第二,他总是可以获胜的。”);;'(成分:(126001 106485);;对于特征函数也是如此!(list'y:(string-append)“特征函数出现在A125999的第0列。”“与A047467不同(a(65)=512,而不是256),”“也来自A079599,作为术语18446744073709551616(=2^64)”“是此序列的成员,但不是A079599的成员。”“请参阅A125991、A126003-A12605。”)))(列出126003“A106486组合游戏编码,其值相对于游戏零是模糊的。”'(关闭:1)(c)“在这些比赛中,第一名球员总是可以获胜。”(list'y:(字符串附加“A126001和A126002补语的交集,”“或者是A126001和A126002联合的补充。”“与A047556不同。”“请参阅A125991、A125994、A126004-A12605。”)))(列出126004“值大于零的组合游戏的A106486编码。”'(关闭:1)(c)“在这些比赛中,左翼总是可以获胜的。”;; '(成分:(126005 106485);;对于特征函数也是如此!(list'y:(string-append“A126002和A126001补码的交集。”“请参阅A125991、A126001-A126003。”)))(列出126005“值小于零的组合游戏的A106486编码。”'(关闭:1)(c)“在这些比赛中,右翼总是可以获胜的。”;; '(成分:(126004 106485);;对于特征函数也是如此!(list'y:(字符串附加“A126001和A126002补语的交集。”“请参阅A125991、A126001-A126003。”)))(列出126010“如果组合游戏g和h的值相同,则方形数组A(g,h)=1,如果它们不同,则为0,按反对偶顺序列出A(0,0)、A(1,0)、B(0,1)、A'(关键词:“tabl”)'(关闭:0)'(最多120)'(c:“这里我们使用A106486中描述的编码。”)(list'e:(string append)“A(4,5)=A(5,4)=1,因为5编码游戏{0,1|},”“其中,由于选项1控制左侧的选项0,因此可以删除零,”“产生游戏{1},游戏2的标准形式,编码为4。”))(list'y:(字符串附加“第0行是A125991的特征功能(移动一步)。”“A(i,j)=A125999(i,j)*A125999(j,i)。”“A126011为每个人的最少代表提供了A106486编码”“有限组合游戏的等价类。”)))(列出125999“如果组合游戏g的值大于或等于游戏h的值,则方形数组A(g,h'(关闭:0)'(最多120)'(c:“这里我们使用A106486中解释的编码。A(i,j)=A(A106485(j),A106485i))。")'(关键词:“tabl”)(list'y:(字符串附加‘第0行是A126001的特征函数(移动一步),’“类似地,第0列是A126002的特征函数。”“参考A126010和表A126000。”)));; 0,1,2,3,4,6,9,12,18,32,33,36,48,66,67,96,97,129,131,132,134,195,256,258,264,288,384,386,516,768(列出126011“有限组合对策的每个等价类的最小代表的A106486编码。”'(关闭:0)'(最多61)(列表'c:(string-append“初始术语对应以下游戏:”“代码0={|}=零游戏,”“代码1={0|}=游戏1,”“代码2={|0}=游戏-1,”“代码3={0|0}=游戏*,”“代码4={1|}=游戏2,”“代码6={1|0},”“代码9={0|1}=游戏1/2,”“代码12={1|1}=游戏1*,”“代码18={-1|0}=游戏-1/2,”“代码32={|-1}=游戏-2,”“代码33={0|-1},”“代码36={1|-1}=游戏+-1,”“代码48={-1|-1}=游戏-1*,”“代码66={*|0}=游戏结束,”“code67={0,*|0}=游戏开始*,”;;2^(2*3) + 2^(2*0) + 2^(1+2*0)“代码96={*|-1},”;;2^(2*3) + 2^(1+2*2)“代码97={0,*|-1},”;;2^(2*3) + 2^(2*0) + 2^(1+2*2)“code129={0|*}=游戏开始”;;2^(2*0) + 2^(1+2*3)“代码131={0|0,*}=游戏结束*,”;;2^(2*0) + 2^(1+2*0) + 2^(1+2*3)“代码132={1|*},”;;2^(2*1) + 2^(1+2*3)“代码134={1|0,*},”;;2^(2*1) + 2^(1+2*3) + 2^(1+2*0)“代码195={0,*|0,*}=游戏*2,”;;2^(2*3) + 2^(2*0) + 2^(1+2*3) + 2^(1+2*0)“代码256={2|}=游戏3。”;;2^(2*4)“编码在A106486中解释。”))(list'y:(string-append“A126012的记录。A126000第1列。反向:A126013。见A126010。”“A125990给出了[0,2^n[.Cf.A065401范围内的项数。”)))(列出126012“A106486编码代码为n的组合游戏的典型代表。”'(关闭:0)(list'e:(字符串附加“25(=2^(2*2)+2^(2*0)+2^(1+2*1))编码游戏{-1,0|1},其中,”“由于选项-1由选项0控制,因此前者可以删除,”“给我们游戏{0|1},即游戏1/2的规范(最小)形式,”“编码为2^(2*0)+2^(1+2*1)=9,因此a(25)=9和a(9)=9。”类似地,a(65536)=1,因为65536(=2^(2*(2^(1+2*1)))编码游戏{{|1}|}“这对游戏{0|}是可逆的,即游戏1,其编码为2^(2*0)=1。”))(list'y:(string-append“A126011给出了不同的术语(以及记录)。”))(列出126013“N->N注入A126011的反函数。”'(关闭:0);;'(最多99)(列表c:(字符串追加“a(0)=0,因为A126011(0)=0,但a(n)=0也适用于那些没有作为A126011的值出现的n。”“所有正自然数在这里出现一次。”))(list'y:(string-append“a(A126011(n))=n代表所有n。”))(列出126009“A106485被矩形化为A126011时引发的整数自逆置换。”'(关闭:0)'(最多21)'(缩进:Nperm)'(发票:126009)'(公司:(126013 106485 126011)(list'c:(字符串附加“当A106485(A126011(22))=36893488147419103232时,要进一步计算n=21并不容易。”)))(列出125990“A106486最小表示编码小于2^n的党派游戏数量”'(关闭:0)'(最多:20)'(c:“A126011的项数在[0,2^n[.范围内”)'(y:“A065401(n)=a(2*A114561(n))。”))(列出126000“给出每个等价类组合游戏的A106486代码的表。”'(关闭:1)'(缩进:Nperm)'(关键词:“tabl”)(list'e:(字符串附加“每行列出用与初始项相同的值对游戏进行编码的整数”“行的:”“\n%e A126000 0,8,16,24,64,72,80,88128136144152200208,…”“\n%e A126000 1,17,65,81513529577593204922065211321292561,…”“\n%e A126000 2,10130138514522642650205821782186,…”“\n%e A126000 3,11,19,2751552353153920512059206720752563,…”“\n%e A126000 4,5,20,21,68,69,84,85410041014116411741644165,…”“\n%e A126000 6,7,14,15,22,23,30,31,70,71,78,79,86,87,94,95518,…”“\n%e A126000 9,25,73,89521537560120572073212121372569,…”“\n%e A126000 12,13,28,29,76,77,92,9352452554054158589604,…”“\n%e A126000 18,2614615453053865866662066206620742202,…”“\n%e A126000 32,34,40,42160162168170544546552554672674,…”“\n%e A126000 33,35,41,43,49,51,57,59161163169171177185,…”“\n%e A126000 36,37,38,39,44,45,46,47,52,53,54,55,60,61,62,63100,…”“\n%e A126000 48,50,56,581761781841886560562568570688690,…”“\n%e A126000 66,74,82,9019420221021857858659594606714,…”))(列表'c:(字符串附加“请参阅A126011和各个行上的注释。”)(列表y:(字符串追加“第1列:A126011。”“行1:A125991,行2:A125992,行3:A125993,”“第4:A125994行,第5:A125995行,第6:A125996行,第7:A125997行,第8:A125998行。”)))));;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;; 复制和修改自:;;;; 网址:http://www.iki.fi/~kartturi/matikka/Nekomorphisms/gato-out.scm;;;; 函数output-gatomorphism-entry-aux等人;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;(加载选项的格式)(定义(Anum->str Anum)(字符串-追加“A”(字符串pad-left(if(string?Anum)Anum(number->string Anum))6#\0)))(定义output_seq(λ(seq)(cond((null?seq));;这次不(换行)!(其他(写入(car-seq))(if(not(null?(cdr-seq)))(写入字符串“,”)(输出平方(cdr-seq))))))(定义(len-of-max-full-line-prefix seq max-line-len)(let循环(seq seq)(术语0)(左室最大长度))(cond((负?左室)(最大1(-第1项)));;至少有一个术语,即使它过长!((非(配对?序列))项)(else(循环(cdr-seq)(+1个术语)(-左室(字符串长度(格式#f“,~A”(car-seq))))))))(定义(html-out-sequence-search-link-out-seeklen)(无输出对输出(λ()(let((seek-seq(cond((<seeklen(-(length-seq)2))(list head(cddr-seq)seeklen))(else(cddr-seq)))))(写入字符串““)(output_seq(列表头seq(最小seeklen(长度seq))))(写入字符串“\n“)))))(定义(html-out-Anchor Anum out)(格式化输出”“(Anum->str Anum)”)(定义(html-out-sequence-A-link-Anum-out)(let((Astr(Anum->str Anum)))(格式化输出”~答“阿斯特阿斯特)));; 麻省理工学院项目工作:(定义(Anum->Afun Anum)(eval(字符串->符号(字符串小写(Anum->str-Anum)))用户初始环境));; (complist->exprstr(列表1 2 3 4))-->“A000001(A000002(A000003(A000004(n)))”(定义(complist->exprstr-comlist)(带字符串输出端口(λ(输出)(for-each(lambda(anum))(格式输出“~A(”(anum->str-anum)))共犯)(格式输出“n”)(for-each(lambda(x)(格式输出“)”)兼容))))(定义(仅检查组成输出端口comp base-seq Aseq Astr?)(let((Acomp(合成列表(map Anum->Afun comp)))(cond((不等于?(map Acomp base-seq)Aseq))(格式输出“!!!组成~A=~A不正确!\n”Astr(complist->exprstr-comp)))(仅检查?(格式输出“是的,组成~A=~A似乎正确。\n”Astr(complist->exprstr-comp))))))(定义(检查条目10列表)(output-OEIS-entry列表1024 10#t“Kuu 00 2006”(current-output-port))(define(checkentry25 listlet)(output-OEIS-entry listlet 1024 25#t“Kuu 00 2006”(current-output-port))(define(checkentry55 listlet)(output-OEIS-entry listlet 1024 45#t“Kuu 00 2006”(current-output-port))(定义(output-entries-to-file120_10 listlets outfile子日期)(无输出文件的调用(lambda(输出)(map(lambda(listlet)(output-OEIS-entry listlet 120 10#f子状态输出))列表))))(define(output-entries to-file120_45 listlets outfile subm date)(无输出文件的调用(λ(输出)(map(lambda(listlet)(output-OEIS-entry listlet 120 45#f子状态输出))列表))))(定义(组合字符串数组x)(减少字符串附加“”(cdr x))(定义(output-OEIS-entry listlet checkupto-nseek-len check-only?sub-date输出)(let*((Anum(list-ref listlet 0))(名称(list-ref listlet 1))(恢复(cddr列表))(c(cond((assoc'c:rest-of)=>combstringpars)(else#f))(e(cond((assoc'e:rest-of)=>combstringpars)(else#f))(f(cond((assoc'f:rest-of)=>组合数组)(else#f))(y(cond((assoc'y:rest-of)=>combstringpars)(else#f))(off(cond((assoc'off:rest-of)=>cadr)(else(error“output-entry:field'off:'(starting offset)required!”)))(关键字(cond((assoc'关键字:rest-of)=>combstringpars)(else#f))(Ainv(cond((assoc'inv:rest-of)=>cadr)(else#f))(comps(cond((assoc'comps:rest-of)=>cdr)(else#f));;'(公司:(000040 091207)(014580 091208))(方案(cond((assoc'方案:rest-of)=>cdr)(else#f)))(indentries(cond((assoc'indentries:rest-of)=>cdr)(else(list)))(仅检查?(或仅检查?)(检查到n(cond((assoc'upto:rest-of)=>cadr)(否则检查到n))(阿斯特(Anum->str Anum))(Afun(Anum->Afun Anum))(Ainvstr(和Ainv(Anum->str Ainv))(艾恩富恩(和艾恩夫(Anum->Afun Ainv))(base-seq(map(λ(n)(+n关闭))(iota0(-check-upto-n关闭)))(Aseq(映射Afun base-seq))(消极术语?(是否存在?Aseq消极?)(单基第一位-gte-2(条件((第一匹配位置Aseq(λ(x)(>=(abs x)2)))=>1+)(否则为1);;如果没有除0,1或-1以外的项,则使用1作为偏移对的第二个元素。))(更多-零?(秒(和Ainvfun(memq 0 Aseq))=>(λ(r)(memq0(cdr)))(否则#f));;(无大于abs-1项?(适用于所有?Aseq(λ(n)(<(abs n)2)));;不需要。(Y线启动?#f);;还没有。)(第二(安万福;; 如果Aseq有多个0,则给定的反函数是从N到N的非递归注入,;; 我们必须检查Afun(Ainvfun(x)),否则检查Ainvfun(Afun):(第二个(更多-零?(let((Ainvseq(映射Ainvfun base-seq))(第二个((不等于?(map Afun Ainvseq)base-seq))(格式输出“!!!此函数~A不是注入~A的反函数(检查到n=~A)。\n”Astr Ainvstr公司))(仅检查?(格式输出“是的,此函数~A似乎是非注入~A的反函数(检查到n=~A)。\n”Astr Ainvstr检查)))) ;; )((不(等于?(map Ainvfun Aseq)base-seq))(格式输出“!!!~A的反向~A不正确\n”Ainvstr阿斯特))(仅检查?(格式输出“是的,函数~A在计算到n=~A\n”Ainvstr Astr检查)))))(第二(比较(每个(λ(comp))(仅检查组成输出comp base-seq Aseq Astr?))计算机)))(第二条(仅检查?(html-out-sequence-A-link Anum输出站)(格式输出端口“=\n”)(html-out-sequence-search-link输出端口Aseq seek-len))(否则(格式化输出端口“%I~A\n”Astr)(设*((max-term-line-len 69);;As(字符串长度“%S A012345”)=10。(第1len部分(len-of-max-full-line-prefix Aseq max-term-line-len)(part2len(len-of-max-full-line-prefix(list-tail Aseq part1len)max-term-line-len));;可能为零!(part3len(len-of-max-full-line-prefix(list-tail Aseq(+part1len part2len)));;可能是零!(第1部分(子列表Aseq 0 part1len)(第2部分(Aseq第1部分(+第1部分第2部分));;如果part2len=0,则结果()。(第3部分(子列表Aseq(+part1len part2len)(+part1len part 2len parth3len));;如果part2len=0或part3len=0,则返回results()。)(带输出到端口输出端口(λ()(格式化输出端口“%S~A”Ast)(output_seq(map abs part1))(格式输出端口“,\n”)(第二部分(第二对)(格式化输出端口“%T~A”Astr)(output_seq(map abs part2))(格式输出端口“,\n”)))(第二部分(第三对)(格式输出端口“%U~A”Astr)(output_seq(映射abs部分3))(换行输出端口)))(第二个(否定术语?(格式化输出端口“%V~A”Astr)(output_seq part1)(格式化输出接口“,\n”)(第二部分(第二对)(格式化输出端口“%W~A”Astr)(output_seq part2)(格式化输出端“,\n”)))(第二部分(第三对)(格式输出端口“%X~A”Astr)(output_seq part3)(换行输出端口)))))))) ;; 出租*(格式化输出端口“%N~A~A\N”Astr名称)(条件(f(格式化输出端口“%F~A~A\n”Astr F)))(条件(c)(格式化输出端口“%C~A~A\n”Astr C)))(条件(e)(格式输出“%e~A~A\n”Aster e)))(格式输出端口“%H~A A.Karttunen,计算此序列的方案-程序。\n“阿斯特)(第二((双凹口)(第二((memq’GF2X凹痕)(格式输出端口“%H~AGF(2)[X]-多项式序列的索引项\n“阿斯特)))(cond((memq的跨域缩进)(格式化输出“%H~A由结构域N和GF(2)[X]之间的全等积定义的序列的索引条目\n“阿斯特)))(第二个((memq'异或同余契约)(格式输出端口“%H~A异或下由同余积定义的序列的索引项\n“阿斯特)))(cond((memq’Lattices凹痕)(格式输出端口“%H~A与格相关的序列的索引项\n“阿斯特)))(第二个(每个压头)(格式输出端口“%H~A自然数排列序列的索引项\n“阿斯特)))(第二次((memq’Catsigperm契约)(格式输出端口“%H~A加泰罗尼亚语自同构的符号置换索引条目\n“阿斯特)))))(第二(Ainv(第二条(不是Y线启动?)(格式输出“%Y~A”Astr)(设置!Y线启动?#t)))(第二个(更多-零?(格式输出“~A的逆”Ainvstr))(否则(格式输出“反向:~A”Ainvstr)))));; 我们也应该检查它们,但不能只使用A数字,因为;; 我们需要函数定义。(在这里,老式的Lisp将击败Scheme。)(第二(比较(第二条(不是Y线启动?)(格式输出“%Y~A”Astr)(设置!Y线启动?#t)))(格式输出“a(n)”)(对于每个(lambda(comp))(格式化outport“=~A”(complist->exprstr comp)))计算机)(格式输出“.”)))(秒(y(第二条(不是Y线启动?)(格式输出“%Y~A”Astr)(设置!Y线启动?#t)))(格式输出“~A”y)))(如果Y线启动?(换行输出))(格式化输出端口“%K~A~A~A”\nAstr(如果是否定术语?“sign”“nonn”)(如果关键字(字符串附加“,”关键字)“”))(格式化输出端口“%O~A~A,~A\n”Astr off one-based-pos-of-first-term-gte-2一垒)(格式输出端口“%A~A Antti Karttunen(His-Firstname.His-Sorname(AT)gmail.com),~A\n”Astr子日期)(第二个方案(格式输出“%o~A(MIT方案:)\n”Astr)(for-each(lambda(schemedef)(格式输出“%o~A~A\n”Astr schemeded))方案)))(换行输出)) ;; 其他的) ;; 康德) ;; 出租*)