fork(1) download
  1. function is_empty(stack:string):boolean;
  2. begin
  3. is_empty:=length(stack)=0;
  4. end;
  5.  
  6. function top(stack:string):char;
  7. begin
  8. top:=stack[length(stack)];
  9. end;
  10.  
  11. function push(stack:string;item:char):string;
  12. begin
  13. push:=stack+item;
  14. end;
  15.  
  16. function pop(stack:string):string;
  17. begin
  18. setlength(stack,length(stack)-1);
  19. pop:=stack;
  20. end;
  21.  
  22. function anagrammer(orig:string; samp:string; stack:string):integer;
  23. var
  24. count:integer;
  25. newstack:string;
  26. begin
  27. count:=0;
  28. if samp='' then anagrammer:=1
  29. else
  30. begin
  31. if (not is_empty(stack)) and (top(stack)=samp[1]) then
  32. begin
  33. newstack:=pop(stack);
  34. count:=count+anagrammer(orig,copy(samp,2,length(samp)),newstack);
  35. end;
  36.  
  37. if length(orig)>0 then
  38. begin
  39. newstack:=push(stack,orig[1]);
  40. count:=count+anagrammer(copy(orig,2,length(orig)),samp,newstack);
  41. end;
  42. anagrammer:=count;
  43. end;
  44. end;
  45.  
  46. begin
  47. writeln(anagrammer('TORT','TROT',''));
  48. writeln(anagrammer('MADAM','ADAMM',''));
  49. writeln(anagrammer('LONG','GONG',''));
  50. writeln(anagrammer('AAAAAAAA','AAAAAAAA',''));
  51. end.
Success #stdin #stdout 0.02s 256KB
stdin
Standard input is empty
stdout
2
4
0
1430