Programozás‎ > ‎Feladatok‎ > ‎Mastermind‎ > ‎Megoldás‎ > ‎

mp_master.pas

Letöltés: mp_master.pas
Program Mastermind;

Type bogitipp=record t1,t2,t3,t4:byte End;
valasz=record v1,v2:byte End;
data=record db:longint;
adat:array [1..360] of bogitipp;
End;
Var be:text;
adatt:array[1..1296] of bogitipp;
adatv:array[1..1296] of valasz;
lehet1,lehet2,lehet3:data;
osszes:array[1..360] of bogitipp;
i,n:longint;
Procedure beolvas;
Var i:byte;
Begin
assign(be,'mastermind.be');
reset(be);
readln(be,n);
for i:=1 to n do
Begin
readln(be,adatt[i].t1,adatt[i].t2,adatt[i].t3,adatt[i].t4,adatv[i].v1,adatv[i].v2);
End;
close(be);
End;

Function lehet(a:bogitipp;b:bogitipp;c:valasz):boolean;
Var d:valasz;
i:byte;
db:byte;
volt:array[1..6] of boolean;
Begin
for i:=1 to 6 do
Begin
volt[i]:=false;
End;
db:=0;
if a.t1=b.t1 then 
Begin
db:=db+1;
volt[a.t1]:=true;
End;
if a.t2=b.t2 then 
Begin
db:=db+1;
volt[a.t2]:=true;
End;
if a.t3=b.t3 then 
Begin
db:=db+1;
volt[a.t3]:=true;
End;
if a.t4=b.t4 then 
Begin
db:=db+1;
volt[a.t4]:=true;
End;
d.v1:=db;
db:=0;
if not volt[a.t1] then
Begin
if a.t1=b.t2 then db:=db+1;
if a.t1=b.t3 then db:=db+1;
if a.t1=b.t4 then db:=db+1;
End;
if not volt[a.t2] then
Begin
if a.t2=b.t1 then db:=db+1;
if a.t2=b.t3 then db:=db+1;
if a.t2=b.t4 then db:=db+1;
End;
if not volt[a.t3] then
Begin
if a.t3=b.t2 then db:=db+1;
if a.t3=b.t1 then db:=db+1;
if a.t3=b.t4 then db:=db+1;
End;
if not volt[a.t4] then
Begin
if a.t4=b.t2 then db:=db+1;
if a.t4=b.t3 then db:=db+1;
if a.t4=b.t1 then db:=db+1;
End;
d.v2:=db;
if (d.v1=c.v1) and (d.v2=c.v2) then lehet:=true else lehet:=false;
End;

Procedure osszest;
Var i,j,k,l:byte;
x:longint;
Begin
x:=1;
for i:=1 to 6 do
Begin
for j:=1 to 6 do
Begin
for k:=1 to 6 do
Begin
for l:=1 to 6 do
Begin
if (i<>j) and (i<>k) and (i<>l) and (j<>k) and (j<>l) and (k<>l) then
Begin
osszes[x].t1:=i;
osszes[x].t2:=j;
osszes[x].t3:=k;
osszes[x].t4:=l;
x:=x+1;
End;
End;
End;
End;
End;
End;

Procedure lehetnek(a:bogitipp;c:valasz);
Var i:longint;
db:longint;
Begin
db:=0;
for i:=1 to 360 do
Begin
if lehet(osszes[i],a,c) then 
Begin
db:=db+1;
lehet2.adat[db]:=osszes[i];
End;
End;
lehet2.db:=db;
End;

Procedure beletesz;
Var i,j:longint;
db:longint;
Begin
db:=0;
for i:=1 to lehet2.db do
Begin
for j:=1 to lehet3.db do
Begin
if (lehet2.adat[i].t1=lehet3.adat[j].t1) and 
  (lehet2.adat[i].t2=lehet3.adat[j].t2) and 
  (lehet2.adat[i].t3=lehet3.adat[j].t3) and 
  (lehet2.adat[i].t4=lehet3.adat[j].t4) then
Begin
db:=db+1;
lehet1.adat[db]:=lehet2.adat[i];
End;
End;
End;
lehet3:=lehet1;
lehet3.db:=db;
End;

Begin
beolvas;
osszest;
lehetnek(adatt[1],adatv[1]);
lehet3:=lehet2;
for i:=2 to n do
Begin
lehetnek(adatt[i],adatv[i]);
beletesz;
End;
writeln(lehet3.db);
for i:=1 to lehet3.db do
Begin
writeln(lehet3.adat[i].t1,lehet3.adat[i].t2,lehet3.adat[i].t3,lehet3.adat[i].t4);
End;
End.