DelVekM menghapus baris ke-i pada matriks M representasi kolom. =M[2]; d:=5: k:=B[1]; W:=NonZeroWtB; =mind-1,k; L:=ListKombMM, =M[2]; d:=5: k:=B[1]; W:=NonZeroWtB;

for Z in R do X:={opY,opZ}: T:=UjiAdd1VekMd,X,L; if T=true then C:=[opC,X]: end if: end do: end do: end if: end do: end do: returnC; end proc:

1.3.9 ReduEki1 membuang anggota output Kolek1VekM dan menyisakan vektor-

vektor yang menghasilkan matriks-matriks tidak saling ekivalen jika ditambahkan ke M, ReduEki1:=procH::list,M::list local i,h::integer, A,L,G,K,R::list, Q,S::set: h:=nopsH: A:=H[1]: G:=AddVekMA,M: K:=UbahMtxRCG: L:=sortmapS-UbahSetKeDesS,K[2]: R:=[A]: Q:={L}: for i from 2 to h do A:=H[i]: G:=AddVekMA,M: K:=UbahMtxRCG: L:=sortmapS-UbahSetKeDesS,K[2]: S:={L} intersect Q: if S={} then Q:={opQ,L}: R:=[opR,A]: end if: end do: returnR: end proc:

1.3.10 Misalkan himpunan H adalah output Kolek1VekM, setiap pasangan vektor

X,Y anggota H akan mehasilkan vektor Z = X + Y. Agar dua vektor X dan Y bisa ditambahkan langsung ke matriks M, maka Z diuji dengan prosedur UjiAdd2VekM berdasarkan output ListKombM. UjiAdd2VekM:=procd::posint,Z::set,L::list local H,G::list, i,j,g,b,k,n,t::integer: if nopsZd-2 then returnfalse end if; H:=L: k:=nopsL[1]: n:=mind-3,k: for i from 1 to n do G:=H[i]: g:=nopsG: b:=d-2-i: for j from 1 to g do t:=HmDistZ,G[j]: if tb then returnfalse; end if: end do: end do: returntrue; end proc:

1.3.11 Kolek2VekM menentukan himpunan semua pasang X,Y dalam yang bisa

ditambahkan ke M berdasarkan teorema Gilbert-Vashamov. Prosedur ini menggunakan UjiAdd2VekM. Kolek2VekM:=procd::posint,H::list,L::list,c::posint local X,Y,Z::set, C::list, h,i,j::integer, T::symbol: h:=nopsH: C:=[]: for i from 1 to h-1 do X:=H[i]: for j from i+1 to h do Y:=H[j]: Z:=AddVX,Y: T:=UjiAdd2VekMd,Z,L: if T=true then C:=[opC,{X,Y}]: if nopsC=c then C:=[op{opC}]: returnC; end if: end if: end do: end do: C:=[op{opC}]: returnC: end proc:

1.3.12 kolek2VekMDt menentukan himpunan semua pasang X,Y menggunakan

data hasil sebelumnya. Kolek2VekMDt:=procd::posint,H::list,L::list,c::posint,Dat::li st local X,Y,Z::set, h,i,j,k::integer, F,C::list, T::symbol: C:=Dat[2]: k:=Dat[1]: h:=nopsH: for i from k to h-1 do X:=H[i]: for j from i+1 to h do Y:=H[j]: Z:=AddVX,Y: T:=UjiAdd2VekMd,Z,L: if T=true then C:=[opC,{X,Y}]: if nopsC=c then C:=[op{opC}]: F:=[i,C]: save F, D:\\coding new\\ Coding Theory\\DataOutD7Xt\\DatTemp2.m; returnC; end if: end if: end do: end do: F:=[op{opC}]: save F, D:\\coding new\\Coding Theory\\DataOutD7Xt\\DatTemp2.m; returnF: end proc:

1.3.13 ReduEkiX membuang anggota output Kolek2VekM dan menyisakan

vektor-vektor yang menghasilkan matriks-matriks tidak saling ekivalen jika ditambahkan ke M, ReduEkiX:=procH::list,M::list local i,h::integer, A,L,G,K,R::list, Q,S::set: h:=nopsH: A:=H[1]: G:=AddVekMXA,M: K:=UbahMtxRCG: L:=sortmapS-UbahSetKeDesS,K[2]: R:=[A]: Q:={L}: for i from 2 to h do A:=H[i]: G:=AddVekMXA,M: K:=UbahMtxRCG: L:=sortmapS-UbahSetKeDesS,K[2]: S:={L} intersect Q: if S={} then Q:={opQ,L}: R:=[opR,A]: end if: end do: returnR: end proc:

1.3.14 Misalkan himpunan H adalah output Kolek2VekM, setiap pasangan vektor

X,Y,Z anggota H akan mehasilkan vektor W = X + Y + Z. Agar dua vektor X, Y dan Z bisa ditambahkan langsung ke matriks M, maka U diuji dengan prosedur UjiAdd3VekM berdasarkan output ListKombM. UjiAdd3VekM:=procd::posint,U::set,L::list local H,G::list, i,j,g,b,k,n,t::integer: if nopsUd-3 then returnfalse end if; H:=L: k:=nopsL[1]: n:=mind-4,k: for i from 1 to n do G:=H[i]: g:=nopsG: b:=d-3-i: for j from 1 to g do t:=HmDistU,G[j]: if tb then returnfalse; end if: end do: end do: returntrue; end proc:

1.3.15 Misalkan himpunan H adalah output Kolek3VekM, setiap 4 vektor

X,Y,Z,W anggota H akan mehasilkan vektor U = W + X + Y + Z. Agar dua vektor X, Y,Z dan W bisa ditambahkan langsung ke matriks M, maka U diuji dengan prosedur UjiAdd4VekM berdasarkan output ListKombM. UjiAdd4VekM:=procd::posint,U::set,L::list local H,G::list, i,j,g,b,k,n,t::integer: if nopsUd-4 then returnfalse end if; H:=L: k:=nopsL[1]: n:=mind-5,k: for i from 1 to n do G:=H[i]: g:=nopsG: b:=d-4-i: for j from 1 to g do t:=HmDistU,G[j]: if tb then returnfalse; end if: end do: end do: returntrue; end proc:

1.3.16 SplitHX menentukan himpunan semua pasang X,Y dalam yang bisa

ditambahkan ke M berdasarkan teorema Gilbert-Vashamov. Prosedur ini menggunakan UjiAdd2VekM. SplitHX:=procd::posint,P::list,H::list,L::list local A,B,X,Y,Z,M,R,S,U::set, i,j,k,s,a::integer, T,T1::symbol: A:=P[1]: B:=P[2]: a:=nopsA: if a=0 then s:=op1,B: B:=subsop1=NULL,B: X:=H[s]: U:={}: for i in B do Y:=H[i]: Z:=AddVX,Y: T:=UjiAdd2VekMd,Z,L: if T=true then U:={opU,i}: end if: end do: return[[{s},U],[{},B]]: else s:=op1,B: B:=subsop1=NULL,B: X:=H[s]: U:={}: for i in B do Y:=H[i]: Z:=AddVX,Y: T:=UjiAdd2VekMd,Z,L: if T=true then for j from 1 to a do M:=combinat[choose]A,j: T1:=true: for R in M while T1=true do S:=Z: for k in R do S:=AddVS,H[k]: end do: T1:=UjiAddXVekM2+j,d,S,L: end do: if T1=false then break; end if: end do: if T1=true then U:={opU,i}: end if: end if: end do: return[[{opA,s},U],[A,B]]: end if: end proc: MoveRNX:=procR::list,N::list,c::integer,y::integer local X,L,M::list, A::set, i,x1,x2::integer: M:=N: A:={}: for i from 1 to nopsR do X:=R[i]: x1:=nopsX[1]: x2:=nopsX[2]: if x1=y and x2c then M:=[opM,X]: A:={opA,i}: elif x1+x2y+c or x2=0 then A:={opA,i}: end if: end do: L:=subsopopmapx-x=NULL,A,R: return[L,M]: end proc: IdxAddXV:=procd::posint,P::list,H::list,L::list,c::integer,y: :integer local R,N,T::list, i,s::integer: R:=SplitHXd,P,H,L: N:=[]: T:=MoveRNXR,N,c,y: R:=T[1]: N:=T[2]: for i while R[] do R:=mapx-opSplitHXd,x,H,L,R: T:=MoveRNXR,N,c,y: R:=T[1]: N:=T[2]: end do: returnN: end proc:

1.3.17 Misalkan himpunan H adalah output KolekX-1VekM, setiap X vektor

anggota H akan mehasilkan jumlah. Agar X vektor ini bisa ditambahkan langsung ke matriks M, maka diuji dengan prosedur UjiAddXVekM berdasarkan output ListKombM. UjiAddXVekM:=procx::posint,d::posint,U::set,L::list local H,G::list, i,j,g,b,k,n,t::integer: if nopsUd-x then returnfalse end if; H:=L: k:=nopsL[1]: n:=mind-x-1,k: for i from 1 to n do G:=H[i]: g:=nopsG: b:=d-x-i: for j from 1 to g do t:=HmDistU,G[j]: if tb then returnfalse; end if: end do: end do: returntrue; end proc:

1.3.18 Misalkan himpunan H adalah output Kolek4VekM, setiap 5 vektor

X,Y,Z,V,W anggota H akan mehasilkan vektor U = W+V + X + Y + Z. Agar dua vektor X, Y,Z,V dan W bisa ditambahkan langsung ke matriks M, maka U diuji dengan prosedur UjiAdd5VekM berdasarkan output ListKombM . UjiAdd5VekM:=procd::posint,U::set,L::list local H,G::list, i,j,g,b,k,n,t::integer: if nopsUd-5 then returnfalse end if; H:=L: k:=nopsL[1]: n:=mind-6,k: for i from 1 to n do G:=H[i]: g:=nopsG: b:=d-5-i: for j from 1 to g do t:=HmDistU,G[j]: if tb then returnfalse; end if: end do: end do: returntrue; end proc:

1.3.19 Kolek5VekMDt menentukan himpunan semua pasang X,Y,Z,U,W

menggunakan data hasil sebelumnya. Kolek5VekMDt:=procd::posint,H::list,L::list,c::posint,Dat:: list local X,Y,Z,U,U1,U2,U3,V,W1,W2,W3,R,S,A::set, h,i,j,k::integer, T,T1,T2,T3::symbol, C,F::list: C:=Dat[2]: k:=Dat[1]: h:=nopsH: for i from k to h-1 do X:=H[i]: for j from i+1 to h do Y:=H[j]: Z:=X union Y: if nopsZ=5 then S:=X intersect Y: V:=Z minus S: A:=AddVop1,V,op2,V: T:=UjiAdd2VekMd,A,L: if T=true then U1:=AddVop1,S,A: U2:=AddVop2,S,A: U3:=AddVop3,S,A: T1:=UjiAdd3VekMd,U1,L: T2:=UjiAdd3VekMd,U2,L: T3:=UjiAdd3VekMd,U3,L: if T1=true and T2=true and T3=true then W1:=AddVop2,S,U1: W2:=AddVop3,S,U1: W3:=AddVop3,S,U2: T1:=UjiAdd4VekMd,W1,L: T2:=UjiAdd4VekMd,W2,L: T3:=UjiAdd4VekMd,W3,L: if T1=true and T2=true and T3=true then R:=AddVop3,S,W1: T:=UjiAdd5VekMd,R,L: if T=true then C:=[opC,{opZ}]: if nopsC=c then C:=[op{opC}]: F:=[i,C]: save F, D:\\coding new\\Coding Theory\\DataOutD7Xt\\DatTemp5.m; returnC; end if: end if: end if: end if: end if: end if: end do: end do: F:=[op{opC}]: save F, :\\coding new\\Coding Theory\\DataOutD7Xt\\DatTemp5.m; returnF: end proc: Kolek5VekMDtX:=procd::posint,H::list,L::list,c::posint,Dat::l ist local X,Y,Z,U,U1,U2,U3,V,W1,W2,W3,R,S,A,C,K::set, h,i,j,k::integer, T,T1,T2,T3::symbol, F::list: C:={opDat[2]}: k:=Dat[1]: h:=nopsH: for i from k to h-1 do X:=H[i]: for j from i+1 to h do Y:=H[j]: Z:=X union Y: if nopsZ=5 then K:={Z} intersect C: if K={} then S:=X intersect Y: V:=Z minus S: A:=AddVop1,V,op2,V: T:=UjiAdd2VekMd,A,L: if T=true then U1:=AddVop1,S,A: U2:=AddVop2,S,A: U3:=AddVop3,S,A: T1:=UjiAdd3VekMd,U1,L: T2:=UjiAdd3VekMd,U2,L: T3:=UjiAdd3VekMd,U3,L: if T1=true and T2=true and T3=true then W1:=AddVop2,S,U1: W2:=AddVop3,S,U1: W3:=AddVop3,S,U2: T1:=UjiAdd4VekMd,W1,L: T2:=UjiAdd4VekMd,W2,L: T3:=UjiAdd4VekMd,W3,L: if T1=true and T2=true and T3=true then R:=AddVop3,S,W1: T:=UjiAdd5VekMd,R,L: if T=true then C:=C union {Z}: if nopsC=c then F:=[i,[opC]]: save F, D:\\coding new\\Coding Theory\\DataOutD7Xt\\DatTemp5.m; return[opC]; end if: end if: end if: end if: end if: end if: end if: end do: end do: F:=[opC]: save F, D:\\coding new\\Coding Theory\\DataOutD7Xt\\DatTemp5.m; returnF: end proc:

1.3.20 KolekXVekM menentukan himpunan semua X vektor yang bisa

ditambahkan ke M berdasarkan teorema Gilbert-Vashamov. Prosedur ini menggunakan UjiAddXVekM. KolekXVekM:=procx::posint,d::posint,H::list,L::list,c::posint local X,Y,Z,U,V,S,A,B,R,N,K,W,Q::set, h,i,j,k,l::integer, T,T1::symbol, C::list: h:=nopsH: C:=[]: for i from 1 to h-1 do X:=H[i]: for j from i+1 to h do Y:=H[j]: Z:=X union Y: if nopsZ=x then S:=X intersect Y: V:=Z minus S: A:=AddVop1,V,op2,V: T:=UjiAdd2VekMd,A,L: if T=true then for k from 1 to x-3 do N:=combinat[choose]S,k; T1:=true: for R in N while T1=true do B:=A: for K in R do B:=AddVB,K: end do: T1:=UjiAddXVekM2+k,d,B,L: end do: if T1=false then break; end if: end do: if T1=true then W:=opS minus R: Q:=AddVB,W: T:=UjiAddXVekMx,d,Q,L: if T=true then C:=[opC,{opZ}]: if nopsC=c then C:=[op{opC}]: returnC: end if: end if: end if: end if: end if: end do: end do: C:=[op{opC}]: returnC: end proc:

1.3.21 KolekXVekMDt menentukan himpunan semua pasang X,Y,Z,U,W

menggunakan data hasil sebelumnya. KolekXVekMDt:=procx::posint,d::posint,H::list,L::list,c::posi nt,Dat::list local X,Y,Z,U,V,S,A,B,R,N,K,W,Q::set, h,i,j,k,l,t::integer, T,T1::symbol, C,F::list: C:=Dat[2]: t:=Dat[1]: h:=nopsH: for i from t to h-1 do X:=H[i]: for j from i+1 to h do Y:=H[j]: Z:=X union Y: if nopsZ=x then S:=X intersect Y: V:=Z minus S: A:=AddVop1,V,op2,V: T:=UjiAdd2VekMd,A,L: if T=true then for k from 1 to x-3 do N:=combinat[choose]S,k; T1:=true: for R in N while T1=true do B:=A: for K in R do B:=AddVB,K: end do: T1:=UjiAddXVekM2+k,d,B,L: end do: if T1=false then break; end if: end do: if T1=true then W:=opS minus R: Q:=AddVB,W: T:=UjiAddXVekMx,d,Q,L: if T=true then C:=[opC,{opZ}]: if nopsC=c then C:=[op{opC}]: F:=[i,C]: save F, D:\\coding new\\Coding Theory\\DataOutD7Xt\\DatTemp6.m; returnC: end if: end if: end if: end if: end if: end do: end do: F:=[op{opC}]: save F, D:\\coding new\\Coding Theory\\DataOutD7x\\DatTemp6.m; returnF: end proc:

1.3.22 Kolek5VM menentukan himpunan semua pasang X,Y,Z dalam yang bisa

ditambahkan ke M berdasarkan teorema Gilbert-Vashamov. Prosedur ini menggunakan UjiAdd3VekM. KolekXVM:=procd::posint,N::list,H::list,L::list,m::integer local A,B,R,Y,Z,V,M,S::set, i,n,y1,y2,k,j::integer, X,K::list, T1,T::symbol: n:=nopsN: K:=[]: for i from 1 to n do X:=N[i]: A:=X[1]: B:=X[2]: R:=combinat[choose]B,2: for Y in R do y1:=op1,Y: y2:=op2,Y: V:=AddVH[y1],H[y2]: T:=UjiAdd2VekMd,V,L: if T=true then for j from 1 to m do M:=combinat[choose]A,j: T1:=true: for Z in M while T1=true do S:=V: for k in Z do S:=AddVS,H[k]: end do: T1:=UjiAddXVekM2+j,d,S,L: end do: if T1=false then break; end if: end do: if T1=true then K:=[opK,{H[y1],H[y2],H[op1,A],H[op2,A],H[op3,A]}]: end if: end if: end do: end do: returnK: end proc: DefH4 DefHX:=procK::list,H::list local X1,X2,R::set, X,L::list, k,i::integer: k:=nopsK: L:=[]: for i from 1 to k do X:=K[i]: X1:=X[1]: X2:=X[2]: R:=mapx-{opX1,x},X2: L:=[opL,opR]: end do: L:=mapS-mapx-opx,H,S,L: returnL: end proc: Lampiran 2 Eksplorasi Konstruksi Kode Optimal Kuat untuk d = 5 Konstruksi Kode Optimal Kuat [8,2,5], dengan menggunakan satu kali basis matriks sebagai berikut: B:=[2,[{0,1},{0,1},{0},{0},{1},{1}]]; M:=UbahMtxCRB; r:=M[2]; d:=5: k:=B[1]; W:=NonZeroWtB; Code526:=B; save Code526, D:\\Coding Theory\\CdD5k2r6.m; Konstruksi Kode Optimal Kuat [11,4,5] , dengan menggunakan satu kali basis matriks sebagai berikut: B:=[2,[{0,1},{0,1},{0},{0},{1},{1},{}]]; M:=UbahMtxCRB; r:=M[2]; d:=5: k:=B[1]; W:=NonZeroWtB; t:=mind-1,k; L:=ListKombMM,t: H:=Kolek1VekMd,r,r,L: nopsH; H2:=Kolek2VekMd,H,L,1000: nopsH2; Q:=ReduEkiXcH2,M: nopsQ; T:=mapX-AddVekMXX,M,Q: Code547:=mapX-UbahMtxRCX,T: C4PX:=Code547[11]; NonZeroWtC4PX; save Code547, D:\\Coding Theory\\CdD5k4r7.m; Konstruksi Kode Optimal Kuat [17,9,5] , dengan menggunakan satu kali basis matriks sebagai berikut: B:=[C4PX[1],[opC4PX[2],{}]]; M:=UbahMtxCRB; r:=M[2]; d:=5: k:=B[1]; W:=NonZeroWtB; t:=mind-1,k; L:=ListKombMM,t: H:=Kolek1VekMd,r,r,L: nopsH; H2:=Kolek2VekMd,H,L,1000: nopsH2; Q:=ReduEkiXH2,M: nopsQ; H3:=Kolek3VekMd,H2,L,10000: nopsH3; Q:=ReduEkiXH3,M: nopsQ; H4:=Kolek4VekMd,Q,L,10000: nopsH4; Q:=ReduEkiXH4,M: nopsQ; H5:=KolekXVekM5,d,Q,L,10000: nopsH5; Q:=ReduEkiXH5,M: nopsQ; T:=mapX-AddVekMXX,M,Q: Code598:=mapX-UbahMtxRCX,T: C9PX:=Code598[1]; NonZeroWtC9PX; save Code598, D:\\ Coding Theory\\CdD5k9r8.m; Konstruksi Kode Optimal Kuat [23,14,5] , dengan menggunakan satu kali basis matriks sebagai berikut: B :=[C9PX[1],[opC9PX[2],{}]]; M:=UbahMtxCRB; r:=M[2]; d:=5: k:=B[1]; W:=NonZeroWtB; t:=mind-1,k; L:=ListKombMM,t: H:=Kolek1VekMd,r,r,L: nopsH; H2:=Kolek2VekMd,H,L,5000: nopsH2; Q:=ReduEkiXH2,M: nopsQ; H3:=Kolek3VekMd,H2,L,5000: nopsH3; Q:=ReduEkiXH3,M: nopsQ; H4:=Kolek4VekMd,Q,L,5000: nopsH4; Q:=ReduEkiXH4,M: nopsQ; H5:=KolekXVekM5,d,Q,L,1: nopsH5; Tidak berhasil menjangkau [23,14,5], hanya diperoleh [22,13,5] . T:=mapX-AddVekMXX,M,Q: Code13:=mapX-UbahMtxRCX,T: C13PX:=Code13[800]; NonZeroWtC13PX; i:=1: B1:=DelVekMi,C13PX: j:=3: B:=DelVekMj,B1: M:=UbahMtxCRB; r:=M[2]; d:=5: k:=B[1]; t:=mind-1,k; L:=ListKombMM,t: H:=Kolek1VekMd,r,r,L: nopsH; H2:=Kolek2VekMd,H,L,5000: nopsH2; Q:=ReduEkiXH2,M: nopsQ; H3:=Kolek3VekMd,H2,L,5000: nopsH3; Q:=ReduEkiXH3,M: nopsQ; Diperoleh kode Optimal kuat [23,14,5]. T:=mapX-AddVekMXX,M,Q: Code14:=mapX-UbahMtxRCX,T: C14P1:=Code14[1]; NonZeroWtC14P1; save Code5149, D:\\ Coding Theory\\CdD5k14r9.m; Konstruksi Kode Optimal Dimensi 14 , dengan menggunakan satu kali basis matriks sebagai berikut: B:=[C14P2[1],[opC14P2[2],{}]]; M:=UbahMtxCRB; r:=M[2]; d:=5: k:=B[1]; t:=mind-1,k; L:=ListKombMM,t: H:=Kolek1VekMd,r,r,L: nopsH; Q:=ReduEki1H,M: nopsQ; H2:=Kolek2VekMd,Q,L,20000: nopsH2; Q:=ReduEkiXH2,M: nopsQ; H3:=Kolek3VekMd,H2,L,100000: nopsH3; Q:=ReduEkiXH3,M: nopsQ; H4:=Kolek4VekMd,H3,L,150000: nopsH4; Q:=ReduEkiXH4,M: nopsQ; H5:=KolekXVekM5,d,Q,L,50000: