{I. 262.
Szab¢ 928 Attila 10.o.t.
P‚cs, Le‹wey Kl ra Gimn.
szabo.attila94@gmail.com

Free Pascal 2.4}
Uses crt;
Var
 ft,ff:file of char; fm:file of byte;
 minta,titkos:array[65..90]of longint;
 om,ot:array[1..26]of longint;
 com,cot:array[1..26]of char;
 sm,st:longint;
 csere:array[65..90]of char;
 d,t:char; e,i,j:byte; k:longint; w:boolean;
Procedure stat_titkos;
Begin
 reset(ft);
 for i:=65 to 90 do titkos[i]:=0;
 while not eof(ft) do begin
  read(ft,d); inc(titkos[ord(d)]);
 end;
End;
Procedure stat_minta;
Begin
 reset(fm);
 for i:=65 to 90 do minta[i]:=0;
 while not eof(fm) do begin
  read(fm,e); if(e=$20)then e:=$51 else
  if(e>$60)then begin
   if(e>$60)and(e<$7b)then e:=e-$20 else
   if(e=$c1)or(e=$e1)then e:=$41 else
   if(e=$c9)or(e=$e9)then e:=$45 else
   if(e=$cd)or(e=$ed)then e:=$49 else
   if(e=$d3)or(e=$f3)or(e=$d5)or(e=$f5)or(e=$d6)or(e=$f6)then e:=$4f else
   if(e=$da)or(e=$fa)or(e=$db)or(e=$fb)or(e=$dc)or(e=$fc)then e:=$55;
  end;
  if(e>$40)and(e<$5b)then inc(minta[e]);
 end;
 close(fm);
End;
Procedure kiir_stat;
Begin
 sm:=0; st:=0;
 for i:=65 to 90 do begin sm:=sm+minta[i]; st:=st+titkos[i]; end;
 for i:=65 to 90 do begin om[i-64]:=minta[i]; ot[i-64]:=titkos[i]; end;
 for i:=1 to 26 do begin cot[i]:=chr(i+64); com[i]:=chr(i+64); end;
 for i:=1 to 25 do for j:=i+1 to 26 do begin
  if(ot[i]<ot[j])then begin
   k:=ot[i]; ot[i]:=ot[j]; ot[j]:=k;
   d:=cot[i]; cot[i]:=cot[j]; cot[j]:=d;
  end;
  if(om[i]<om[j])then begin
   k:=om[i]; om[i]:=om[j]; om[j]:=k;
   d:=com[i]; com[i]:=com[j]; com[j]:=d;
  end;
 end;
 for i:=1 to 13 do write(i:4,'.|'); writeln;
 for i:=1 to 13 do write(cot[i]:5,'|'); writeln;
 for i:=1 to 13 do write(ot[i]/st*100:5:2,'|'); writeln;
 for i:=1 to 13 do write(com[i]:5,'|'); writeln;
 for i:=1 to 13 do write(om[i]/sm*100:5:2,'|'); writeln; writeln;
 for i:=14 to 26 do write(i:4,'.|'); writeln;
 for i:=14 to 26 do write(cot[i]:5,'|'); writeln;
 for i:=14 to 26 do write(ot[i]/st*100:5:2,'|'); writeln;
 for i:=14 to 26 do write(com[i]:5,'|'); writeln;
 for i:=14 to 26 do write(om[i]/sm*100:5:2,'|');
End;
Procedure idezet;
Begin
 gotoxy(1,13); reset(ft);
 for k:=1 to 560 do begin read(ft,d); write(csere[ord(d)]); end;
 gotoxy(1,24); for i:=65 to 90 do write(chr(i)); writeln;
 for i:=65 to 90 do write(csere[i]);
End;
Procedure cserel;
Begin
 gotoxy(1,21);
 write('Csere err‹l: '); readln(d); if(ord(d)>$60)then d:=chr(ord(d)-$20);
 if(d='!') then w:=false else begin
 write('Csere erre: '); readln(t); if(ord(t)<$60)then t:=chr(ord(t)+$20);
 if(t='q')then t:=' '; csere[ord(d)]:=t; end;
End;
Procedure kiir;
Begin
 rewrite(ff); reset(ft);
 while not eof(ft) do begin
  read(ft,d); write(ff,csere[ord(d)]);
 end;
 close(ff); close(ft);
End;
Begin
 assign(ft,paramstr(1)); assign(fm,paramstr(2)); assign(ff,paramstr(3));
 clrscr; for i:=65 to 90 do csere[i]:=chr(i);
 stat_titkos; stat_minta; kiir_stat; w:=true;
 while w do begin idezet; cserel; end;
 kiir; clrscr;
End.
