home *** CD-ROM | disk | FTP | other *** search
- program jdlavie;
- uses crt;
- const test:array[0..17] of byte=(0,0,0,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0);
- nbl=24;
- nbc=80;
- bidulle=4;
- truc=4;
- type
- tableau=ARRAY[1..nbc+2,1..nbl+2] of byte;
- tust=array[0..17] of byte;
- var t1,t2:tableau;
- i,j,gene: integer;
- tabtest: tust;
- s: byte;
- meilleur:tust;
- dc,dcm: integer;
- score,score1: integer;
-
- PROCEDURE init(var t1,t2:TABLEAU);
- BEGIN
- randomize;
- gene:=9;
- score:=0;
- for i:=0 to 17 do tabtest[i]:=test[i];
- for i:=1 to nbl+2 do
- for j:=1 to nbc+2 do BEGIN
- t2[j,i]:=0;
- t1[j,i]:=0;
- END;
- for i:=2 to 40 do t1[i,10]:=1;
- for i:=2 to 40 do t1[i,15]:=1;
- for i:=2 to 40 do t1[i,5]:=1;
- for i:=2 to 40 do t1[i,6]:=1;
- for i:=2 to 40 do t1[i,7]:=1;
- for i:=3 to 17 do t1[4,i]:=1;
- END;
-
- PROCEDURE MUTANT(var tab:tust);
- var t:tust;
- i,b,x:integer;
- BEGIN
- b:=0;
- for i:=0 to 17 do tab[i]:=0;
- repeat
- i:=random(15)+1;
- if tab[i]<>1 then BEGIN
- b:=b+1;
- tab[i]:=1;
- END;
- until b=bidulle;
-
- END;
-
- PROCEDURE transfert(var t1,t2: TABLEAU);
- BEGIN
- for i:=2 to nbl+1 do
- for j:=2 to nbc+1 do BEGIN
- s:=t1[j,i]*9;
- s:=s+t1[j-1,i-1]+t1[j,i-1]+t1[j+1,i-1]+t1[j-1,i]+t1[j+1,i];
- s:=s++t1[j-1,i+1]+t1[j,i+1]+t1[j+1,i+1];
- t2[j,i]:=tabtest[s];
- END;
- for i:=2 to nbl+1 do
- for j:=2 to nbc+1 do t1[j,i]:=t2[j,i];
- END;
-
- PROCEDURE affichage;
- BEGIN
- score:=0;
- GOTOXY(1,1);
- for i:=2 to nbl+1 do
- for j:=2 to nbc+1 do BEGIN
- case t1[j,i] of
- 1: BEGIN score:=score+1; write('o');END;
- 0: write(' ');
- end;
- end;
- write('regle:');
- dc:=score-score1;
- for i:=0 to 17 do write(tabtest[i]);
- write(' ',dc,' ');
- for i:=0 to 17 do write(meilleur[i]);
- write(' ',dcm,' ');
- END;
-
- procedure enmarche;
- BEGIN
- init(t1,t2);
- affichage;
- score1:=score;
- REPEAT
- transfert(t1,t2);
- affichage;
- gene:=gene+1;
- if (gene mod 10)=0 then
- BEGIN
- gene:=gene-10;
- mutant(tabtest);
- {gotoxy(2,23);write(dc);}if dcm<dc then BEGIN
- meilleur:=tabtest;
- dcm:=dc;
- END;
- END;
- UNTIL (score=0) or (keypressed);
- END;
-
- BEGIN
- dcm:=0;
- clrscr;
- repeat
- enmarche;
- until keypressed;
- END.
-
-