Initial data commit
This commit is contained in:
parent
72d218235f
commit
f23f22d71c
199087 changed files with 3378941 additions and 0 deletions
60
Task/Semordnilap/XPL0/semordnilap.xpl0
Normal file
60
Task/Semordnilap/XPL0/semordnilap.xpl0
Normal file
|
|
@ -0,0 +1,60 @@
|
|||
include c:\cxpl\codes; \intrinsic 'code' declarations
|
||||
string 0; \use zero-terminated strings
|
||||
def LF=$0A, CR=$0D, EOF=$1A;
|
||||
|
||||
proc RevStr(S); \Reverse order of characters in a string
|
||||
char S;
|
||||
int I, J, T;
|
||||
[J:= 0;
|
||||
while S(J) do J:= J+1;
|
||||
J:= J-1;
|
||||
I:= 0;
|
||||
while I<J do
|
||||
[T:= S(I); S(I):= S(J); S(J):= T; \swap
|
||||
I:= I+1; J:= J-1;
|
||||
];
|
||||
];
|
||||
|
||||
func StrEqual(S1, S2); \Compare strings, return 'true' if equal
|
||||
char S1, S2;
|
||||
int I;
|
||||
[for I:= 0 to 80-1 do
|
||||
[if S1(I) # S2(I) then return false;
|
||||
if S1(I) = 0 then return true;
|
||||
];
|
||||
];
|
||||
|
||||
int C, I, J, SJ, Count;
|
||||
char Dict, Word(80);
|
||||
[\Read file on command line redirected as input, i.e: <unixdict.txt
|
||||
Dict:= GetHp; \starting address of block of local "heap" memory
|
||||
I:= 0; \ [GetHp does exact same thing as Reserve(0)]
|
||||
repeat repeat C:= ChIn(1) until C#LF; \get chars sans line feeds
|
||||
if C = CR then C:= 0; \replace carriage return with terminator
|
||||
Dict(I):= C; I:= I+1;
|
||||
until C = EOF;
|
||||
SetHp(Dict+I); \set heap pointer beyond Dict
|
||||
I:= 0; Count:= 0;
|
||||
loop [J:= 0; \get word at I
|
||||
repeat C:= Dict(I+J); Word(J):= C; J:= J+1;
|
||||
until C=0;
|
||||
RevStr(Word);
|
||||
J:= J+I; \set J to following word in Dict
|
||||
if Dict(J) = EOF then quit;
|
||||
SJ:= J; \save index to following word
|
||||
loop [if StrEqual(Word, Dict+J) then
|
||||
[Count:= Count+1;
|
||||
if Count <= 5 then
|
||||
[RevStr(Word); \show some examples
|
||||
Text(0, Word); ChOut(0, ^ ); Text(0, Dict+J); CrLf(0);
|
||||
];
|
||||
quit;
|
||||
];
|
||||
repeat J:= J+1 until Dict(J) = 0;
|
||||
J:= J+1;
|
||||
if Dict(J) = EOF then quit;
|
||||
];
|
||||
I:= SJ; \next word
|
||||
];
|
||||
IntOut(0, Count); CrLf(0);
|
||||
]
|
||||
Loading…
Add table
Add a link
Reference in a new issue