Merge pull request #1111 from xexyl/1989-ovdluhe-loop-fix
This commit is contained in:
5 files changed
+15
-7
No files matched your search
@@ -68,7 +68,7 @@ CINCLUDE=
|
||||
|
||||
# Optimization
|
||||
#
|
||||
OPT= -O3
|
||||
OPT=
|
||||
|
||||
# Default flags for ANSI C compilation
|
||||
#
|
||||
|
||||
@@ -38,8 +38,7 @@ by chance or is killed.
|
||||
### Alternate code:
|
||||
|
||||
The author suggested that one varies the definition of `P` from 2 through 10. As
|
||||
it's a `#define` it's easy to set up which [Cody Boone
|
||||
Ferguson](/winners.html#Cody_Boone_Ferguson) did for us. To use try:
|
||||
it's a `#define` it's easy to set up. To use try:
|
||||
|
||||
```sh
|
||||
make CFLAGS="-DP=9" clobber alt
|
||||
@@ -47,6 +46,7 @@ make CFLAGS="-DP=9" clobber alt
|
||||
|
||||
Use `ovdluhe.alt` as you would `ovdluhe`.
|
||||
|
||||
|
||||
## Judges' remarks:
|
||||
|
||||
Run this program using your favorite text file as input. Files
|
||||
|
||||
@@ -20,7 +20,7 @@ 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;}}
|
||||
ep=p+A;while(*ep) *(ep-A)= *(ep++); *(ep-A)=pe;++ap;}}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);}
|
||||
@@ -14,7 +14,7 @@ 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;}}
|
||||
ep=p+A;while(*ep) *(ep-A)= *(ep++); *(ep-A)=pe;++ap;}}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);}
|
||||
+10
-2
@@ -494,8 +494,16 @@ you know how?
|
||||
|
||||
## [1989/ovdluhe](1989/ovdluhe/ovdluhe.c) ([README.md](1989/ovdluhe/README.md]))
|
||||
|
||||
Cody provided an [alternate version](1989/ovdluhe/ovdluhe.alt.c) based on the
|
||||
author's remarks. See the README.md for details.
|
||||
Cody fixed an infinite loop where the program would print the same thing over
|
||||
and over again, flooding the screen. The problem is that there was a `for` loop
|
||||
that by necessity had to not have an increment stage but only in the `if` path
|
||||
(in the loop itself) did the pointer get updated. Looking at the code it might
|
||||
be that it can work just as well by adding the increment in the loop itself but
|
||||
this was not done.
|
||||
|
||||
Cody also provided an [alternate version](1989/ovdluhe/ovdluhe.alt.c) based on the
|
||||
author's remarks. See the README.md for details. The fix described above was
|
||||
fixed in this version too, after it was discovered and fixed.
|
||||
|
||||
|
||||
## [1989/paul](1989/paul/paul.c) ([README.md](1989/paul/README.md]))
|
||||
|
||||
Reference in new issue
Block a user