Merge pull request #311 from xexyl/1985-lycklama
This commit is contained in:
12 files changed
+23
-106
No files matched your search
@@ -128,6 +128,7 @@ all: data ${TARGET}
|
|||||||
supernova deep_magic magic charon pluto
|
supernova deep_magic magic charon pluto
|
||||||
|
|
||||||
${PROG}: ${PROG}.c
|
${PROG}: ${PROG}.c
|
||||||
|
@echo "NOTE: this entry will segfault without an arg."
|
||||||
${CC} ${CFLAGS} $< -o $@ ${LIBS}
|
${CC} ${CFLAGS} $< -o $@ ${LIBS}
|
||||||
|
|
||||||
# alternative executable
|
# alternative executable
|
||||||
|
|||||||
@@ -10,9 +10,9 @@ Mike Laman
|
|||||||
|
|
||||||
./laman <positive number>
|
./laman <positive number>
|
||||||
|
|
||||||
[Cody Boone Ferguson](/winners.html#Cody_Boone_Ferguson) fixed this entry to not
|
|
||||||
segfault if no arg is specified. Instead it'll print nothing. Thank you Cody for
|
NOTE: this entry will segfault without an arg.
|
||||||
your assistance!
|
|
||||||
|
|
||||||
## Try:
|
## Try:
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
a[900]; b;c;d=1 ;e=1;f; g;h;O; main(k,
|
a[900]; b;c;d=1 ;e=1;f; g;h;O; main(k,
|
||||||
l)char* *l;{g= l[1]? atoi(*++l) :0;for(k=
|
l)char* *l;{g= atoi(* ++l); for(k=
|
||||||
0;k*k< g;b=k ++>>1) ;for(h= 0;h*h<=
|
0;k*k< g;b=k ++>>1) ;for(h= 0;h*h<=
|
||||||
g;++h); --h;c=( (h+=g>h *(h+1)) -1)>>1;
|
g;++h); --h;c=( (h+=g>h *(h+1)) -1)>>1;
|
||||||
while(d <=g){ ++O;for (f=0;f< O&&d<=g
|
while(d <=g){ ++O;for (f=0;f< O&&d<=g
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ make all
|
|||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
[Cody Boone Ferguson](/winners.html#Cody_Boone_Ferguson) fixed this to work with
|
[Cody Boone Ferguson](/winners.html#Cody_Boone_Ferguson) fixed this to compile with
|
||||||
modern compilers. In the past 'define' in `#define` could even be defined but to
|
modern compilers. In the past 'define' in `#define` could even be defined but to
|
||||||
get this to work on modern systems Cody changed the `#o` lines to `#define`. The
|
get this to work on modern systems Cody changed the `#o` lines to `#define`. The
|
||||||
`lycklama.alt.c` is the original source code as it provides some fun input for
|
`lycklama.alt.c` is the original source code as it provides some fun input for
|
||||||
|
|||||||
@@ -128,6 +128,7 @@ all: data ${TARGET}
|
|||||||
supernova deep_magic magic charon pluto
|
supernova deep_magic magic charon pluto
|
||||||
|
|
||||||
${PROG}: ${PROG}.c
|
${PROG}: ${PROG}.c
|
||||||
|
@echo "NOTE: the buffer size of this entry is very small at 100."
|
||||||
${CC} ${CFLAGS} $< -o $@ ${LIBS}
|
${CC} ${CFLAGS} $< -o $@ ${LIBS}
|
||||||
|
|
||||||
# alternative executable
|
# alternative executable
|
||||||
|
|||||||
+11
-15
@@ -18,20 +18,6 @@ make all
|
|||||||
./schnitzi < textfile
|
./schnitzi < textfile
|
||||||
```
|
```
|
||||||
|
|
||||||
[Cody Boone Ferguson](/winners.html#Cody_Boone_Ferguson) increased the buffer
|
|
||||||
size from 100 to 10000. Changing it to use `fgets()` instead of `gets()` is more
|
|
||||||
problematic because when feeding the source code to the program the output
|
|
||||||
results in compiler errors and not only that but the gets() is still there in
|
|
||||||
the generated output. Even changing the buffer size can result in compilation
|
|
||||||
errors if not done correctly. The generated output also does not have a changed
|
|
||||||
buffer size. Changing it to use fgets() can happen later, maybe, but bigger
|
|
||||||
files can now be parsed by the original code. An example is the Makefile. Cody
|
|
||||||
gave some tips on how this entry works, in order to make the entry use fgets()
|
|
||||||
and compile successfully too, in the [bugs.md](/bugs.md) file. Thank you Cody!
|
|
||||||
|
|
||||||
For the original source file [schnitzi.alt.c](schnitzi.alt.c) see below.
|
|
||||||
|
|
||||||
|
|
||||||
## Try:
|
## Try:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
@@ -39,10 +25,19 @@ For the original source file [schnitzi.alt.c](schnitzi.alt.c) see below.
|
|||||||
./schnitzi < /etc/passwd
|
./schnitzi < /etc/passwd
|
||||||
```
|
```
|
||||||
|
|
||||||
|
NOTE: the buffer size is very small at 100. It's easy to fix the buffer size but
|
||||||
|
it is not as easy to change it to `fgets()`. [Cody Boone
|
||||||
|
Ferguson](/winners.html#Cody_Boone_Ferguson) gives some hints in the
|
||||||
|
[bugs.md](/bugs.md) file on how this entry works which might be useful in order
|
||||||
|
to get this to use `fgets()` which would prevent a warning at linking or
|
||||||
|
runtime. The file [schnitzi.alt.c](schnitzi.alt.c) has this to get anyone
|
||||||
|
started, should they wish to tackle it (Cody will in time). The problem with
|
||||||
|
changing the buffer size is that even when it works the generated output (see
|
||||||
|
judges' comments below) will not be 100% correct duplication of the program.
|
||||||
|
|
||||||
### Alternate code:
|
### Alternate code:
|
||||||
|
|
||||||
For the original version with a smaller buffer try:
|
To build the alternative code try:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
make alt
|
make alt
|
||||||
@@ -50,6 +45,7 @@ make alt
|
|||||||
|
|
||||||
Use `schnitzi.alt` as you would `schnitzi`.
|
Use `schnitzi.alt` as you would `schnitzi`.
|
||||||
|
|
||||||
|
|
||||||
## Judges' comments:
|
## Judges' comments:
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ h mh111 de{l) +di (+'( d+% c n+
|
|||||||
*/ n = 0 ;
|
*/ n = 0 ;
|
||||||
main ( ) {
|
main ( ) {
|
||||||
char v [
|
char v [
|
||||||
100 ] , s;
|
10000 ] , s;
|
||||||
int t[100 ] ,
|
int t[100 ] ,
|
||||||
u[100 ] ; u
|
u[100 ] ; u
|
||||||
[ 0
|
[ 0
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ h mh111 de{l) +di (+'( d+% c n+
|
|||||||
*/ n = 0 ;
|
*/ n = 0 ;
|
||||||
main ( ) {
|
main ( ) {
|
||||||
char v [
|
char v [
|
||||||
10000 ] , s;
|
100 ] , s;
|
||||||
int t[100 ] ,
|
int t[100 ] ,
|
||||||
u[100 ] ; u
|
u[100 ] ; u
|
||||||
[ 0
|
[ 0
|
||||||
|
|||||||
@@ -131,6 +131,7 @@ all: data ${TARGET}
|
|||||||
supernova deep_magic magic charon pluto
|
supernova deep_magic magic charon pluto
|
||||||
|
|
||||||
${PROG}: ${PROG}.c
|
${PROG}: ${PROG}.c
|
||||||
|
@echo "NOTE: this program will crash if a file specified cannot be opened."
|
||||||
${CC} ${CFLAGS} $< -o $@ ${LIBS}
|
${CC} ${CFLAGS} $< -o $@ ${LIBS}
|
||||||
|
|
||||||
# alternative executable
|
# alternative executable
|
||||||
|
|||||||
+1
-17
@@ -17,11 +17,7 @@ cat prog.c | ./prog # Printing garbage might break your font
|
|||||||
./prog -d 2 0 out.raw # Decode the first (0th) channel out of two
|
./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
|
NOTE: this entry will crash if a file specified cannot be opened.
|
||||||
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:
|
## Try:
|
||||||
|
|
||||||
@@ -42,18 +38,6 @@ echo -n ' MENE MENE TEKEL UPHARSIN ' | ./prog |
|
|||||||
# now open spectrogram.png with a graphics viewer or editor
|
# 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:
|
## Judges' comments:
|
||||||
|
|
||||||
Be warned, this is not your garden variety text-to-speech program! Earplugs are advised,
|
Be warned, this is not your garden variety text-to-speech program! Earplugs are advised,
|
||||||
|
|||||||
@@ -1,66 +0,0 @@
|
|||||||
#include<stdio.h>
|
|
||||||
#include<stdlib.h>
|
|
||||||
#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#' /\\,<H$\"C', @'R# ,&AD8F'(&!_P ,,,, _X&!! @0\" 0 "
|
|
||||||
"$! 0$! @0( \\5%14\" X1$0G_!$1$1$./\\2$1$. T5%14. \"0D'\\ 'Y)"
|
|
||||||
"144X \\0$ C_ !7Q 7A$! $2# 3_ $!_H \\0'Q ? \\0"
|
|
||||||
"$! ? X1$1$.#A$1\"1_'](1$0X @0$ @? (5%14)"
|
|
||||||
" 1$?X0!\\\" 0$>!@& 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<<!!T(1,6.135885e-3,-1.882472e-5
|
|
||||||
+1,L); x=(x%w+w)%w<<9; return(L[x/s]*(s-x%
|
|
||||||
s)+L[x/s+1]*(x%s))/s; } int C(float*h,float*
|
|
||||||
i,int r,int P){ int x,y,c; for(y=0; h<i; ++y,h
|
|
||||||
+=r){ c=P<1; for(*h=x=0; x<8; c+=(1&P>>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;r<c;++r){ P[r]=M float)*Z); C(P[r],P[r]
|
|
||||||
+Z,1,r); } float*x=M float)*Z*w); for (; ; ){ for(r=0;
|
|
||||||
r<5 ; ++r){ int o=1; for(R,a=256; o&&--a; )for(o=t=0; t<Z; o+=
|
|
||||||
P[a][ t]!=x[w*t+n],++t); S[r]=a; } if(R-Z*w)break; for(r=a= - 12;r<
|
|
||||||
5&&(a+= a<11?22:1)<127; )for(r=-1; ++r<5&&F(a,1,r)==S[r]; );if(a <127&&r
|
|
||||||
==5 )putchar( a); } for(; --c; E P[c])); E P); fclose(f);}int main(int q,char**v) {s=
|
|
||||||
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; r<w; f[r]=fopen(v[r +1],"r"),++r); int l=s/t
|
|
||||||
*w; float *b=M float)*l ),*t=b+l; int*i=M int)*w); for(; ; ){ int x=*h&&1>ungetc(* 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);}
|
|
||||||
|
|
||||||
+1
-1
@@ -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
|
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"
|
(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
|
"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;r<w;(((f[r]=fopen(v[r+1],"r"))||(exit(1),1))),++r); int l=s/t
|
w=2>q?1:q -1; FILE**f=M FILE*)*w); f[0]=stdin; if(q>1)for(r=0; r<w; f[r]=fopen(v[r +1],"r"),++r); int l=s/t
|
||||||
*w; float *b=M float)*l ),*t=b+l; int*i=M int)*w); for(; ; ){ int x=*h&&1>ungetc(* H++,*f); for(r =w; r--;)
|
*w; float *b=M float)*l ),*t=b+l; int*i=M int)*w); for(; ; ){ int x=*h&&1>ungetc(* 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-=
|
{ 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);}
|
w; fwrite(b-=w,sizeof(float),l,stdout); } fflush(stdout); } while(fclose(f[--w]),w); E f); E b); E i); E h);}
|
||||||
|
|||||||
Reference in new issue
Block a user