diff --git a/2018/algmyr/Makefile b/2018/algmyr/Makefile index 65a86449b..b9feaae4a 100644 --- a/2018/algmyr/Makefile +++ b/2018/algmyr/Makefile @@ -115,8 +115,8 @@ CSRC= ${PROG}.o DATA= TARGET= ${PROG} # -ALT_OBJ= -ALT_TARGET= +ALT_OBJ= ${PROG}.alt.o +ALT_TARGET= ${PROG}.alt ################# diff --git a/2018/algmyr/README.md b/2018/algmyr/README.md index c99f6f4b7..afae74a39 100644 --- a/2018/algmyr/README.md +++ b/2018/algmyr/README.md @@ -17,6 +17,12 @@ cat prog.c | ./prog # Printing garbage might break your font ./prog -d 2 0 out.raw # Decode the first (0th) channel out of two ``` +[Cody Boone Ferguson](/winners.html#Cody_Boone_Ferguson) made this entry not +crash when a file cannot be opened. The original file, kept for the wonderful +format, is in [prog.alt.c](prog.alt.c). See below for details. Thank you Cody +for your assistance! + + ## Try: ```sh @@ -25,15 +31,29 @@ cat prog.c | ./prog # Printing garbage might break your font # Who needs cat? ./prog prog.c | ./prog -d 1 0 -# Assuming ALSA +# Assuming ALSA: echo '<<<<<< /\_/\_/\ _-_-_-_ !!!!! :.:.:.: >>>>>> ****** ~~~~~~~' | ./prog | aplay -c1 -fFLOAT_LE -r44100 -# Assuming sox +# Assuming sox: echo -n ' MENE MENE TEKEL UPHARSIN ' | ./prog | sox -t raw -c 1 -r 44100 -L -e floating-point -b 32 - -n spectrogram -d 10 -X 300 + +# now open spectrogram.png with a graphics viewer or editor ``` +### Alternate code: + +The original source which will crash if a file cannot be opened but which also +has a nicer layout can be found in [prog.alt.c](prog.alt.c). Try: + + +```sh +make alt +``` + +Use `prog.alt` as you would `prog`. + ## Judges' comments: Be warned, this is not your garden variety text-to-speech program! Earplugs are advised, diff --git a/2018/algmyr/prog.alt.c b/2018/algmyr/prog.alt.c new file mode 100644 index 000000000..76fe8d58e --- /dev/null +++ b/2018/algmyr/prog.alt.c @@ -0,0 +1,66 @@ +#include +#include +#define M malloc(sizeof( +#define R fread(x,sizeof(float),Z*w,f) +#define E free( + +char*G= +" " +" '" +"@(*AP( " +" " +" " +" " +" " +" _" +"0 #@ . \"C^*/XH\"Q2_U(D&(5*E0C 4B54DV X \"!9A@ 89H$ !" +"0(/@@4 @(/@@( #@T @(\" @( P, , P# , #Y1244^ ?R 0#%)14,A#9)24$B 1" +"_)!0,$Y145%R Y145$^&!81T! #9)24DV#Y)24DP ;&P -C4 $$B% @ !04%!04 @4(D$ #!(1" +"4 @#U574$^'^0D)!_&Z1D9'_$*!@8%^'Z!@8'_(&1D9'_(\"0D)#_%Z1D8%^/\\0$!#_ \"!_X$ /X! 0" +"$&(-$*!#_ $! 0'_/] ,$#_/\\&&&#_'Z!@8%^&\"0D)#_'V\"A8%^&>8D)#_$Z1D9%B(\" _X\" /X" +"! 0'^/ , PSP/P#' /\\,!@& 088!X!#@$>" +"!$*! H1#X)!04X!$9%1,1" +"(&!;A 0 _P " +" ! 0;H&!" +" @$\"" +"! (" +"\0"; int s,p,e,c,t,r,a,l; /* l e a k a g e */ + + int + F(int o + ,int n, int t + ){char*p=(o*(136-o) + >=1260)*7*(o-9)+G; for( + n=!(o=-1); n=*p+++64*n-*G + ,(o+=3)>>2<5-t; ); return 255 + &n>>2*o%8; } float L[0x400];int + T(float a,float b,float l,float*e) + {return L[0x3ff]||!(e[1]=b*a+l**e)|| + !T(l*a-b**e,b,l,e+1); } float f(int x) + {int w=s<>x&&P+(* + h+=f(e*(l+a*(2*x+1))*y)*f(s/2-e*a*y+e*a*y*y*(t/p + )/(s/p)))),++x); float z=f(y*t)*f(y*t); *h=z*(1+3* + z+2*z*z)/6**h/c; } return h-i-r+1; } void d(int w, + int n,FILE*f){int Z=s/t; int S[5]; float**P=M float* + )*c);for(r=0;r1?v[1][0]*c+v[1][1]:0; a=7;l=16;if(r ==11620){d (atoi + (v[2]), atoi(v[3]), q<5?stdin:fopen(v[4],"r")); return 0; } char*H=malloc(c),* h=H; sprintf (H,"\0" + "Usage\n" " %s [-" "h] [-d #c cid] file1 file2 ... (or stdin)"+(q-1&&r==11624 ),v[0]);if(* H)q=1;int + w=2>q?1:q -1; FILE**f=M FILE*)*w); f[0]=stdin; if(q>1)for(r=0; rungetc(* H++,*f); for(r =w; r--;) +{ i[r]=getc (f[r]); if(i[r]<0)i[r]=!++x; } if(x==w)break; while(++r<6){ while(C(b++,t,w,F(*i++,r< 5,r))); i-= +w; fwrite(b-=w,sizeof(float),l,stdout); } fflush(stdout); } while(fclose(f[--w]),w); E f); E b); E i); E h);} + diff --git a/2018/algmyr/prog.c b/2018/algmyr/prog.c index 76fe8d58e..55360384e 100644 --- a/2018/algmyr/prog.c +++ b/2018/algmyr/prog.c @@ -59,7 +59,7 @@ char*G= 44100 ;p=25; e= 55;c=256; t=75; r=q>1?v[1][0]*c+v[1][1]:0; a=7;l=16;if(r ==11620){d (atoi (v[2]), atoi(v[3]), q<5?stdin:fopen(v[4],"r")); return 0; } char*H=malloc(c),* h=H; sprintf (H,"\0" "Usage\n" " %s [-" "h] [-d #c cid] file1 file2 ... (or stdin)"+(q-1&&r==11624 ),v[0]);if(* H)q=1;int - w=2>q?1:q -1; FILE**f=M FILE*)*w); f[0]=stdin; if(q>1)for(r=0; rq?1:q-1;FILE**f=M FILE*)*w);f[0]=stdin;if(q>1)for(r=0;rungetc(* H++,*f); for(r =w; r--;) { i[r]=getc (f[r]); if(i[r]<0)i[r]=!++x; } if(x==w)break; while(++r<6){ while(C(b++,t,w,F(*i++,r< 5,r))); i-= w; fwrite(b-=w,sizeof(float),l,stdout); } fflush(stdout); } while(fclose(f[--w]),w); E f); E b); E i); E h);}