with(LinearAlgebra): with(linalg): with(numtheory): with(plots): numb:=table([" "=0,"a"=1, "b"=2, "c"=3, "d"=4, "e"=5, "f"=6, "g"=7, "h"=8, "i"=9, "j"=10, "k"=11, "l"=12, "m"=13, "n"=14, "o"=15, "p"=16, "q"=17, "r"=18, "s"=19, "t"=20, "u"=21, "v"=22, "w"=23, "x"=24, "y"=25, "z"=26]): alph:=table([0=" ",1="a",2="b",3="c",4="d",5="e",6="f",7="g",8="h",9="i",10="j",11="k",12="l",13="m",14="n",15="o",16="p",17="q",18="r",19="s",20="t",21="u",22="v",23="w",24="x",25="y",26="z"]): Numb:=table([" "=0,"!"=1, "\134""=2, "#"=3, "$"=4, "%"=5, "&"=6, "'"=7, "("=8, ")"=9, "*"=10, "+"=11, ","=12, "-"=13, "."=14, "/"=15, "0"=16, "1"=17, "2"=18, "3"=19, "4"=20, "5"=21, "6"=22, "7"=23, "8"=24, "9"=25, ":"=26, ";"=27, "<"=28, "="=29, ">"=30, "?"=31, "@"=32, "A"=33, "B"=34, "C"=35, "D"=36, "E"=37, "F"=38, "G"=39, "H"=40, "I"=41, "J"=42, "K"=43, "L"=44, "M"=45, "N"=46, "O"=47, "P"=48, "Q"=49, "R"=50, "S"=51, "T"=52, "U"=53, "V"=54, "W"=55, "X"=56, "Y"=57, "Z"=58, "["=59, "\134\134"=60, "]"=61, "^"=62, "_"=63, "`"=64, "a"=65, "b"=66, "c"=67, "d"=68, "e"=69, "f"=70, "g"=71, "h"=72, "i"=73, "j"=74, "k"=75, "l"=76, "m"=77, "n"=78, "o"=79, "p"=80, "q"=81, "r"=82, "s"=83, "t"=84, "u"=85, "v"=86, "w"=87, "x"=88, "y"=89, "z"=90, "{"=91, "|"=92, "}"=93, "~"=94]): Alph:=table([0=" ", 1="!", 2="\134"", 3="#", 4="$", 5="%", 6="&", 7="'", 8="(", 9=")", 10="*", 11="+", 12=",", 13="-", 14=".", 15="/", 16="0", 17="1", 18="2", 19="3", 20="4", 21="5", 22="6", 23="7", 24="8", 25="9", 26=":", 27=";", 28="<", 29="=", 30=">", 31="?", 32="@", 33="A", 34="B", 35="C", 36="D", 37="E", 38="F", 39="G", 40="H", 41="I", 42="J", 43="K", 44="L", 45="M", 46="N", 47="O", 48="P", 49="Q", 50="R", 51="S", 52="T", 53="U", 54="V", 55="W", 56="X", 57="Y", 58="Z", 59="[", 60="\134\134", 61="]", 62="^", 63="_", 64="`", 65="a", 66="b", 67="c", 68="d", 69="e", 70="f", 71="g", 72="h", 73="i", 74="j", 75="k", 76="l", 77="m", 78="n", 79="o", 80="p", 81="q", 82="r", 83="s", 84="t", 85="u", 86="v", 87="w", 88="x", 89="y", 90="z", 91="{", 92="|", 93="}", 94="~", 95=" ", 96=" ", 97=" ", 98=" ", 99=" "]): shift:=proc(txt,n) local i, z; z :=NULL; for i from 1 while i<= length(txt) do z:=cat(z,(alph[(numb[substring(txt,i)]+n-1 mod 26)+1])); end do; return(z); end: allshifts:= proc(txt) local i; for i from 0 while i<26 do print(shift(txt,i)); end do; end: affinecrypt:= proc(txt,m,n) local i,z; z:=NULL; for i from 1 while i<=length(txt) do z:=cat(z,(alph[((numb[substring(txt,i)]-1)*m+n mod 26)+1])); end do; return(z); end: vigenere:= proc(txt,v) local i,z; z:=NULL; for i from 1 while i<=length(txt) do z:=cat(z,alph[(numb[substring(txt,i)]+v[(i-1 mod nops(v))+1]-1 mod 26)+1]); end do; return(z); end: choose:=proc(txt,m,n) local i,z; z:=NULL; for i from n by m while i<= length(txt) do z:=cat(z,substring(txt,i)); end do; return(z); end: frequency:=proc(txt) local i,j,k,v,z; z:=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]; for i from 1 while i<= length(txt) do j:=numb[substring(txt,i)]; z:=subsop(j=z[j]+1,z); end do; return(z); end: vigvec:= proc(txt,m,n) local w,z,i; z:=choose(txt,m,n); w:=frequency(z)/length(z)*1.; return(w); end: alfreq:=[.082, .015, .028, .043, .127, .022, .020, .061, .070, .002, .008, .040, .024, .067, .075, .019, .001, .060, .063, .091, .028, .010, .023, .001, .020, .001]: corr:=proc(v) local i,j,w,z; w:=augment(matrix(1,26,v),matrix(1,26,v)); z:=seq(sum(alfreq[i]*w[1,i+j-1],i=1..26),j=1..26); return(z); end: coinc:=proc(txt,s) local i,w,z; z:=0; for i from 1 while i <= length(txt)-s do if substring(txt,i)=substring(txt,i+s) then z:=z+1 else z:=z fi; end do; return(z); end: lfsr:=proc(c,k,n) local f,i,j,r,z; z:=matrix(1,nops(k),k); for i from 1 while i<= n-nops(c) do z:=augment(z,matrix(1,1,[sum(z[1,j+i-1]*c[j],j=1..nops(c)) mod 2])); end do; z:=row(z,1);z:=[seq(z[i],i=1..n)]; end: lfsrlength:=proc(v,n) local w,z,i,j,k; for k from 1 while k<=n do w:=array(1..k,1..k); for i from 1 while i<= k do for j from 1 while j<= k do w[i,j]:=v[i+j-1]; end do; end do; print([k,det(w) mod 2]); end do; end: lfsrsolve:=proc(v,n) local w1,w,z,i,j,k; w1:=array(1..n,1..1); w:=array(1..n,1..n); for i from 1 while i<= n do for j from 1 while j<= n do w[i,j]:=v[i+j-1]; end do; end do; for i from 1 while i<= n do w1[i,1]:=v[i+n]; end do; z:=evalm(det(w)*transpose(evalm(inverse(w)&*w1))); z:=map(x->x mod 2,z); z:=[seq(z[1,i],i=1..n)]; z; end: text2num:=proc(txt) local i,z; z:=0; for i from 1 while i<=length(txt) do z:=100*z+numb[substring(txt,i)]; end do; return(z); end: num2text:=proc(n) local i,w,z; z:=NULL;w:=n; for i from 1 while 100^(i-1)<n do z:=cat(alph[w mod 100],z); w:=floor(w/100); end do; return(z); end: text1002num:=proc(txt) local i,z; z:=0; for i from 1 while i<=length(txt) do z:=100*z+Numb[substring(txt,i)]; end do; return(z); end: num2text100:=proc(n) local i,w,z; z:=NULL;w:=n; for i from 1 while 100^(i-1)<n do z:=cat(Alph[w mod 100],z); w:=floor(w/100); end do; return(z); end: cards:=[200514,10010311,1721050514,11091407,10305]: with(combinat,randperm): khide:=proc();2*rand()+101;end: shuffle:=proc(k) local z; z:=randperm({cards[1]&^k,cards[2]&^k,cards[3]&^k,cards[4]&^k,cards[5]&^k}mod 24691313099); return(z); end: reveal:=proc(c) local k1,z; k1:= k&^(-1) mod 24691313098; z:=[c[1]&^k1,c[2]&^k1,c[3]&^k1,c[4]&^k1,c[5]&^k1] mod 24691313099; z:=[num2text(z[1]),num2text(z[2]),num2text(z[3]),num2text(z[4]),num2text(z[5])]; return(z); end: advise:=proc(v) local i,w,z; w:=1; for i from 1 while w=1 do w:=v[i]&^((24691313099-1)/2) mod 24691313099; end do; return(i-1); end: addell:=proc(p1,p2,a,b,n) local z,z1,m,x3,y3,p3; z:=0; z1:=1; if p1=["infinity","infinity"] then p3:=p2; z:=1 else end if; if z=1 then NULL else if p2=["infinity","infinity"] then p3:=p1; z:=1 else end if end if; if z=1 then NULL else if p1[1]=p2[1] and p1[2]=0 then p3:=["infinity","infinity"]; z:=1 else end if end if; if z=1 then NULL else if p1[1]=p2[1] and p1[2]<>p2[2] then p3:=["infinity","infinity"]; z:=1 else end if end if; if z=1 then NULL else if p1=p2 and gcd(p1[2],n)<>1 and gcd(p1[2],n)<>n then z1:=gcd(p1[2],n); z:=1 else end if end if; if z=1 then NULL else if p1=p2 then m:=((3*p1[1]^2+a)*((2*p1[2])&^(-1) mod n)) mod n; z:=1; x3:=(m^2-p1[1]-p2[1]) mod n; y3:=(m*(p1[1]-x3)-p1[2]) mod n; p3:=[x3,y3]; else end if end if; if z=1 then NULL else if gcd(p2[1]-p1[1],n)<>1 then z:=1;z1:=gcd(p2[1]-p1[1],n) else end if end if; if z=1 then NULL else m:= ((p2[2]-p1[2])*((p2[1]-p1[1])&^(-1) mod n)) mod n; x3:=(m^2-p1[1]-p2[1]) mod n; y3:= (m*(p1[1]-x3)-p1[2]) mod n; p3:= [x3,y3] end if; if z1=1 then return(p3) else return(["factor=",z1]) end if; end: multsell:=proc(p1,m,a,b,n) local i,z; z:=[[1,p1]]; for i from 2 while i<=m and z[-1][2][1]<>"factor=" do z:=[op(z),[1+nops(z),addell(p1,z[nops(z)][2],a,b,n)]]; end do; return(z); end: multell:=proc(p,m,a,b,n) local i,j,q,y,z1; y:=["infinity","infinity"]; q:=p; z1:=m; for i from 1 while z1<>0 and y[1]<>"factor=" do for j from 1 while z1 mod 2 = 0 and q[1]<>"factor=" do z1:=z1/2; q:=addell(q,q,a,b,n); end do; z1:=z1-1; y:=addell(q,y,a,b,n); end do; if q[1]="factor=" then y:=q else NULL end if; return(y); end: gaul:= "gaulisdividedintothreeparts": ycve:= "ycvejqwvhqtdtwvwu": edsg:= "edsgickxhuklzveqzvkxwkzukcvuh": tcab:= "tcabtiqmfheqqmrmvmtmaq": lcll:="lcllewljazlnnzmvyiylhrmhza": DNA:= "GAATTCGCGGCCGCAATTAACCCTCACTAAAGGGATCTCTAGAACT": xkju:= "xkjurowmllpxwznpimbvbqjcnowxpcchhvvfvsllfvxhazityxohulxqojaxelxzxmyjaqfs\134 tsrulhhucdskbxknjqidallpqslluhiaqfpbpcidsvcihwhwewthbtxrljnrsncihuvffuxvoukjlj\134 swmaqfvjwjsdyljogjxdboxajultucpzmpliwmlubzxvoodybafdskxgqfadshxnxehsaruojaqfpf\134 kndhsaafvulluwtaqfrupwjrszxgpfutjqiynrxnyntwmhcukjfbirzsmehhsjshyonddzzntzmpli\134 lrwnmwmlvuryonthuhabwnvw": ocwy:= "ocwyikoooniwugpmxwktzdwgtssayjzwyemdlbnqaaavsuwdvbrflauplooubfgqhgcscmgz\134 latoedcsdeidpbhtmuovpiekifpimfnoamvlpqfxejsmxmpgkccaykwfzpyuavtelwhrhmwkbbvgtg\134 uvtefjlodfefkvpxsgrsorvgtajbsauhzrzalkwuowhgedefnswmrciwcpaaavogpdnfpktdbalsis\134 urlnpsjyeatcuceesohhdarkhwotikbroqrdfmzghgucebvgwcdqxgpbgqwlpbdaylooqdmuhbdqgm\134 yweuik": hdsf:= "hdsfgvmkoowafweetcmfthskucaqbilgjofmaqlgspvatvxqbiryscpcfrmvswrvnqlszd\134 mgaoqsakmlupsqforvtwvdfcjzvgsoaoqsacjkbrsevbelvbksarlscdcaarmnvrysywxqgvellcyl\134 uwwveoafgclazowafojdlhssfiksepsoywxafowlbfcsocylngqsyzxgjbmlvgrggokgfgmhlmejab\134 sjvgmlnrvqzcrggcrghgeupcyfgtydycjkhqluhgxgzovqswpdvbwsffsenbxapasgazmyuhgsfhmf\134 tayjxmwznrsofrsoaopgauaaarmftqsmahvqecev": vvhq:= "vvhqwvvrhmusgjgthkihtssejchlsfcbgvwcrlryqtfsvgahwkcuhwauglqhnslrljshbl\134 tspisprdxljsveeghlqwkasskuwepwqtwvspgoelkcqyfnsvwljsniqkgnrgybwlwgoviokhkazkqk\134 xzgyhcecmeiujoqkwfwvefqhkijrclrlkbienqfrjljsdhgrhlsfqtwlauqrhwdmwlgusgikkflryv\134 cwvspgpmlkassjvoqxeggveyggzmljcxxljsvpaivwikvrdrygfrjljslveggveyggeiapuuisfpbt\134 gnwwmuczrvtwglrwugumnczvile": L100:= [1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0]: L011:= [0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1]: L101:= [1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0]: rsan:= 11438162575788886766923577997614661201021829672124236256256184293570693\134 5245733897830597123563958705058989075147599290026879543541: rsae:= 9007: rsaci:= 9686961375462206147714092225435588290575999112457431987469512093081629\134 8225145708356931476622883989628013391990551829945157815154: rsap:= 3490529510847650949147849619903898133417764638493387843990820577: rsaq:= 32769132993266709549961988190834461413177642967992942539798288533: naive:= 152415787501905985701881832150835089037858868621211004433: cnaive:= 141077461765569500241199505617854673388398574333341423525: n1:=8834884587090814646372459890377418962766907: sigpairm1:=418726553997094258577980055061305150940547956: sigpairs1:=749142649641548101520133634736865752883277237: sigpairm2:=14823765232498712344512418717130930: sigpairs2:=43176121628465441340112418672065063: signa:=171024704183616109700818066925197841516671277: signb:=839073542734369359260871355939062622747633109: sigpb:=98763457697834568934613: sigqb:=8495789457893457345793: golay:=matrix(12,24,[1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,1,1,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,1,0,1,1,0,1,1,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,1,0,1,1,0,1,1,1,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,1,1,0,1,1,1,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,0,0,1,0,1,1,0,1,1,0,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,1,0,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,1,0,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,1,1,1,1,1]): golayb:=matrix(12,12,[1,1,1,0,1,1,1,0,0,0,1,0,1,0,1,1,0,1,1,1,0,0,0,1,1,1,0,1,1,0,1,1,1,0,0,0,1,0,1,0,1,1,0,1,1,1,0,0,1,0,0,1,0,1,1,0,1,1,1,0,1,0,0,0,1,0,1,1,0,1,1,1,1,1,0,0,0,1,0,1,1,0,1,1,1,1,1,0,0,0,1,0,1,1,0,1,1,1,1,1,0,0,0,1,0,1,1,0,1,0,1,1,1,0,0,0,1,0,1,1,1,1,0,1,1,1,0,0,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1]): hammingpc:=matrix(4,15,[0,0,0,0,1,1,1,1,1,1,1,1,0,0,0, 1,1,1,0,0,0,0,1,1,1,1,0,1,0,0,0,1,1,1,0,1,1,0,0,1,1,0,0,1,0, 1,0,1,1,1,0,1,0,1,0,1,0,0,0,1]): XXXX:= "DON'T FORGET TO HIT RETURN TO LOAD THE ABOVE COMMANDS BEFORE STARTING YOUR WORK. PUT THE CURSOR HERE, OR HIGHER, BEFORE HITTING RETURN.": JSFH