[ tkaranovic @ 11.01.2010. 06:19 ] @
Evo (još) malo da probam nove jezičke tagove za kod... Code (pascal): {$M 65520,0,200000} type xydpri=record xp: 1..21; yp: 1..21; dpp: 1..200; dpd: 1..200;end; xydprimem = ^xydpri; type xytok=record xt: 1..21; yt: 1..21; ciji: char; end; xytokmem= ^xytok; Datk= FILE OF xytok; var E: Text; F: Datk; fajl, prot: string[12]; x, xlo, y, ylo, br, brp: integer; xy, kar: string[2]; tok:array[1..440] of xytokmem; isto: Boolean; lgk:array[1..440,1..8] of string[10]; dpri:array[1..3520] of xydprimem; procedure pocni; begin Randomize; x:=(Random(7))+7; y:=(Random(7))+7; tok[1]^.xt:=x; tok[1]^.yt:=y; tok[1]^.ciji:='m'; reset(F); seek(F, filesize(F)); Write(F, tok[1]^); Rewrite(E); Write(E, y, ' ', x); close(E); Halt(1); end; procedure stubr(var sub: integer); begin if Length(kar)>1 then begin sub:=(Ord(kar[1])-48)*10; sub:=sub+(Ord(kar[2])-48); end else sub:=(Ord(kar[1])-48); end; procedure klinija; begin fajl:=ParamStr(1); if fajl='' then begin writeln; writeln('MALISA [fajl1] [fajl2] [br1] [br2] '); writeln(' Takmicar za igru XOX na tabli 21 x 21.'); writeln(' Autor: Tomislav Karanovic'); halt(1); end; Assign(E, fajl); fajl:=ParamStr(2); Assign(F, fajl); {$I-} Reset(F); {$I+} if IOResult <> 0 then Rewrite(F); kar:=ParamStr(3); if kar='' then pocni else begin prot:=kar; stubr(y); kar:=ParamStr(4); stubr(x); prot:=prot+' '+kar; end; end; procedure radi; var brl, brd, brt, dpbr, pri, gde: integer; brk: 1..3; kk: char; procedure jos; var brjs: integer; jes: boolean; procedure prior(pr1, pr2, pr3: integer); begin if (dpri[brjs]^.dpp=pr1)and(pri=pr2) then dpri[brjs]^.dpd:=pr3; end; begin jes:=true; if (xlo>0)and(xlo<22)and(ylo>0)and(ylo<22) then for brjs:=1 to brp do if (tok[brjs]^.xt=xlo)and(tok[brjs]^.yt=ylo) then begin brjs:=brp; jes:=false; end; for brjs:=1 to dpbr do if (dpri[brjs]^.xp=xlo)and(dpri[brjs]^.yp=ylo) then begin prior( 20, 20, 5); prior(20, 104, 6); prior(104, 20, 6); prior(20, 105, 7); prior(105, 20, 7); prior(20, 166, 8); prior(166, 20, 8); prior(20, 100, 9); prior(100, 20, 9); prior(20, 102, 10); prior(102, 20, 10); prior(20, 168, 12); prior(168, 20, 11); prior(20, 169, 12); prior(169, 20, 12); prior(20, 170, 13); prior(170, 20, 13); prior(20, 126, 14); prior(126, 20, 14); prior(20, 127, 15); prior(127, 20, 15); prior(20, 175, 16); prior(175, 20, 16); prior(20, 190, 17); prior(190, 20, 17); prior(20, 191, 18); prior(191, 20, 18); prior(20, 192, 19); prior(192, 20, 19); prior(100, 100, 22); prior(100, 104, 24); prior(104, 100, 24); prior(100, 105, 25); prior(105, 100, 25); prior(100, 166, 26); prior(166, 100, 26); prior(100, 102, 27); prior(102, 100, 27); prior(100, 168, 28); prior(168, 100, 28); prior(100, 169, 29); prior(169, 100, 29); prior(100, 170, 30); prior(170, 100, 30); prior(100, 126, 31); prior(126, 100, 31); prior(100, 127, 32); prior(127, 100, 32); prior(100, 175, 33); prior(175, 100, 33); prior(100, 190, 34); prior(190, 100, 34); prior(100, 191, 35); prior(191, 100, 35); prior(100, 192, 36); prior(192, 100, 36); prior(100, 196, 37); prior(196, 100, 37); prior(102, 102, 41); prior(102, 126, 42); prior(126, 102, 42); prior(102, 127, 43); prior(127, 102, 43); prior(102, 175, 44); prior(175, 102, 44); prior(102, 190, 45); prior(190, 102, 45); prior(102, 191, 46); prior(191, 102, 46); prior(102, 192, 47); prior(192, 102, 47); prior(102, 104, 48); prior(104, 102, 48); prior(102, 105, 49); prior(105, 102, 49); prior(102, 166, 50); prior(166, 102, 50); prior(102, 168, 51); prior(168, 102, 51); prior(102, 169, 52); prior(169, 102, 52); prior(102, 170, 53); prior(170, 102, 53); prior(196, 102, 54); prior(102, 196, 54); prior(104, 104, 56); prior(104, 105, 57); prior(105, 104, 57); prior(104, 166, 58); prior(166, 104, 58); prior(104, 168, 59); prior(168, 104, 59); prior(104, 169, 60); prior(169, 104, 60); prior(104, 170, 61); prior(170, 104, 61); prior(104, 126, 62); prior(126, 104, 62); prior(104, 127, 63); prior(127, 104, 63); prior(104, 175, 64); prior(175, 104, 64); prior(104, 190, 65); prior(190, 104, 65); prior(104, 191, 66); prior(191, 104, 66); prior(104, 192, 67); prior(192, 104, 67); prior(104, 196, 68); prior(196, 104, 68); prior(105, 105, 71); prior(105, 166, 72); prior(166, 105, 72); prior(105, 168, 73); prior(168, 105, 73); prior(105, 169, 74); prior(169, 105, 74); prior(105, 170, 75); prior(170, 105, 75); prior(105, 126, 76); prior(126, 105, 76); prior(105, 127, 77); prior(127, 105, 77); prior(105, 196, 78); prior(196, 105, 78); prior(126, 126, 106); prior(126, 127, 107); prior(127, 126, 107); prior(126, 175, 108); prior(175, 126, 108); prior(126, 190, 109); prior(190, 126, 109); prior(126, 191, 110); prior(191, 126, 110); prior(126, 192, 111); prior(192, 126, 111); prior(126, 166, 112); prior(166, 126, 112); prior(126, 168, 113); prior(168, 126, 113); prior(126, 169, 114); prior(169, 126, 114); prior(126, 170, 115); prior(170, 126, 115); prior(196, 126, 116); prior(126, 196, 116); prior(127, 127, 116); prior(127, 175, 117); prior(175, 127, 117); prior(127, 190, 118); prior(190, 127, 118); prior(127, 191, 119); prior(191, 127, 119); prior(127, 192, 120); prior(192, 127, 120); prior(127, 166, 121); prior(166, 127, 121); prior(127, 168, 122); prior(168, 127, 122); prior(127, 169, 123); prior(169, 127, 123); prior(127, 170, 124); prior(170, 127, 124); prior(196, 127, 125); prior(127, 196, 125); prior(166, 166, 21); prior(166, 168, 129); prior(168, 166, 129); prior(166, 169, 130); prior(169, 166, 130); prior(166, 170, 131); prior(170, 166, 131); prior(166, 175, 132); prior(175, 166, 132); prior(166, 190, 133); prior(190, 166, 133); prior(166, 191, 134); prior(191, 166, 134); prior(166, 192, 135); prior(192, 166, 135); prior(166, 196, 136); prior(196, 166, 136); prior(175, 175, 21); prior(175, 190, 138); prior(190, 175, 138); prior(175, 191, 139); prior(191, 175, 139); prior(175, 192, 140); prior(192, 175, 140); prior(196, 175, 141); prior(175, 196, 141); prior(168, 168, 142); prior(168, 170, 143); prior(170, 168, 143); prior(168, 175, 144); prior(175, 168, 144); prior(170, 170, 145); prior(169, 169, 146); prior(169, 170, 147); prior(170, 169, 147); prior(169, 175, 148); prior(175, 169, 148); prior(168, 190, 151); prior(190, 168, 151); prior(168, 191, 152); prior(191, 168, 152); prior(168, 192, 153); prior(192, 168, 153); prior(169, 190, 157); prior(190, 169, 157); prior(169, 191, 158); prior(191, 169, 158); prior(169, 192, 159); prior(192, 169, 159); prior(170, 190, 160); prior(190, 170, 160); prior(170, 191, 161); prior(191, 170, 161); prior(170, 192, 162); prior(192, 170, 162); prior(168, 196, 163); prior(196, 168, 163); prior(169, 196, 164); prior(196, 169, 164); prior(170, 196, 165); prior(196, 170, 165); prior(190, 190, 172); prior(191, 191, 173); prior(192, 192, 174); prior(190, 191, 178); prior(191, 190, 178); prior(190, 192, 179); prior(192, 190, 179); prior(191, 192, 180); prior(192, 191, 180); prior(190, 196, 181); prior(196, 190, 181); prior(191, 196, 182); prior(196, 191, 182); prior(192, 196, 183); prior(196, 192, 183); prior(196, 196, 193); prior(196, 197, 194); prior(197, 196, 195); prior(197, 197, 196); end; if jes then begin dpbr:=dpbr+1; dpri[dpbr]^.xp:=xlo; dpri[dpbr]^.yp:=ylo; dpri[dpbr]^.dpp:=pri; dpri[dpbr]^.dpd:=200; end; end; procedure kase; begin case brt of 1: begin xlo:=tok[br]^.xt; ylo:=(tok[br]^.yt+gde); jos; end; 2: begin xlo:=(tok[br]^.xt+gde); ylo:=tok[br]^.yt; jos; end; 3: begin xlo:=tok[br]^.xt; ylo:=(tok[br]^.yt-gde); jos; end; 4: begin xlo:=(tok[br]^.xt-gde); ylo:=tok[br]^.yt; jos; end; 5: begin xlo:=(tok[br]^.xt+gde); ylo:=(tok[br]^.yt+gde); jos; end; 6: begin xlo:=(tok[br]^.xt+gde); ylo:=(tok[br]^.yt-gde); jos; end; 7: begin xlo:=(tok[br]^.xt-gde); ylo:=(tok[br]^.yt-gde); jos; end; 8: begin xlo:=(tok[br]^.xt-gde); ylo:=(tok[br]^.yt+gde); jos; end; end; end; procedure skup(pris, gde1, gde2: integer); begin pri:=pris; gde:=gde1; kase; if gde2>0 then begin pri:=pris; gde:=gde2; kase; end; end; procedure kasedva; var kdx, kdy: integer; begin kdx:=tok[br]^.xt; kdy:=tok[br]^.yt; case brd of 1: begin if (kdy+4)>21 then lgk[br,brd][6]:='k'; if (kdy+3)>21 then lgk[br,brd][5]:='k'; if (kdy+2)>21 then lgk[br,brd][4]:='k'; if (kdy+1)>21 then lgk[br,brd][3]:='k'; if (kdy-1)<1 then lgk[br,brd][1]:='k'; end; 2: begin if (kdx+4)>21 then lgk[br,brd][6]:='k'; if (kdx+3)>21 then lgk[br,brd][5]:='k'; if (kdx+2)>21 then lgk[br,brd][4]:='k'; if (kdx+1)>21 then lgk[br,brd][3]:='k'; if (kdx-1)<1 then lgk[br,brd][1]:='k'; end; 3: begin if (kdy-4)<1 then lgk[br,brd][6]:='k'; if (kdy-3)<1 then lgk[br,brd][5]:='k'; if (kdy-2)<1 then lgk[br,brd][4]:='k'; if (kdy-1)<1 then lgk[br,brd][3]:='k'; if (kdy+1)>21 then lgk[br,brd][1]:='k'; end; 4: begin if (kdx-4)<1 then lgk[br,brd][6]:='k'; if (kdx-3)<1 then lgk[br,brd][5]:='k'; if (kdx-2)<1 then lgk[br,brd][4]:='k'; if (kdx-1)<1 then lgk[br,brd][3]:='k'; if (kdx+1)>21 then lgk[br,brd][1]:='k'; end; 5: begin if ((kdx+4)>21)or((kdy+4)>21) then lgk[br,brd][6]:='k'; if ((kdx+3)>21)or((kdy+3)>21) then lgk[br,brd][5]:='k'; if ((kdx+2)>21)or((kdy+2)>21) then lgk[br,brd][4]:='k'; if ((kdx+1)>21)or((kdy+1)>21) then lgk[br,brd][3]:='k'; if ((kdx-1)<1)or((kdy-1)<1) then lgk[br,brd][1]:='k'; end; 6: begin if ((kdx+4)>21)or((kdy-4)<1) then lgk[br,brd][6]:='k'; if ((kdx+3)>21)or((kdy-3)<1) then lgk[br,brd][5]:='k'; if ((kdx+2)>21)or((kdy-2)<1) then lgk[br,brd][4]:='k'; if ((kdx+1)>21)or((kdy-1)<1) then lgk[br,brd][3]:='k'; if ((kdx-1)<1)or((kdy+1)>21) then lgk[br,brd][1]:='k'; end; 7: begin if ((kdx-4)<1)or((kdy-4)<1) then lgk[br,brd][6]:='k'; if ((kdx-3)<1)or((kdy-3)<1) then lgk[br,brd][5]:='k'; if ((kdx-2)<1)or((kdy-2)<1) then lgk[br,brd][4]:='k'; if ((kdx-1)<1)or((kdy-1)<1) then lgk[br,brd][3]:='k'; if ((kdx+1)>21)or((kdy+1)>21) then lgk[br,brd][1]:='k'; end; 8: begin if ((kdx-4)<1)or((kdy+4)>21) then lgk[br,brd][6]:='k'; if ((kdx-3)<1)or((kdy+3)>21) then lgk[br,brd][5]:='k'; if ((kdx-2)<1)or((kdy+2)>21) then lgk[br,brd][4]:='k'; if ((kdx-1)<1)or((kdy+1)>21) then lgk[br,brd][3]:='k'; if ((kdx+1)>21)or((kdy-1)<1) then lgk[br,brd][1]:='k'; end; end; end; begin reset(F); brp:=0; fajl:=''; dpbr:=0; pri:=0; if prot<>'' then begin while not Eof(F) do begin brp:=brp+1; Read(F, tok[brp]^); end; brp:=brp+1; tok[brp]^.xt:=x; tok[brp]^.yt:=y; tok[brp]^.ciji:='p'; reset(F); seek(F, filesize(F)); Write(F, tok[brp]^); end; x:=0; y:=0; for br:=1 to brp do begin for brd:=1 to 8 do begin lgk[br,brd]:='nnnnnn'; kasedva; lgk[br,brd][2]:=tok[br]^.ciji; end; for brl:=1 to brp do begin for brd:=1 to 6 do begin if brd=6 then brd:=-1; if (tok[brl]^.xt=tok[br]^.xt)and(tok[brl]^.yt=(tok[br]^.yt+brd)) then lgk[br,1][brd+2]:=tok[brl]^.ciji; if (tok[brl]^.yt=tok[br]^.yt)and(tok[brl]^.xt=(tok[br]^.xt+brd)) then lgk[br,2][brd+2]:=tok[brl]^.ciji; if (tok[brl]^.xt=tok[br]^.xt)and(tok[brl]^.yt=(tok[br]^.yt-brd)) then lgk[br,3][brd+2]:=tok[brl]^.ciji; if (tok[brl]^.yt=tok[br]^.yt)and(tok[brl]^.xt=(tok[br]^.xt-brd)) then lgk[br,4][brd+2]:=tok[brl]^.ciji; if (tok[brl]^.xt=(tok[br]^.xt+brd))and(tok[brl]^.yt=(tok[br]^.yt+brd)) then lgk[br,5][brd+2]:=tok[brl]^.ciji; if (tok[brl]^.xt=(tok[br]^.xt+brd))and(tok[brl]^.yt=(tok[br]^.yt-brd)) then lgk[br,6][brd+2]:=tok[brl]^.ciji; if (tok[brl]^.xt=(tok[br]^.xt-brd))and(tok[brl]^.yt=(tok[br]^.yt-brd)) then lgk[br,7][brd+2]:=tok[brl]^.ciji; if (tok[brl]^.xt=(tok[br]^.xt-brd))and(tok[brl]^.yt=(tok[br]^.yt+brd)) then lgk[br,8][brd+2]:=tok[brl]^.ciji; if brd=-1 then brd:=6; end; end; end; for br:=1 to brp do begin for brt:=1 to 8 do begin for brk:=1 to 3 do begin case brk of 1:kk:='n'; 2:kk:='p'; 3:kk:='k'; end; if (lgk[br,brt]=kk+'mmmmn') then skup(1,4,0); if (lgk[br,brt]=kk+'mmmnm') then skup(1,3,0); if (lgk[br,brt]=kk+'mmnmm') then skup(1,2,0); if (lgk[br,brt]=kk+'mnmmm') then skup(1,1,0); end; for brk:= 1 to 3 do begin case brk of 1:kk:='m'; 2:kk:='k'; 3:kk:='n'; end; if (lgk[br,brt]=kk+'ppppn') then skup(2,4,0); if (lgk[br,brt]=kk+'pppnp') then skup(2,3,0); if (lgk[br,brt]=kk+'ppnpp') then skup(2,2,0); if (lgk[br,brt]=kk+'pnppp') then skup(2,1,0); if (lgk[br,brt]='npnnn'+kk) then skup(198,1,-1); if (lgk[br,brt]='mpnnn'+kk) then skup(199,1,0); if (lgk[br,brt]='kpnnn'+kk) then skup(199,1,0); end; if (lgk[br,brt]='nmmmnn') then skup(3,3,-1); if (lgk[br,brt]='nmmmnp') then skup(3,3,-1); if (lgk[br,brt]='nmmmnk') then skup(3,3,-1); if (lgk[br,brt]='nmmnmn') then skup(3,2,-1); if (lgk[br,brt]='nmnmmn') then skup(3,1,-1); if (lgk[br,brt]='npppnn') then skup(20,3,-1); if (lgk[br,brt]='nppnpn') then skup(20,2,-1); if (lgk[br,brt]='npnppn') then skup(20,1,-1); for brk:= 1 to 2 do begin case brk of 1:kk:='m'; 2:kk:='k'; end; if (lgk[br,brt]='npppn'+kk) then skup(20,3,-1); if (lgk[br,brt]='nppnp'+kk) then skup(100,2,-1); if (lgk[br,brt]='npnpp'+kk) then skup(100,1,-1); end; for brk:= 1 to 2 do begin case brk of 1:kk:='m'; 2:kk:='k'; end; if (lgk[br,brt]=kk+'pppnn') then skup(100,3,4); if (lgk[br,brt]=kk+'ppnpn') then skup(100,2,4); if (lgk[br,brt]=kk+'pnppn') then skup(100,1,4); if (lgk[br,brt]=kk+'ppnnp') then skup(105,2,3); if (lgk[br,brt]=kk+'pnpnp') then skup(105,1,3); if (lgk[br,brt]=kk+'pnnpp') then skup(105,1,2); end; for brk:= 1 to 2 do begin case brk of 1:kk:='p'; 2:kk:='k'; end; if (lgk[br,brt]=kk+'mmmnn') then skup(102,3,4); if (lgk[br,brt]=kk+'mmnmn') then skup(102,2,0); if (lgk[br,brt]=kk+'mnmmn') then skup(102,1,0); if (lgk[br,brt]='nmmnm'+kk) then skup(102,2,-1); if (lgk[br,brt]='nmnmm'+kk) then skup(102,1,-1); if (lgk[br,brt]=kk+'mmnnm') then skup(127,2,3); if (lgk[br,brt]=kk+'mnmnm') then skup(127,1,3); if (lgk[br,brt]=kk+'mnnmm') then skup(127,1,2); end; if (lgk[br,brt]='nppnnp') then skup(104,2,3); if (lgk[br,brt]='npnpnp') then skup(104,1,3); if (lgk[br,brt]='npnnpp') then skup(104,1,2); if (lgk[br,brt]='nmmnnm') then skup(126,2,3); if (lgk[br,brt]='nmnmnm') then skup(126,1,3); if (lgk[br,brt]='nmnnmm') then skup(126,1,2); if (lgk[br,brt]='npnpnn') then skup(166,1,3); if (lgk[br,brt]='nppnnn') then skup(166,2,3); for brk:= 1 to 2 do begin case brk of 1:kk:='m'; 2:kk:='k'; end; if (lgk[br,brt]=kk+'pnpnn') then skup(168,1,3); if (lgk[br,brt]=kk+'ppnnn') then skup(168,2,3); if (lgk[br,brt]='npnpn'+kk) then skup(168,1,3); if (lgk[br,brt]='nppnn'+kk) then skup(168,2,3); if (lgk[br,brt]=kk+'pnnpn') then skup(170,1,2); if (lgk[br,brt]=kk+'pnnnp') then skup(170,1,2); if (lgk[br,brt]='npnnp'+kk) then skup(170,1,2); end; if (lgk[br,brt]='npnnpn') then skup(169,1,2); if (lgk[br,brt]='npnnnp') then skup(169,1,2); if (lgk[br,brt]='nmnmnn') then skup(175,1,3); if (lgk[br,brt]='nmmnnn') then skup(175,2,3); for brk:= 1 to 2 do begin case brk of 1:kk:='p'; 2:kk:='k'; end; if (lgk[br,brt]=kk+'mnmnn') then skup(190,1,3); if (lgk[br,brt]=kk+'mmnnn') then skup(190,2,3); if (lgk[br,brt]='nmnmn'+kk) then skup(190,1,3); if (lgk[br,brt]='nmmnn'+kk) then skup(190,2,3); if (lgk[br,brt]=kk+'mnnmn') then skup(192,1,2); if (lgk[br,brt]=kk+'mnnnm') then skup(192,1,2); if (lgk[br,brt]='nmnnm'+kk) then skup(192,1,2); end; if (lgk[br,brt]='nmnnmn') then skup(191,1,2); if (lgk[br,brt]='nmnnnm') then skup(191,1,2); if (lgk[br,brt]='nmnnnn') then skup(196,-1,1); for brk:=1 to 2 do begin case brk of 1:kk:='p'; 2:kk:='k'; end; if (lgk[br,brt]=kk+'mnnnn') then skup(197,1,0); if (lgk[br,brt]='nmnnn'+kk) then skup(196,-1,1); end; end; end; pri:=200; for br:=1 to dpbr do begin if (dpri[br]^.dpp=pri)or(brp=2) then begin Randomize; brt:=(Random(2))+1; if brt=2 then brd:=br; end; if dpri[br]^.dpp<pri then begin pri:=dpri[br]^.dpp; brd:=br; end; if dpri[br]^.dpd<pri then begin pri:=dpri[br]^.dpd; brd:=br; end; end; if pri<200 then begin x:=dpri[brd]^.xp; y:=dpri[brd]^.yp; end; isto:=false; if (x=0)and(y=0) then isto:=true; if not isto then for br:=1 to brp do if (x=tok[br]^.xt)and(y=tok[br]^.yt) then isto:=true; if isto then begin brd:=0; brt:=0; repeat brd:=brd+1; repeat brt:=brt+1; isto:=false; for br:=1 to brp do if (brd=tok[br]^.xt)and(brt=tok[br]^.yt) then isto:=true; if (brt=21)and(isto) then brt:=0; until (not isto)or(brt=0); until (not isto)or(brd>21); x:=brd; y:=brt; end; brp:=brp+1; tok[brp]^.xt:=x; tok[brp]^.yt:=y; tok[brp]^.ciji:='m'; reset(F); seek(F, filesize(F)); Write(F, tok[brp]^); Rewrite(E); Write(E, y, ' ', x); close(E); end; begin for br:=1 to 440 do GetMem(tok[br], sizeof(xytok)); for br:=1 to 3520 do GetMem(dpri[br], sizeof(xydpri)); klinija; radi; for br:=1 to 440 do FreeMem(tok[br], sizeof(xytok)); for br:=1 to 3520 do FreeMem(dpri[br], sizeof(xydpri)); end. |