ez:=proc(): print(` Fqn(q,n), HD(u,v), RV(q,n), RC(q,n,d,K), SPB(q,n,t), Nei1(q,v), Sph(q,v,d), GRC(q,n,d), MinD(C), CV(S,n) , DeCode(v,C), LC(p) `): print(`Simu1(v,p,C)`): print(`BDtoC({{1,2,4},{2,3,5},{3,4,6},{4,5,7},{5,6,1},{6,7,2},{7,1,3}},7);`): end: #Fqn(q,n): all words in the alphabet {0,1,..,q-1} of length n. Try: #Fqn(2,6); Fqn:=proc(q,n) local i,S,v: option remember: if n=0 then RETURN({[]}) fi: S:=Fqn(q,n-1): {seq(seq([op(v),i],i=0..q-1), v in S)}: end: #HD(u,v); The Hamming distance between u and v HD:=proc(u,v) local i,co: co:=0: for i from 1 to nops(u) do if u[i]<>v[i] then co:=co+1: fi: od: co: end: #RV(q,n): A random vector of length n in {0,...,q-1} RV:=proc(q,n) local S:[seq(rand(0..q-1)(),i=1..n)]:end: #RC(q,n,d,K): attempts to construct an (n,M,d) code with as large M as possible by trying out K random vectors. Try: #RC(2,10,3,1000); RC:=proc(q,n,d,K) local C,v,c,i: C:={}: for i from 1 to K do v:=RV(q,n): if min(seq(HD(v,c),c in C))>=d then C:=C union {v}: fi: od: C: end: #SPB(q,n,t): The sphere-packing bound for q-ary (n,M,2*t+1) code. Try: #SPB(2,7,1); SPB:=proc(q,n,t) local i: 2^n/add(binomial(n,i)*(q-1)^i,i=0..t): end: Nei1:=proc(q,v) local i,a :{seq(seq([op(1..i-1,v),a,op(i+1..nops(v),v)],a=0..q-1),i=1..nops(v))}:end: #Sph(q,v,d): The ball of radius d around the vector v in F_q^n Sph:=proc(q,v,d) local S,v1: if d=0 then RETURN({v}): fi: S:=Sph(q,v,d-1): {seq(op(Nei1(q,v1)), v1 in S)}: end: #GRC(q,n,d): creates an (n,M,d) code using the greedy approach GRC:=proc(q,n,d) local C,A,v: A:=Fqn(q,n): C:={}: while A<>{} do v:=A[1]: A:=A minus Sph(q,v,d-1): C:=C union {v}: od: C: end: #GRCn(q,n,d): creates an (n,M,d) code using the greedy approach GRCn:=proc(q,n,d) local C,A,v: A:=Fqn(q,n): C:={}: while A<>{} do v:=A[rand(1..nops(A))()]: A:=A minus Sph(q,v,d-1): C:=C union {v}: od: C: end: #CV(S,n) CV:=proc(S,n) local i,v: if S minus {seq(i,i=1..n)}<>{} then RETURN(FAIL): fi: v:=[]: for i from 1 to n do if member(i,S) then v:=[op(v),1]: else v:=[op(v),0]: fi: od: v: end: MinD:=proc(C) local i,j: min(seq(seq(HD(C[i],C[j]),j=i+1..nops(C)),i=1..nops(C))): end: #BDtoC(BD,n): forms a code from the block-design BD. Try: #BDtoC({{1,2,4},{2,3,5},{3,4,6},{4,5,7},{5,6,1},{6,7,2},{7,1,3}},7); BDtoC:=proc(BD,n) local C,S: C:={seq(CV(S,n),S in BD)}: C union subs({0=1,1=0},C) union {[0$n],[1$n]}: end: #DeCode(v,C): The closest member of C to v. Try #DeCode([0,0,0,0,0],{[0,1,0,1,1],[0,1,0,0,1]}); DeCode:=proc(v,C) local rec,cha,hope,i: cha:=C[1]: rec:=HD(v,cha): for i from 2 to nops(C) do hope:=HD(v,C[i]): if hope