function []=donkmap(k,l) n=4; //four variable kmap k(:,:,2)=zeros(n,n); //temporary matrix to know whether a element is paired or not //declaring notations to display output var=['y' 'z' 'w' 'x']; p1=['y''z''' 'y''z' 'yz' 'yz''']; p2=['w''x''';'w''x';'wx';'wx''']; //minimum redundant elements accepted while pairing cmn4=4; cmn2=2; temp=1; printf('f'); printf('%1d',l); printf("="); //16 cells for i=1:n for j=1:n if(k(i,j)~=1 | k(i,j)~=2) temp=0; break; end end end if(temp==1) printf("1"); abort; end //8 cells z1=ones(2,4); z2=ones(4,2); temp1=['00' '01' '11' '10']; temp2=temp1'; for i=1:n if(i==4) t=1; else t=i+1; end z=[k(i,:,1);k(t,:,1)]; if(number_of(z,0)==0 & number_of(z,1)>1) k(i,:,2)=[1 1 1 1]; k(t,:,2)=[1 1 1 1]; a=strsplit(temp2(i,1)); b=strsplit(temp2(t,1)); c=strcmp(a,b); for in=1:max(size(c)) if(c(in)==0 & a(in)=='0') printf('%s''',var(in)); printf('+'); break; else if(c(in)==0 & a(in)=='1') printf(var(in)); printf('+'); break; end end end end end for j=1:n if(j==4) t=1; else t=j+1; end z=[k(:,j,1) k(:,t,1)]; if(number_of(z,0)==0 & number_of(z,1)>0) k(:,j,2)=[1;1;1;1]; k(:,t,2)=[1;1;1;1]; a=strsplit(temp1(1,j)); b=strsplit(temp1(1,t)); c=strcmp(a,b); for in=1:max(size(c)) if(c(in)==0 & a(in)=='0') printf('%s''',var(2+in)); printf('+'); break; else if(c(in)==0 & a(in)=='1') printf(var(2+in)); printf('+'); break; end end end end end //4 cells z1=ones(1,4); z2=ones(4,1); z3=ones(2,2); temp1=['00' '01' '11' '10']; temp2=temp1'; for t=1:n z=k(t,:,1); no=number_of(k(t,:,2),1); if(number_of(z,0)==0 & no<cmn4 & number_of(z,1)>0) k(t,:,2)=z1; a=strsplit(temp1(1,t)); for in=1:max(size(a)) if(a(in)=='0') printf('%s''',var(in)); end if(a(in)=='1') printf(var(in)); end end printf("+"); end end for t=1:n z=k(:,t,1); no=number_of(k(:,t,2),1); if(number_of(z,0)==0 & no<cmn4 & number_of(z,1)>0) k(:,t,2)=z2; a=strsplit(temp2(t,1)); for in=1:max(size(a)) if(a(in)=='0') printf('%s''',var(2+in)); end if(a(in)=='1') printf(var(2+in)); end end printf("+"); end end for i=1:n for j=1:n if(i==n) t1=1; else t1=i+1; end if(j==n) t2=1; else t2=j+1; end z4=[k(i,j,1) k(i,t2,1);k(t1,j,1) k(t1,t2,1)]; z5=[k(i,j,2) k(i,t2,2);k(t1,j,2) k(t1,t2,2)]; no=number_of(z5,1); if(number_of(z4,0)==0 & no<cmn4 & number_of(z4,1)>0) k(i,j,2)=1; k(i,t2,2)=1; k(t1,j,2)=1; k(t1,t2,2)=1; a=strsplit(temp2(i,1)); b=strsplit(temp2(t1,1)); c=strcmp(a,b); for in=1:max(size(c)) if(c(in)==0 & a(in)=='0') printf('%s''',var(in)); end if(c(in)==0 & a(in)=='1') printf(var(in)); end end a=strsplit(temp1(1,j)); b=strsplit(temp1(1,t2)); c=strcmp(a,b); for in=1:max(size(c)) if(c(in)==0 & a(in)=='0') printf('%s''',var(2+in)); end if(c(in)==0 & a(in)=='1') printf(var(2+in)); end end printf("+"); end end end //2 cells z6=[1 1]; z7=z6'; for i=1:n for j=1:n if(i==n) t1=1; else t1=i+1; end if(j==n) t2=1; else t2=j+1; end z8=[k(i,j,1) k(i,t2,1)]; z9=[k(i,j,2) k(i,t2,2)]; no1=number_of(z9,1); if(number_of(z8,0)==0 & no1<cmn2 & number_of(z8,1)>0) k(i,j,2)=1; k(i,t2,2)=1; a=strsplit(temp1(1,j)); b=strsplit(temp1(1,t2)); c=strcmp(a,b); for in=1:max(size(c)) if(c(in)==0 & a(in)=='0') printf(p1(1,i)); printf('%s''',var(2+in)); printf("+"); end if(c(in)==0 & a(in)=='1') printf(p1(1,i)); printf(var(2+in)); printf("+"); end end end end end for i=1:n for j=1:n if(i==n) t1=1; else t1=i+1; end if(j==n) t2=1; else t2=j+1; end z10=[k(i,j,1);k(t1,j,1)]; z11=[k(i,j,2);k(t1,j,2)]; no2=number_of(z11,1); if(number_of(z10,0)==0 & no2<cmn2 & number_of(z10,1)>0) k(i,j,2)=1; k(t1,j,2)=1; a=strsplit(temp2(i,1)); b=strsplit(temp2(t1,1)); c=strcmp(a,b); for in=1:max(size(c)) if(c(in)==0 & a(in)=='0') printf(p2(j,1)); printf('%s''',var(in)); printf("+"); end if(c(in)==0 & a(in)=='1') printf(p2(j,1)); printf(var(in)); printf("+"); end end end end end //single cell for i=1:n for j=1:n if(k(i,j,2)==0 & k(i,j,1)==1) a=strsplit(temp1(1,j)); b=strsplit(temp2(i,1)); for in=1:max(size(a(:,1))) if(a(in,1)=='1') printf(var(in+2)); else if(a(in,1)=='0') printf('%s''',var(2+in)); end end end for in=1:max(size(b(:,1))) if(b(in,1)=='1') printf(var(in)); else if(b(in,1)=='0') printf('%s''',var(in)); end end end if(i~=4 & j~=4) printf("+"); end end end end printf("0"); disp(" ") endfunction