本网站由以下捐款支持:OEIS基金会.

序列工具

来自OeisWiki
跳转到:航行,搜索

此页面专门用于的链接和代码片段检查格式化序列.

将列表限制为固定数量的字符

历史上数据OEIS序列输入字段有足够的术语填充屏幕上大约三行260个字符,包括[十进制]数字、符号、逗号和空白(空格和换行符;不允许使用制表符)。对于更多的术语,贡献者可以提交一个b文件每行上都包含一个索引和一个术语,并根据需要包含任意多行。

数学软件

(发件人:T.D.诺伊)

OEISTrim[lst_List,maxLen_Integer:260]:=模块[{newLst={},len=0},Do[len=len+2+Length[IntegerDigits[term]]+Boole[term<0];如果[len<=maxLen,AppendTo[newLst,term],Break[]],{term,lst}];新Lst]

它默认为260个字符的长度,这看起来很完美。示例:数字1到100的序列被修剪为

OEISTrim[范围[100]]

只列出前67个数字。

枫树

(来自彼得·卢什尼)

OEIStrim:=进程(f,偏移量)本地L,n,len,fn,s,islist;L:=空;长度:=0;islist:=whattype(f)=list;n:=`if`(islist,1,offset);fn:=`if`(伊斯兰教,f[n],f(n));s:=`if`(fn<=0,1,0);len:=len+s+长度(fn);如果len>260,则打破fi;len:=len+2;L:=L,fn;n:=n+1;od;L端:

用法:

OEIStrim(n->n,0);f:=n->-n:OEIStrim(f,0);F:=[序列(n,n=0..100)]:OEIStrim(F,忽略);

平价/GP

(来自罗伯特·格比茨)

{OEISTrim(v)=L=260;长度=0;w=[];对于(i=1,长度(v),len+=3+(v[i]<0);x=abs(v[i])\10;而(x,len++;x\=10);如果(len>L,break);w=连接(w,v[i]););返回(w)}

用法:

OEISTrim(矢量(100,i,i))

返回前67个正整数。

替代代码:

(来自MFH公司)

允许将所需长度指定为第二个可选参数。中参数的顺序
选择()
不同版本之间的更改;用于2.4.2更改
选择(函数、向量)
选择(矢量、函数)
.
OEIS_trim(v,L=260)=本地(L=L);select(t->-3<L-=#Str(t)+2,v)\\(PARI/GP版本2.4.3和更高版本的正确语法)

哈斯克尔

(来自莱因哈德·祖姆凯勒)

导入数据。列表(展开器)oeisTrim xs=take(长度$unloadr t(260,xs))xs,其中t(_,[])=无t(still,u:us)|len>still=无|否则=仅(len,(still-len,us))其中len=长度(显示u)+2

用法:

oeisTrim[]==[]oeisTrim[1..]==[1.67]oeisTrim[1..10]==1..10]oeisTrim[1..100]==[1.67]oeisTrim[10..1000]==[10..74]

圣人

(来自彼得·卢什尼)

定义OEIStrim(L):n=0长度=0T=[]对于l中的l:s=1,如果l<0,否则为0leng=leng+s+len(str(l))如果长度>260:断裂长度+=2T.附录(l)n+=1打印n,“术语”返回T

例如:

OEIStrim(范围(100))

间隙

(来自埃里克·施密特)

OEISTrim:=函数(seq)局部i,len;i:=0;长度:=-2;而len<=260 doi:=i+1;如果i>长度(seq),则断开;fi;len:=len+长度(字符串(seq[i]))+2;od;返回序列{[1..i-1]};结束;

例子:

OEISTrim([1..100]);

格式化b文件

重要的一点是行尾的格式,它应该是Unix(single如果).

朱莉娅

(来自彼得·卢什尼)

使用日期函数write_oeis_bfile(anum、range、seq、comments、targetdir)如果!发生在(r“^A[0-9]{6}$”,anum)@warn(“不是有效的a-number!正在退出。”)返回结束文件名=连接路径(targetdir,“b”*anum[2:end]*“.txt”)@info(将“*anum*”写入“*文件名”)file=打开(文件名,“w”)timestamp=日期。格式(now(),“yyyy-mm-dd HH:mm”)println(文件,“#”,时间戳)评论中的cprintln(文件,“#”,c)结束对于范围内的nval=序列(n)如果长度(字符串(val))>1000@错误(“术语过长,正在退出。”)打破结束println(文件,n,“”,val)结束打印(“\n”)关闭(文件)结束

使用示例:

path=“C:/Users/Home/”comments=[“作者:Julia Verona”,“发散系列表现卓越。”]a(n)=阶乘(BigInt(n))风险=11:200write_oeis文件(“A000142号“,R,a,注释,路径)

使用示例:

write_oeis文件(“A000290型“,0:100,n->n*n,”“,路径)

枫树

(来自罗伯特·伊斯雷尔)

这将输出带有时间戳的b文件给定一个A编号、过程或列表、偏移量和最终索引值。对于过程,在生成超过999位数。

生成文件:=进程(anumber,A,offset,N)局部bfile,n,v,dn;bfile:=StringTools:-SubstituteAll(sprintf(“b%6d.txt”,anumber),“”,“0”);fopen(bfile,写入);fprintf(bfile,StringTools:-FormatTime(“#使用Maple生成,%B%d%Y\n”);如果是类型(A,程序),则对于从偏移到n do的nv:=A(n);如果长度(v)>999,则打破结束条件:;fprintf(b文件,“%d%d\n”,n,v);结束do其他的对于从偏移到n do的nfprintf(bfile,“%d%d\n”,n,A[n+1偏移量])结束do结束条件:;fc丢失(bfile)结束进程:

示例用法:

Makebfile(217,n->n*(n+1)/2,0,10000);

数学软件

(来自查尔斯·格里塔斯)

这是一个需要改进的基本实现,但它将输出一个b文件给定一个A编号、列表和可选偏移量。

b文件[aNum_Integer,v_List,offset_Integer:1]:=模块[{s=OpenWrite(打开写入)[“b”<>StringTake[“00000”,6-整数长度[aNum]]<>ToString[aNum]<>“.txt”]},对于[i=1,i<=长度[v],i++,WriteString[s,i+偏移量-1,“”,v[[i]],“\n”]];关闭[s]]b文件::用法=“bFile[aNum,v]使用List v中给出的术语写入一个b文件\使用偏移量1。\nbFile[aNum,v,offset]使用\指定的偏移量。";

PARI/GP公司

(来自查尔斯·格里塔斯)

这个普通合伙人该脚本采用一个名称(字符串或数字,例如“b000000.txt”或0)和一个向量,外加一个可选偏移量。它输出一个b文件以及用于纳入OEIS的样板文本。创建的b文件遵循严格的格式,包括建议数字不超过1000位。

b文件(名称,v,偏移=1,限制=1000)={my(cur=偏移-1,F);name=Str(名称);while(#name<6,name=Str(0,name));name=Str(“b”name“.txt”);F=文件打开(名称,“w”);对于(i=1,#v,如果(#Str(v[i])>限制,print(“Next term has”#Str(v[i])“digits;exiting。”);打破);my(s=Str(cur++,“”,v[i]);文件写入(F,s););文件关闭(F);}addhelp(bfile,“bfile(name,v,offset=1):创建一个b文件,其中v值表示a-number名称(以数字或文件名的形式给出)。”);

Python语言

(来自彼得·卢什尼)

进口再进口从datetime导入日期定义write_oeis_bfile(anum、range、seq、comments、targetdir):如果不匹配(“^A[0-9]{6}$”,anum):print(“a号码无效!正在退出。”)返回filename=目标目录+“b”+anum[1:]+“.txt”打印(“写入”+anum+“到”+文件名)文件=打开(文件名,“w+”)文件.write(“#OEIS:”+anum+“\n”)今天=date.today()timestamp=today.isoformat()文件.write(“#”+时间戳+“\n”)对于评论中的c:文件.write(“#”+c+“\n”)对于范围内的n:val=序列(n)如果len(str(val))>1000:打印(“期限过长,正在退出。”)打破file.write(str(n)+“”+str(val)+“\n”)文件.write(“\n”)文件.close()

用法:

comments=[“作者:Pythia Delphi”,“软件:SageMath 9.2”,“发散系列表现卓越。”]def a(n):返回阶乘(n)path=“C:/Users/Home/”write_oeis文件(“A000142号“,范围(11),a,注释,路径)


读取b文件

PARI/GP公司

不幸的是,PARI处理文件甚至字符串的能力非常有限。以下内容可用于从b文件中获取值向量,使用
#Axxx=b2v(读取str(“/tmp/bxxx.txt”));
特别是它支持b文件中的空行和注释行(以“#”开头)。争论v(v)是字符串向量
readstr(“bxxx.txt”)
.
b2v(v)=应用(s->对于(i=2,#s=Vecsmall(s),s[i-1]>=48&s[i]<48&&return(eval(s[i+1..#s]))),选择(s->#s>2&&Vecsmall[1]=35,v))\\(c)2014作者:[[用户:M.F.Hasler|M.F..Hasler]]。

各种工具

  • 自动化OEIS,CodeGolf StackExchange,2016年。使用各种工具和/或编程语言检索OEIS序列术语的方法集合。

猜测生成函数

另请参见用户:Charles_R_Greathouse_IV/Pari#Recurrences用于检测线性复发的片段。

PARI/GP公司

(来自M.F.哈斯勒.IIRC公司,这最初是受来自马克斯·阿列克塞耶夫,但截至今天,我无法追溯,例如通过他的第页GP脚本.)

这个PARI/GP公司该脚本接受一个至少包含8个元素的向量,并寻找一个(有理)生成函数。如果失败,它将返回各种错误消息。它还做了一些额外的检查:特别是在计算g.f.之后,它检查这是否确实再现了向量的所有项。

ggf(v)={my(p,q,B=#v\2);如果(B<4,“至少需要8个值!”,如果(!#q=qflll(矩阵(B,B,x,y,v[x-y+B+1]),4)[1],“qflll返回空结果。”,polcoeff(p=Ser(q[,1]),0)<0&&p=-p;/*调整标志*/q=波尔(Ser(v)*p);如果(Ser(v)==q/=Pol(p),q,Str(“我猜到了”,q,“,但它不会重现最后一个值!”))))}

该代码的一个缺点是PARI将分子和分母表示为按幂递减顺序打印的多项式。可以使用以下代码段重新格式化它们:

p(p)=concat(vecextract(Vec(Str(p+O(x^99))),“..-11”)/*写幂递增的多项式*/pgf(f)=Str/*或:打印*/(“(”,p(分子(f)),”)/(“,p(分母(f),”*/

格式化线性重复签名

自动热键

(来自哈维·P·戴尔)

此脚本在后台运行,当您键入“indexp”时,它会将这些字符替换为指向重复索引页的链接。您可以选择安装自动热键并运行此脚本或使用可执行文件。