program aivd3;
{
Given that:
KERST = REKENEN + MET * TIEN - LETTERS
Each letter represents a single unique digit (0..9)
- What is the value of MINSTREEL
- REKENLES can be 2 different numbers: what is the product of these two?
}
uses
sysutils;
var
K,E,R,S,T,N,M,I,L,Res,KERST,REKENEN,MET,TIEN,LETTERS: integer;
Digits: set of byte;
REKENLES: array[1..2] of Integer;
T0, Ticks: LongWord;
begin
T0 := GetTickCount;
REKENLES[1] := -1;
REKENLES[2] := -1;
for k:=0 to 9 do
begin
Digits := [K];
for E := 0 to 9 do if not (E in Digits) then
begin
Digits := Digits + [E];
for R := 0 to 9 do if not (R in Digits) then
begin
Digits := Digits + [R];
for S := 0 to 9 do if not (S in Digits) then
begin
Digits := Digits + [S];
for T := 0 to 9 do if not (t in Digits) then
begin
Digits := Digits + [T];
for N := 0 to 9 do if not (N in Digits) then
begin
Digits := Digits + [n];
for M :=0 to 9 do if not (M in Digits) then
begin
Digits := Digits + [M];
for I := 0 to 9 do if not (I in Digits) then
begin
Digits := Digits + [I];
for L := 0 to 9 do if not (L in Digits) then
begin
//writeln(k,e,r,s,t,n,m,i,l);
MET := 100*M+10*E+T; //MET
TIEN := (1000*T+100*I+10*E+N); //MET * TIEN
REKENEN := (1000000*R+100000*E+10000*K+1000*E+100*N+10*E+N);
LETTERS := (1000000*L+100000*E+10000*T+1000*T+100*E+10*R+S);
RES := REKENEN + (MET*TIEN) - LETTERS;
KERST := (10000*K+1000*E+100*R+10*S+T);
if (Res = KERST) then
begin
write('K=',K);
write(', E=',E);
write(', R=',R);
write(', S=',S);
write(', T=',T);
write(', N=',N);
write(', M=',M);
write(', I=',I);
write(', L=',L);
write(' MINSTREEL=',M,I,N,S,T,R,E,E,L,', ');
writeln('REKENLES=',R,E,K,E,N,L,E,S);
if REKENLES[1] = -1 then
REKENLES[1] := 10000000*R+1000000*E+100000*K+10000*E+1000*N+100*L+10*E+S
else
begin
REKENLES[2] := 10000000*R+1000000*E+100000*K+10000*E+1000*N+100*L+10*E+S;
writeln(REKENLES[1],' * ',REKENLES[2],' = ',Int64(REKENLES[1])*Int64(REKENLES[2]));
Ticks := GetTickCount - T0;
writeln('Ticks: ',Ticks);
Exit; //We know there are only 2 solutions
end;
end;
end;
Digits := Digits - [I];
end;
Digits := Digits - [M];
end;
Digits := Digits - [N];
end;
Digits := Digits - [T];
end;
Digits := Digits - [S];
end;
Digits := Digits - [R];
end;
Digits := Digits - [E];
end;
end;
//Ticks: 344
end.