#测试aseq和bseq在5x5网格中是否相邻#@param aseq点a(0..24)的序列表示#@param bseq点b的序列表示(0..24)isAdjVseq:=进程(aseq,bseq)选项记忆;本地prs;prs:=[[0,1],[1,2],[2,3],[3, 4], [4, 9], [9, 14], [14, 19], [18, 19],[17, 18], [16, 17], [11, 16], [11, 12],[12,13],[8,13],[7,8],[6,7],[5, 6], [5, 10], [10, 15], [15, 20],[20, 21], [21, 22], [22, 23], [23, 24] ] ;如果prs中有[aseq,bseq],则真;其他的假;结束条件:;结束进程:#测试点(a1,a2)和(b1,b2)是否相邻。#@parm a1点a的水平坐标(0..4)#@parm a2点a的垂直坐标(0..4)#@parm b1点b的水平坐标(0..4)#@parm b2点b的垂直坐标(0..4)isAdjV:=进程(a1、a2、b1、b2)选项记忆;本地aseq,bseq;#如果(a1,a2)=(b2,b2),则跳过测试如果a1=b1和a2=b2,则返回true;结束条件:;#将x和y坐标映射到唯一表示(0..24)aseq:=5*a1+a2;bseq:=5*b1+b2;返回值为AdjVseq(最小值(aseq,bseq),最大值(aseq,bseq));结束进程:#测试整数a和b是否像Knuth的Amer中那样相邻。数学。月度问题11733#@param a第一个整数#@param b第二个整数isKAdj:=程序(a,b)#点与其自身不相邻如果a=b,则返回false;结束条件:;#获得以5位为基数的两个序列a5:=换算(最小值(a,b),基数,5);b5:=换算(最大值(a,b),基数,5);#如果数字数量不同,请用零填充如果nops(a5)<nops(b5),则a5:=[op(a5),seq(0,i=1…nops(b5)-nops(a 5))];结束条件:;isadj:=真;#测试base-5表示法中的每对数字对于j从1到nops(a5)-1 do对于i从j+1到nops(a5)do如果不是AdjV(op(i,a5),op(j,a5返回false;结束条件:;结束do:结束do:返回true;结束进程:A220952:=程序(n)选项记忆;局部a,nprev;如果n=0,则0;其他的对于0中的a do如果isKAdj(a,进程名(n-1)),则已知:=假;对于从0到n-1的nprev do如果procname(nprev)=a,则已知:=真;断裂;结束条件:;结束do:如果不知道,那么返回a;结束条件:;结束条件:;结束do:结束条件:;结束进程:序列(A220952(n),n=0..100);#R.J.Mathar,2017年8月25日