본문 바로가기
Programming/Matlab, Octave, Scilab

[Matlab/Octave] 로또 조합 자동 생성 프로그램

by 도파공 2010. 5. 1.
728x90
반응형

이 코드를 이용하려면

Octave

 

GNU Octave

GNU Octave is a programming language for scientific computing.

octave.org

Matlab

 

MathWorks - MATLAB 및 Simulink 개발 회사

MathWorks Korea의 공식 홈페이지로서, MATLAB(매트랩) 및 Simulink(시뮬링크) 제품 및 서비스, 다운로드, 교육 및 강좌, 커뮤니티 등 다양한 정보를 제공합니다.

kr.mathworks.com

을 사용해야 한다.

주 함수 파일은 lotto_num_gen.m 이다. 그리고 datab.txt 파일은 매주 갱신을 해야 한다. 지금은 370회에 맞추어져 있다.

lotto_num_gen.m에서..
LNP 변수에 예상회차를 입력한다. 지금은 370이 들어가 있다.
genN 변수에 원하시는 조합 수를 넣어 주면 된다. 그러면 그 수 만큼 출력이 된다.
data 나올 가능성이 있는 수를 넣어 본다. 넣는 방법은 파일을 보면 쉽게 알 수 있다.

bonus 변수 분석시에 보너스 공을 포함할 것인지 아닌지 선택하는 것이다.
strt 변수 1회부터 분석할 꺼면 1을 262회부터 분석할 꺼면 262를 넣는다.

참고용으로 사용바란다. 궁금한 것은 댓글을 남겨 주기 바란다. 이 코드는 상업용으로 사용하실 수 없다.

datab.txt의 내용
 - 생략
366    5    12    19    26    27    44    38
367    3    22    25    29    32    44    19
368    11    21    24    30    39    45    25
369    17    20    35    36    41    43    21

370회는 이번 주 토요일에 발표가 끝난 후 추가 바란다.

%clear % 메모리 초기화
%clc   % 화면 청소


genN=5; % 만들어 낼 조합수
data_s=[]; % 제외 수에서 예외적으로 추가해야 하는 경우
data_r=[]; % 나오지 않을 것으로 확신하는 경우

%%            =  = =  =
%%            <  > <  >
dB_Limit=[ 1 -17 15 5 1;
           2 -17 15 5 1;
		       3 -17 15 5 1;
		       4 -17 15 5 1;
		       5 -17 15 5 1;
		       6 -17 15 5 1;
		       7 -17 15 5 1;
		       8 -17 15 5 1;
		       9 -17 15 5 1;
		      10 -17 15 5 1;
		      11 -17 15 5 1;
		      12 -17 15 5 1;
		      13 -17 15 5 1;
		      14 -17 15 5 1;
		      15 -17 15 5 1;
		      16 -17 15 5 1;
		      17 -17 15 5 1;
    		  18 -17 15 5 1;
		      19 -17 15 5 1;
		      20 -17 15 5 1;
		      21 -17 15 5 1;
		      22 -17 15 5 1;
		      23 -17 15 5 1;
		      24 -17 15 5 1;
		      25 -17 15 5 1;
		      26 -17 15 5 1;
		      27 -17 15 5 1;
		      28 -17 15 5 1;
		      29 -17 15 5 1;
		      30 -17 15 5 1;
		      31 -17 15 5 1;
		      32 -17 15 5 1;
		      33 -17 15 5 1;
		      34 -17 15 5 1;
		      35 -17 15 5 1;
		      36 -17 15 5 1;
		      37 -17 15 5 1;
		      38 -17 15 5 1;
		      39 -17 15 5 1;
		      40 -17 15 5 1;
		      41 -17 15 5 1;
		      42 -17 15 5 1;
		      43 -17 15 5 1;
		      44 -17 15 5 1;
		      45 -17 15 5 1];

		  
%% Option : Bonus 포함할 것인지 여부
bonus=0; % 0 불포함, 1 포함


%% Option : 시작번호 = 1 or 262
pre_start_no=300; % 고려할 이전 회차


%% Option : 합의 최소, 최대값 제한
smin=110;
smax=180;

%% Option : 평균값의 최소, 최대값 제한
amin=19;
amax=30;


%% 이하 코드 수정하지 말 것..


data=[1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45];
o_data=data;

load datab.txt
[om on]=size(datab);

LNP=om+1 % 예상 회차 - 과거 회차는 안됨. 입력된 데이터(lotto.txt, lottob.txt) 기준으로 함.

%% Option : 시작번호 = 1 or 262
if pre_start_no >= LNP
    'Error of pre_start_no. This value is over.'
    break
end

strt=LNP-pre_start_no;

%lotto_old=[로또7 합1 평균1 편차1 홀1 짝1 고1 저1 소수1 3배1 합성수1 동형수1 AC1 번대6 끝수6 끝수합1 끝수평균1 9수6];

if exist('lotto_old.mat')==0 % 파일이 존재하는지 확인, 없으면 계산 후 생성
    lotto_old_analysis
end

load lotto_old.mat % 기존 당첨번호
[m1 n1]=size(lotto_old);

if m1~=LNP-1
    lotto_old_analysis; % 기존 당첨번호 분석
    load lotto_old.mat
    [m1 n1]=size(lotto_old);
else
    load lotto_old.mat % 기존 당첨번호
end


%% 회차 끝 수 기준으로 데이터에서 해당번호의 끝 수가 동일하면 그 수 삭제
RN=mod(LNP,10);
data=r_data(RN,data); % 끝 수 기준으로 데이터에서 지정 수 자동 제거 함수
data=a_count(RN, 100, data, datab);

%% 추첨날짜 기준으로 제외수 선정
LNP_date=datevec(datenum(2002,12,7)+(LNP-1)*7);
LNP_date_mod=mod(LNP_date(3),10);

data=r_data(LNP_date_mod,data); % 끝 수 기준으로 데이터에서 지정 수 자동 제거 함수
data=a_date(LNP_date_mod, 100, data, datab);

%% 불필요 데이터 제거 회차 기준.
data=except_no(LNP,dB_Limit,data,datab);
%except_no

data=union(data,datab(LNP-1,2:7)); % 지난 회차 고려

%% 예외 데이터 추가
data=union(data, data_s);
data=setdiff(data,data_r);

s_data=setdiff(o_data,data);

%ss=randperm(length(s_data));
%ss_data=[s_data(ss(1)) s_data(ss(2)) s_data(ss(3)) s_data(ss(4)) s_data(ss(5))];
%data=union(data, ss_data)


[m n]=size(data);

%% 볼 누적 출현 수 계산
old_data=zeros(45,3);

for tp=1:45
    old_data(tp,1)=tp;
end


for tpa=strt:om
    for tpb=2:on-1+bonus
        switch datab(tpa,tpb)
            case 1
                old_data(1,2)=old_data(1,2)+1;
            case 2
                old_data(2,2)=old_data(2,2)+1;
            case 3
                old_data(3,2)=old_data(3,2)+1;
            case 4
                old_data(4,2)=old_data(4,2)+1;
            case 5
                old_data(5,2)=old_data(5,2)+1;
            case 6
                old_data(6,2)=old_data(6,2)+1;
            case 7
                old_data(7,2)=old_data(7,2)+1;
            case 8
                old_data(8,2)=old_data(8,2)+1;
            case 9
                old_data(9,2)=old_data(9,2)+1;
            case 10
                old_data(10,2)=old_data(10,2)+1;
            case 11
                old_data(11,2)=old_data(11,2)+1;
            case 12
                old_data(12,2)=old_data(12,2)+1;
            case 13
                old_data(13,2)=old_data(13,2)+1;
            case 14
                old_data(14,2)=old_data(14,2)+1;
            case 15
                old_data(15,2)=old_data(15,2)+1;
            case 16
                old_data(16,2)=old_data(16,2)+1;
            case 17
                old_data(17,2)=old_data(17,2)+1;
            case 18
                old_data(18,2)=old_data(18,2)+1;
            case 19
                old_data(19,2)=old_data(19,2)+1;
            case 20
                old_data(20,2)=old_data(20,2)+1;
            case 21
                old_data(21,2)=old_data(21,2)+1;
            case 22
                old_data(22,2)=old_data(22,2)+1;
            case 23
                old_data(23,2)=old_data(23,2)+1;
            case 24
                old_data(24,2)=old_data(24,2)+1;
            case 25
                old_data(25,2)=old_data(25,2)+1;
            case 26
                old_data(26,2)=old_data(26,2)+1;
            case 27
                old_data(27,2)=old_data(27,2)+1;
            case 28
                old_data(28,2)=old_data(28,2)+1;
            case 29
                old_data(29,2)=old_data(29,2)+1;
            case 30
                old_data(30,2)=old_data(30,2)+1;
            case 31
                old_data(31,2)=old_data(31,2)+1;
            case 32
                old_data(32,2)=old_data(32,2)+1;
            case 33
                old_data(33,2)=old_data(33,2)+1;
            case 34
                old_data(34,2)=old_data(34,2)+1;
            case 35
                old_data(35,2)=old_data(35,2)+1;
            case 36
                old_data(36,2)=old_data(36,2)+1;
            case 37
                old_data(37,2)=old_data(37,2)+1;
            case 38
                old_data(38,2)=old_data(38,2)+1;
            case 39
                old_data(39,2)=old_data(39,2)+1;
            case 40
                old_data(40,2)=old_data(40,2)+1;
            case 41
                old_data(41,2)=old_data(41,2)+1;
            case 42
                old_data(42,2)=old_data(42,2)+1;
            case 43
                old_data(43,2)=old_data(43,2)+1;
            case 44
                old_data(44,2)=old_data(44,2)+1;
            otherwise
                old_data(45,2)=old_data(45,2)+1;
        end
    end
end
            
%%============================================================================


%% 볼 누적 출현에 따른 출현 가능 확율 계산
for tp=1:45
    old_data(tp,3)=ceil(old_data(tp,2)/(om-strt+1)*100);
end
%%============================================================================


%% 홀수 개수 평가
odda=zeros(7,2);
for tt=strt:om
    switch lotto_old(tt,11)
        case 0
            odda(1,1)=odda(1,1)+1;
        case 1
            odda(2,1)=odda(2,1)+1;
        case 2
            odda(3,1)=odda(3,1)+1;
        case 3
            odda(4,1)=odda(4,1)+1;
        case 4
            odda(5,1)=odda(5,1)+1;
        case 5
            odda(6,1)=odda(6,1)+1;
        otherwise
            odda(7,1)=odda(7,1)+1;
    end
end
%%============================================================================

%% 홀수 개수를 기준으로 확율 계산
for tp=1:7
    odda(tp,2)=ceil(odda(tp,1)/(om-strt+1)*100);
end
%%============================================================================


%% 고수 개수 평가
highn=zeros(7,2);
for tt=strt:om
    switch lotto_old(tt,13)
        case 0
            highn(1,1)=highn(1,1)+1;
        case 1
            highn(2,1)=highn(2,1)+1;
        case 2
            highn(3,1)=highn(3,1)+1;
        case 3
            highn(4,1)=highn(4,1)+1;
        case 4
            highn(5,1)=highn(5,1)+1;
        case 5
            highn(6,1)=highn(6,1)+1;
        otherwise
            highn(7,1)=highn(7,1)+1;
    end
end
%%============================================================================

%% 고수 확율 계산
for tp=1:7
    highn(tp,2)=ceil(highn(tp,1)/(om-strt+1)*100);
end
%%============================================================================


%% 소수 개수 평가
primen=zeros(7,2);
for tt=strt:om
    switch lotto_old(tt,15)
        case 0
            primen(1,1)=primen(1,1)+1;
        case 1
            primen(2,1)=primen(2,1)+1;
        case 2
            primen(3,1)=primen(3,1)+1;
        case 3
            primen(4,1)=primen(4,1)+1;
        case 4
            primen(5,1)=primen(5,1)+1;
        case 5
            primen(6,1)=primen(6,1)+1;
        otherwise
            primen(7,1)=primen(7,1)+1;
    end
end
%%============================================================================

%% 소수 확율 계산
for tp=1:7
    primen(tp,2)=ceil(primen(tp,1)/(om-strt+1)*100);
end
%%============================================================================


%% 3배수 개수 평가
threen=zeros(7,2);
for tt=strt:om
    switch lotto_old(tt,16)
        case 0
            threen(1,1)=threen(1,1)+1;
        case 1
            threen(2,1)=threen(2,1)+1;
        case 2
            threen(3,1)=threen(3,1)+1;
        case 3
            threen(4,1)=threen(4,1)+1;
        case 4
            threen(5,1)=threen(5,1)+1;
        case 5
            threen(6,1)=threen(6,1)+1;
        otherwise
            threen(7,1)=threen(7,1)+1;
    end
end
%%============================================================================

%% 3배수 확율 계산
for tp=1:7
    threen(tp,2)=ceil(threen(tp,1)/(om-strt+1)*100);
end
%%============================================================================



%% 합성수 개수 평가
mna=zeros(7,2);
for tt=strt:om
    switch lotto_old(tt,17)
        case 0
            mna(1,1)=mna(1,1)+1;
        case 1
            mna(2,1)=mna(2,1)+1;
        case 2
            mna(3,1)=mna(3,1)+1;
        case 3
            mna(4,1)=mna(4,1)+1;
        case 4
            mna(5,1)=mna(5,1)+1;
        case 5
            mna(6,1)=mna(6,1)+1;
        otherwise
            mna(7,1)=mna(7,1)+1;
    end
end
%%============================================================================

%% 합성수 확율 계산
for tp=1:7
    mna(tp,2)=ceil(mna(tp,1)/(om-strt+1)*100);
end
%%============================================================================


%% 동형수 개수 평가
sna=zeros(4,2);
for tt=strt:om
    switch lotto_old(tt,18)
        case 0
            sna(1,1)=sna(1,1)+1;
        case 1
            sna(2,1)=sna(2,1)+1;
        case 2
            sna(3,1)=sna(3,1)+1;
        otherwise
            sna(4,1)=sna(4,1)+1;
    end
end
%%============================================================================

%% 동형수 확율 계산
for tp=1:4
    sna(tp,2)=ceil(sna(tp,1)/(om-strt+1)*100);
end
%%============================================================================


%% AC값  평가
acn=zeros(11,2);
for tt=strt:om
    switch lotto_old(tt,19)
        case 0
            acn(1,1)=acn(1,1)+1;
        case 1
            acn(2,1)=acn(2,1)+1;
        case 2
            acn(3,1)=acn(3,1)+1;
        case 3
            acn(4,1)=acn(4,1)+1;
        case 4
            acn(5,1)=acn(5,1)+1;
        case 5
            acn(6,1)=acn(6,1)+1;
        case 6
            acn(7,1)=acn(7,1)+1;
        case 7
            acn(8,1)=acn(8,1)+1;
        case 8
            acn(9,1)=acn(9,1)+1;
        case 9
            acn(10,1)=acn(10,1)+1;
        otherwise
            acn(11,1)=acn(11,1)+1;
    end
end
%%============================================================================

%% AC값 확율 계산
for tp=1:11
    acn(tp,2)=ceil(acn(tp,1)/(om-strt+1)*100);
end
%%============================================================================

tmp=1;
lotto=zeros(genN,6); % 로또 번호 그룹에 대한 메모리 할당
count=0;

tot_data=zeros(genN,length(data)+5); % 변경시 추출 데이터 수 확인

% init_data=data;

% data=init_data;
ss=randperm(length(s_data));
ss_data=[s_data(ss(1)) s_data(ss(2)) s_data(ss(3)) s_data(ss(4)) s_data(ss(5))];
data=union(data, ss_data);    

while tmp~=0
   
    address=randi(n+5,1,6); % 데이터 갯수 주의
    address=sort(address);
    
    if address(1)==address(2) || address(1)==address(3) || address(1)==address(4) || ...
       address(1)==address(5) || address(1)==address(6) || address(2)==address(3) || ...
       address(2)==address(4) || address(2)==address(5) || address(2)==address(6) || ...
       address(3)==address(4) || address(3)==address(5) || address(3)==address(6) || ...
       address(4)==address(5) || address(4)==address(6) || address(5)==address(6)
       
       continue;
    end

    m_data=[data(address(1)) data(address(2)) data(address(3)) data(address(4)) data(address(5)) data(address(6))];

%% 회차에서 합의 끝 수 기준으로 데이터에서 해당번호의 끝 수가 동일하면 그 수 삭제
    chk_sum=data(address(1))+data(address(2))+data(address(3))+data(address(4))+data(address(5))+data(address(6));
    r_chk_sum=mod(chk_sum,10);
    check_sum=r_chk(r_chk_sum,m_data);
    if check_sum==1
       continue;
    end


%% 끝 수 합의 기준으로 데이터에서 해당번호의 끝 수가 동일하면 그 수 삭제
    chk_sume=mod(data(address(1)),10)+mod(data(address(2)),10)+mod(data(address(3)),10)+mod(data(address(4)),10)+mod(data(address(5)),10)+mod(data(address(6)),10);
    r_chk_sume=mod(chk_sume,10);
    check_sume=r_chk(r_chk_sume,m_data);
    if check_sume==1
       continue;
    end

%% 회차에서 평균 값의 끝 수 기준으로 데이터에서 해당번호의 끝 수가 동일하면 그 수 삭제
    chk_avg=round((data(address(1))+data(address(2))+data(address(3))+data(address(4))+data(address(5))+data(address(6)))/6);
    r_chk_avg=mod(chk_avg,10);
    check_avg=r_chk(r_chk_avg,m_data);
    if check_avg==1
       continue;
    end

%% 표준편차에서 평균 값의 끝 수 기준으로 데이터에서 해당번호의 끝 수가 동일하면 그 수 삭제
    chk_dev=round(((data(address(1)))^2+(data(address(2)))^2+(data(address(3)))^2+(data(address(4)))^2+(data(address(5)))^2+(data(address(6)))^2)/6-chk_avg^2);
    r_chk_dev=mod(chk_dev,10);
    check_dev=r_chk(r_chk_dev,m_data);
    if check_dev==1
       continue;
    end

%% AC 값의 끝 수 기준으로 데이터에서 해당번호의 끝 수가 동일하면 그 수 삭제
    chk_ac=cac(data(address(1)),data(address(2)),data(address(3)),data(address(4)),data(address(5)),data(address(6)));
    r_chk_ac=mod(chk_ac,10);
    check_ac=r_chk(r_chk_ac,m_data);
    if check_ac==1
       continue;
    end

    
%% Data의 가중치 적용
    if wghtgen(old_data(data(address(1)),3),old_data(data(address(1)),1))==0 || wghtgen(old_data(data(address(2)),3),old_data(data(address(2)),1))==0 || wghtgen(old_data(data(address(3)),3),old_data(data(address(3)),1))==0 || wghtgen(old_data(data(address(4)),3),old_data(data(address(4)),1))==0 || wghtgen(old_data(data(address(5)),3),old_data(data(address(5)),1))==0 || wghtgen(old_data(data(address(6)),3),old_data(data(address(6)),1))==0
        continue;
    end
    
%% 홀수의 개수 가중치 적용
    odd=mod(data(address(1)),2)+mod(data(address(2)),2)+mod(data(address(3)),2)+mod(data(address(4)),2)+mod(data(address(5)),2)+mod(data(address(6)),2);
    if wghtgen(odda(odd+1,2),odda(odd+1,1))==0
        continue;
    end

%% 홀수의 개수가 3보다 작으면 다시
    if (mod(m_data(1),2)+mod(m_data(2),2)+mod(m_data(3),2)+mod(m_data(4),2)+mod(m_data(5),2)+mod(m_data(6),2)) < 3
        continue;
	end
    
%% 높은 수의 개수 가중치 적용
    hval=comp23(data(address(1)))+comp23(data(address(2)))+comp23(data(address(3)))+comp23(data(address(4)))+comp23(data(address(5)))+comp23(data(address(6)));
    if wghtgen(highn(hval+1,2),highn(hval+1,1))==0
        continue;
    end

%% 높은 수가 2보다 작으면 다시
    if (comp23(m_data(1))+comp23(m_data(2))+comp23(m_data(3))+comp23(m_data(4))+comp23(m_data(5))+comp23(m_data(6))) < 3
	   continue;
    end


%% 소수의 개수 가중치 적용
    pval=prime(data(address(1)))+prime(data(address(2)))+prime(data(address(3)))+prime(data(address(4)))+prime(data(address(5)))+prime(data(address(6)));
    if wghtgen(primen(pval+1,2),primen(pval+1,1))==0
        continue;
    end    

%% 소수의 개수가 0이면 다시
    if prime(m_data(1)) == 0 && prime(m_data(2)) == 0 && prime(m_data(3)) == 0 && prime(m_data(4)) == 0 && prime(m_data(5)) == 0 && prime(m_data(6)) == 0
	  continue;
	end
    
%% 3배수의 개수 가중치 적용
    tval=threet(data(address(1)))+threet(data(address(2)))+threet(data(address(3)))+threet(data(address(4)))+threet(data(address(5)))+threet(data(address(6)));
    if wghtgen(threen(hval+1,2),threen(hval+1,1))==0
        continue;
    end

%% 3의 배수가 0개면 다시
    if threet(m_data(1)) == 0 && threet(m_data(2)) == 0 && threet(m_data(3)) == 0 && threet(m_data(4)) == 0 && threet(m_data(5)) == 0 && threet(m_data(6)) == 0
	    continue;
    end

%% 합성수의 개수 가중치 적용
    gmn=6-pval-tval;
    if wghtgen(mna(gmn+1,2),mna(gmn+1,1))==0
        continue;
    end



%% 동형수의 개수 가중치 적용
    gsn=samen(data(address(1)),data(address(2)),data(address(3)),data(address(4)),data(address(5)),data(address(6)));
    if wghtgen(mna(gsn+1,2),mna(gsn+1,1))==0
        continue;
    end

%% 동형수 제거
    sm_std=[12 21; 13 31; 14 41; 23 32; 24 42];
	[sm_i sm_j]=size(find(m_data==12));
    if sm_j ~= 0
		[sm_i1 sm_j1]=size(find(m_data==21));
		if sm_j1 ~= 0
			continue;
		end
	end

	[sm_i sm_j]=size(find(m_data==13));
    if sm_j ~= 0
		[sm_i1 sm_j1]=size(find(m_data==31));
		if sm_j1 ~= 0
			continue;
		end
	end

	[sm_i sm_j]=size(find(m_data==14));
    if sm_j ~= 0
		[sm_i1 sm_j1]=size(find(m_data==41));
		if sm_j1 ~= 0
			continue;
		end
	end
	
	[sm_i sm_j]=size(find(m_data==23));
    if sm_j ~= 0
		[sm_i1 sm_j1]=size(find(m_data==32));
		if sm_j1 ~= 0
			continue;
		end
	end
	
	[sm_i sm_j]=size(find(m_data==24));
    if sm_j ~= 0
		[sm_i1 sm_j1]=size(find(m_data==42));
		if sm_j1 ~= 0
			continue;
		end
	end

%% AC값 가중치 적용
    aval=cac(data(address(1)),data(address(2)),data(address(3)),data(address(4)),data(address(5)),data(address(6)));
    if wghtgen(acn(aval+1,2),acn(aval+1,1))==0
        continue;
    end
	
%% 평균값의 최대, 최소 제한
    if aval<amin || aval>amax
	    continue;
	end
    
%% 합의 최대, 최소 제한
    sval=data(address(1))+data(address(2))+data(address(3))+data(address(4))+data(address(5))+data(address(6));
    if sval<smin || sval>smax
        continue;
    end

%% 기존 당첨번호 제외
    for ii=1:om
        if data(address(1))==lotto_old(ii,2) && data(address(2))==lotto_old(ii,3) && data(address(3))==lotto_old(ii,4) && data(address(4))==lotto_old(ii,5) && data(address(5))==lotto_old(ii,6) && data(address(6))==lotto_old(ii,7)
            continue;
        end
    end
    

     count=count+1;
     lotto(count,1)=data(address(1));
     lotto(count,2)=data(address(2));
     lotto(count,3)=data(address(3));
     lotto(count,4)=data(address(4));
     lotto(count,5)=data(address(5));
     lotto(count,6)=data(address(6));
     
     
     % tot_data(count,:)=data(:);
     if count>=genN
         tmp=0;
     end
end
% tot_data
data
lotto
function lotto_old_analysis()

load data.txt

[M N]=size(data);

lotto=data;

lotto_sum=zeros(M,1);
lotto_avg=zeros(M,1);
lotto_dev=zeros(M,1);
lotto_odd=zeros(M,1);
lotto_even=zeros(M,1);
lotto_high=zeros(M,1);
lotto_low=zeros(M,1);
lotto_prime=zeros(M,1);
lotto_3t=zeros(M,1);
lotto_mn=zeros(M,1);
lotto_sn=zeros(M,1);
lotto_ac=zeros(M,1);
lotto_po=zeros(M,6);
lotto_po1=zeros(M,1);
lotto_po2=zeros(M,1);
lotto_po3=zeros(M,1);
lotto_po4=zeros(M,1);
lotto_po5=zeros(M,1);
lotto_po6=zeros(M,1);
lotto_end=zeros(M,6);
lotto_end1=zeros(M,1);
lotto_end2=zeros(M,1);
lotto_end3=zeros(M,1);
lotto_end4=zeros(M,1);
lotto_end5=zeros(M,1);
lotto_end6=zeros(M,1);
lotto_ends=zeros(M,1);
lotto_endsa=zeros(M,1);
lotto_9g=zeros(M,6);
lotto_9g1=zeros(M,1);
lotto_9g2=zeros(M,1);
lotto_9g3=zeros(M,1);
lotto_9g4=zeros(M,1);
lotto_9g5=zeros(M,1);
lotto_9g6=zeros(M,1);

parfor count=1:M
   lotto_sum(count)=lotto(count,2)+lotto(count,3)+lotto(count,4)+lotto(count,5)+lotto(count,6)+lotto(count,7);
   lotto_avg(count)=lotto_sum(count)/6;
   lotto_dev(count)=sqrt(((lotto(count,2))^2+(lotto(count,3))^2+(lotto(count,4))^2+(lotto(count,5))^2+(lotto(count,6))^2+(lotto(count,7))^2)/6-(lotto_avg(count))^2);
   lotto_odd(count)=mod(lotto(count,2),2)+mod(lotto(count,3),2)+mod(lotto(count,4),2)+mod(lotto(count,5),2)+mod(lotto(count,6),2)+mod(lotto(count,7),2);
   lotto_even(count)=6-lotto_odd(count);
   lotto_high(count)=comp23(lotto(count,2))+comp23(lotto(count,3))+comp23(lotto(count,4))+comp23(lotto(count,5))+comp23(lotto(count,6))+comp23(lotto(count,7));
   lotto_low(count)=6-lotto_high(count);
   lotto_prime(count)=prime(lotto(count,2))+prime(lotto(count,3))+prime(lotto(count,4))+prime(lotto(count,5))+prime(lotto(count,6))+prime(lotto(count,7));
   lotto_3t(count)=threet(lotto(count,2))+threet(lotto(count,3))+threet(lotto(count,4))+threet(lotto(count,5))+threet(lotto(count,6))+threet(lotto(count,7));
   lotto_mn(count)=6-lotto_prime(count)-lotto_3t(count);
   lotto_sn(count)=samen(lotto(count,2),lotto(count,3),lotto(count,4),lotto(count,5),lotto(count,6),lotto(count,7));
   lotto_ac(count)=cac(lotto(count,2),lotto(count,3),lotto(count,4),lotto(count,5),lotto(count,6),lotto(count,7));
   lotto_po1(count)=floor(lotto(count,2)/10);
   lotto_po2(count)=floor(lotto(count,3)/10);
   lotto_po3(count)=floor(lotto(count,4)/10);
   lotto_po4(count)=floor(lotto(count,5)/10);
   lotto_po5(count)=floor(lotto(count,6)/10);
   lotto_po6(count)=floor(lotto(count,7)/10);
   lotto_end1(count)=mod(lotto(count,2),10);
   lotto_end2(count)=mod(lotto(count,3),10);
   lotto_end3(count)=mod(lotto(count,4),10);
   lotto_end4(count)=mod(lotto(count,5),10);
   lotto_end5(count)=mod(lotto(count,6),10);
   lotto_end6(count)=mod(lotto(count,7),10);
end

lotto_po(:,1)=lotto_po1;
lotto_po(:,2)=lotto_po2;
lotto_po(:,3)=lotto_po3;
lotto_po(:,4)=lotto_po4;
lotto_po(:,5)=lotto_po5;
lotto_po(:,6)=lotto_po6;

lotto_end(:,1)=lotto_end1;
lotto_end(:,2)=lotto_end2;
lotto_end(:,3)=lotto_end3;
lotto_end(:,4)=lotto_end4;
lotto_end(:,5)=lotto_end5;
lotto_end(:,6)=lotto_end6;


parfor count1=1:M
   lotto_ends(count1)=lotto_end1(count1)+lotto_end2(count1)+lotto_end3(count1)+lotto_end4(count1)+lotto_end5(count1)+lotto_end6(count1);
end

parfor count2=1:M
   lotto_endsa(count2)=lotto_ends(count2)/6;
   lotto_9g1(count2)=mod(lotto(count2,2),9);
   lotto_9g2(count2)=mod(lotto(count2,3),9);
   lotto_9g3(count2)=mod(lotto(count2,4),9);
   lotto_9g4(count2)=mod(lotto(count2,5),9);
   lotto_9g5(count2)=mod(lotto(count2,6),9);
   lotto_9g6(count2)=mod(lotto(count2,7),9);
end

lotto_9g(:,1)=lotto_9g1;
lotto_9g(:,2)=lotto_9g2;
lotto_9g(:,3)=lotto_9g3;
lotto_9g(:,4)=lotto_9g4;
lotto_9g(:,5)=lotto_9g5;
lotto_9g(:,6)=lotto_9g6;


lotto_old=[lotto lotto_sum lotto_avg lotto_dev lotto_odd lotto_even lotto_high lotto_low lotto_prime lotto_3t lotto_mn lotto_sn lotto_ac lotto_po lotto_end lotto_ends lotto_endsa lotto_9g];


[ch_a ch_b]=size(version);

%% ch_b of Octave 3.6.4 is 5(3.6.4)
if ch_b < 10
    save lotto_old.mat '-mat7-binary' lotto_old
else
    save lotto_old.mat lotto_old % cb_b of matlab 11b is 19(7.13.0.564 (R2011b))
end
function [wgn]=wghtgen(percent, number)

% This function is wghtgen(percent, number)
% 가중치 함수
% percnet is integer from 1 to 100
% number is interger from 1 to 45
% return is weight value
% 작성자 : 김동현
% 마지막 수정일 : 2013년 9월 5일

tmp=ones(1,100);

if percent<=50
    for i=1:100-percent
        tmp(1,i*2)=0;
    end
else
    for i=1:100-percent
        tmp(1,i)=0;
    end
end

wgn=tmp(randi(100,1));
function [ret]=comp23(value)
% 입력값이 23보다 큰지 작은지를 판단해주는 함수
% ret is 0 if value < 23
% ret is 1 if value >= 23
% 작성자 : 김동현
% 마지막 수정일 : 2013년 9월 5일


if value >= 23
    ret=1;
else
    ret=0;
end
function [ret]=threet(value)

% 3의 배수를 확인해 주는 함수
% 작성자 : 김동현
% 마지막 수정일 : 2013년 9월 5일


if mod(value,3)==0
    ret=1;
else
    ret=0;
end
function [ret]=prime(value)
% valus is prime and then ret 1
% 입력값에 대하여 소수인지를 판별하는 함수
% 작성자 : 김동현
% 마지막 수정일 : 2013년 9월 5일

if (value==2) || (value==5) || (value==7) || (value==11) || (value==13) || (value==17) || (value==19) || (value==23) || (value==29) || (value==31) || (value==37) || (value==41) || (value==43)
    ret=1;
else
    ret=0;
end
function [ret]=samen(value1, value2, value3, value4, value5, value6)

% 동형수를 확인해 주는 함수
% 작성자 : 김동현
% 마지막 수정일 : 2013년 9월 5일

va=0;
vb=0;
vc=0;
vd=0;
ve=0;

if value1==6 || value2==6 || value3==6 || value4==6 || value5==6 || value6==6
    if value1==9 || value2==9 || value3==9 || value4==9 || value5==9 || value6==9
        va=1;
    end
end

if value1==14 || value2==14 || value3==14 || value4==14 || value5==14 || value6==14
    if value1==41 || value2==41 || value3==41 || value4==41 || value5==41 || value6==41
        vb=1;
    end
end

if value1==23 || value2==23 || value3==23 || value4==23 || value5==23 || value6==23
    if value1==32 || value2==32 || value3==32 || value4==32 || value5==32 || value6==32
        vc=1;
    end
end

if value1==24 || value2==24 || value3==24 || value4==24 || value5==24 || value6==24
    if value1==42 || value2==42 || value3==42 || value4==42 || value5==42 || value6==42
        vd=1;
    end
end

if value1==34 || value2==34 || value3==34 || value4==34 || value5==34 || value6==34
    if value1==43 || value2==43 || value3==43 || value4==43 || value5==43 || value6==43
        ve=1;
    end
end

ret=va+vb+vc+vd+ve;
function [ret]=cac(value1, value2, value3, value4, value5, value6)

% AC 값 계산
% 작성자 : 김동현
% 마지막 수정일 : 2013년 9월 5일


aa=zeros(15,1);
aa(1,1)=value6-value5;
aa(2,1)=value6-value4;
aa(3,1)=value6-value3;
aa(4,1)=value6-value2;
aa(5,1)=value6-value1;
aa(6,1)=value5-value4;
aa(7,1)=value5-value3;
aa(8,1)=value5-value2;
aa(9,1)=value5-value1;
aa(10,1)=value4-value3;
aa(11,1)=value4-value2;
aa(12,1)=value4-value1;
aa(13,1)=value3-value2;
aa(14,1)=value3-value1;
aa(15,1)=value2-value1;

tmp=zeros(15,1);

for ii=1:15
    if aa(ii,1)==aa(1,1);
        tmp(1,1)=tmp(1,1)+1;
    end
    
    if aa(ii,1)==aa(2,1);
        tmp(2,1)=tmp(2,1)+1;
    end
    
    if aa(ii,1)==aa(3,1);
        tmp(3,1)=tmp(3,1)+1;
    end    
    
    if aa(ii,1)==aa(4,1);
        tmp(4,1)=tmp(4,1)+1;
    end

    if aa(ii,1)==aa(5,1);
        tmp(5,1)=tmp(5,1)+1;
    end
    
    if aa(ii,1)==aa(6,1);
        tmp(6,1)=tmp(6,1)+1;
    end
    
    if aa(ii,1)==aa(7,1);
        tmp(7,1)=tmp(7,1)+1;
    end
    
    if aa(ii,1)==aa(8,1);
        tmp(8,1)=tmp(8,1)+1;
    end
    
    if aa(ii,1)==aa(9,1);
        tmp(9,1)=tmp(9,1)+1;
    end
    
    if aa(ii,1)==aa(10,1);
        tmp(10,1)=tmp(10,1)+1;
    end
    
    if aa(ii,1)==aa(11,1);
        tmp(11,1)=tmp(11,1)+1;
    end
    
    if aa(ii,1)==aa(12,1);
        tmp(12,1)=tmp(12,1)+1;
    end
    
    if aa(ii,1)==aa(13,1);
        tmp(13,1)=tmp(13,1)+1;
    end
    
    if aa(ii,1)==aa(14,1);
        tmp(14,1)=tmp(14,1)+1;
    end
    
    if aa(ii,1)==aa(15,1);
        tmp(15,1)=tmp(15,1)+1;
    end
end

tmp1=0;
tmp2=0;
tmp3=0;
tmp4=0;
tmp5=0;
tmp6=0;

for ii=1:15
    if tmp(ii,1)==1
        tmp1=tmp1+1;
    end
    
    if tmp(ii,1)==2
        tmp2=tmp2+1;
    end
    
    if tmp(ii,1)==3
        tmp3=tmp3+1;
    end
    
    if tmp(ii,1)==4
        tmp4=tmp4+1;
    end
    
    if tmp(ii,1)==5
        tmp5=tmp5+1;
    end
    
    if tmp(ii,1)==6
        tmp6=tmp6+1;
    end
end

ret=tmp1+tmp2/2+tmp3/3+tmp4/4+tmp5/5+tmp6/6-5;

 

lotto_old.txt
다운로드

 

datab.txt
다운로드

 

 

 

728x90
반응형

댓글