Add alt code to 1989/ovdluhe + update README.md
The alt code is based on the author's remarks. It allows one to more easily redefine the macro they refer to (P) in a way that lets them try it out without having to modify the code. Updated .gitignore. Format fixes in README.md.
This commit is contained in:
1 parent
155a1edae2
commit
fcb19507a8
4 files changed
+61
-14
No files matched your search
@@ -0,0 +1,26 @@
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <time.h>
|
||||
typedef char ape;
|
||||
#define EA register
|
||||
#define EP unsigned
|
||||
#define A 1
|
||||
#define AP (A<<A)
|
||||
#ifndef P
|
||||
#define P (A<<AP)
|
||||
#endif
|
||||
#define AE ((P<<P)<<A)
|
||||
#define PE (((A<<P)<<P)<<P)
|
||||
#define E ((EP)A>>A)
|
||||
#define APE {EA EP ape,ea=AE;while(ea--) e[ea]=E;}
|
||||
PA();
|
||||
;ape a[PE+A],ap,*ae,p[P+A],e[AE];
|
||||
main(){ape pe,*ep=a;srand((EP)time((long)E));
|
||||
while(((*(ep++)=getchar())!=-A)&&((ep-a)<PE));
|
||||
*(ae= --ep)=E;for(ap=E;ap<=P;){APE;if(pe=PA())
|
||||
{putchar(pe);if(ap<P){p[ap]=pe;ap++;}else{
|
||||
ep=p+A;while(*ep) *(ep-A)= *(ep++); *(ep-A)=pe;}}else break;}}
|
||||
PA(){EA ape pe,*ep=a,pa,Ap=E;for(ep=a;ep<ae-P;ep++)
|
||||
if(!strncmp(ep,p,ap)){e[*(ep+ap)]++;Ap++;}if(!Ap)return(Ap);
|
||||
pa=rand()%Ap+A;pe=~E,Ap=!Ap;while((Ap+=e[++pe])<pa);return(pe);}
|
||||
Reference in new issue
Block a user