[Fwd: Re: [linux-support]Für C-Programmierer :o)]

michel gibsound at bluewin.ch
Fri Oct 8 01:14:02 CEST 2004


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

michel wrote:

|
| Für C gibt/gab es andere Wettbewerbe. Ich muss in meinen Archiven
| schauen, einige Programme sind bemerkenswert. Kennt jemand maze.c ?
|
|
Die Disketten halten noch, hier sind diese C Programme. Man kriegt
manchmal warnings mit gcc. Eine saubere Syntax or die Lesbarkeit waren
nicht das Ziel...

maze.c (die Font Courrier-Font ist sehr empfohlen):
$ more maze.c
char*M,A,Z,E=40,J[40],T[40];main(C){for(*J=A=scanf(M="%d",&C);
- --            E;             J[              E]             =T
[E   ]=  E)   printf("._");  for(;(A-=Z=!Z)  ||  (printf("\n|"
)    ,   A    =              39              ,C             --
)    ;   Z    ||    printf   (M   ))M[Z]=Z[A-(E   =A[J-Z])&&!C
&    A   ==             T[                                  A]
|6<<11<rand()||!C&!Z?J[T[E]=T[A]]=E,J[T[A]=A-Z]=A,"_.":" |"];}

Beim Ausführen kriege ich "Segmentation fault". Auf einer alten
HP-9000 Workstation (HP-UX V9 oder 10) bekam man ein Labyrinth. Kann
jemand probieren?

Etwas das läuft:

$ more laman.c
a[900];         b;c;d=1         ;e=1;f;         g;h;O;          main(k,
l)char*         *l;{g=          atoi(*          ++l);           for(k=
0;k*k<          g;b=k           ++>>1)          ;for(h=         0;h*h<=
g;++h);         --h;c=(         (h+=g>h         *(h+1))         -1)>>1;
while(d         <=g){           ++O;for         (f=0;f<         O&&d<=g
;++f)a[         b<<5|c]         =d++,b+=        e;for(          f=0;f<O
&&d<=g;         ++f)a[b         <<5|c]=         d++,c+=         e;e= -e
;}for(c         =0;c<h;         ++c){           for(b=0         ;b<k;++
b){if(b         <k/2)a[         b<<5|c]         ^=a[(k          -(b+1))
<<5|c]^=        a[b<<5          |c]^=a[         (k-(b+1         ))<<5|c]
;printf(        a[b<<5|c        ]?"%-4d"        :"    "         ,a[b<<5
|c]);}          putchar(        '\n');}}        /*Mike          Laman*/

wiederum, mit einer Courrier-Font sieht es gut aus und das Ergebnis
auch :-)
$ laman.out 300
290 289 288 287 286 285 284 283 282 281 280 279 278 277 276 275 274 273
291 226 225 224 223 222 221 220 219 218 217 216 215 214 213 212 211 272
292 227 170 169 168 167 166 165 164 163 162 161 160 159 158 157 210 271
293 228 171 122 121 120 119 118 117 116 115 114 113 112 111 156 209 270
294 229 172 123 82  81  80  79  78  77  76  75  74  73  110 155 208 269
295 230 173 124 83  50  49  48  47  46  45  44  43  72  109 154 207 268
296 231 174 125 84  51  26  25  24  23  22  21  42  71  108 153 206 267
297 232 175 126 85  52  27  10  9   8   7   20  41  70  107 152 205 266
298 233 176 127 86  53  28  11  2   1   6   19  40  69  106 151 204 265
299 234 177 128 87  54  29  12  3   4   5   18  39  68  105 150 203 264
300 235 178 129 88  55  30  13  14  15  16  17  38  67  104 149 202 263
~    236 179 130 89  56  31  32  33  34  35  36  37  66  103 148 201 262
~    237 180 131 90  57  58  59  60  61  62  63  64  65  102 147 200 261
~    238 181 132 91  92  93  94  95  96  97  98  99  100 101 146 199 260
~    239 182 133 134 135 136 137 138 139 140 141 142 143 144 145 198 259
~    240 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 258
~    241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256


$ more tetris.c
long
h[4];t(){h[3]-=h[3]/3000;setitimer(0,h,0);}c,d,l,v[]={(int)t,0,2},w,s,I,K
=0,i=276,j,k,q[276],Q[276],*n=q,*m,x=17,f[]={7,-13,-12,1,8,-11,-12,-1,9,-1,1,
12,3,-13,-12,-1,12,-1,11,1,15,-1,13,1,18,-1,1,2,0,-12,-1,11,1,-12,1,13,10,-12,
1,12,11,-12,-1,1,2,-12,-1,12,13,-12,12,13,14,-11,-1,1,4,-13,-12,12,16,-11,-12,
12,17,-13,1,-1,5,-12,12,11,6,-12,12,24};u(){for(i=11;++i<264;)if((k=q[i])-Q[i]
){Q[i]=k;if(i-++I||i%12<1)printf("\033[%d;%dH",(I=i)/12,i%12*2+28);printf(
"\033[%dm
"+(K-k?0:5),k);K=k;}Q[263]=c=getchar();}G(b){for(i=4;i--;)if(q[i?b+
n[i]:b])return 0;return
1;}g(b){for(i=4;i--;q[i?x+n[i]:x]=b);}main(C,V,a)char*
*V,*a;{h[3]=1000000/(l=C>1?atoi(V[1]):2);for(a=C>2?V[2]:"jkl
pq";i;i--)*n++=i<
25||i%12<2?7:0;srand(getpid());system("stty cbreak -echo stop
u");sigvec(14,v,
0);t();puts("\033[H\033[J");for(n=f+rand()%7*4;;g(7),u(),g(0)){if(c<0){if(G(x+
12))x+=12;else{g(7);++w;for(j=0;j<252;j=12*(j/12+1))for(;q[++j];)if(j%12==10){
for(;j%12;q[j--]=0);u();for(;--j;q[j+12]=q[j]);u();}n=f+rand()%7*4;G(x=17)||(c
=a[5]);}}if(c==*a)G(--x)||++x;if(c==a[1])n=f+4**(m=n),G(x)||(n=m);if(c==a[2])G
(++x)||--x;if(c==a[3])for(;G(x+12);++w)x+=12;if(c==a[4]||c==a[5]){s=sigblock(
8192);printf("\033[H\033[J\033[0m%d\n",w);if(c==a[5])break;for(j=264;j--;Q[j]=
0);while(getchar()-a[4]);puts("\033[H\033[J\033[7m");sigsetmask(s);}}d=popen(
"stty -cbreak echo stop \023;sort -mnr -o HI - HI;cat HI","w");fprintf(d,
"%4d from level %1d by %s\n",w,l,getlogin());pclose(d);}

Ergebnis: spielbar! (Tasten: j,k,l und Leerschlag - siehe
tetris_snap2.jpg)

have_fun.c ist nicht gross, macht nicht viel, ist vermutlich nicht
ganz einfach zu verstehen.
$ more have_fun.c
main() { printf(&unix["\021%six\012\0"],(unix)["have"]+"fun"-0x60);}
$ ./have_fun.out
unix

Erklärung??

| Gruss, Michel Odillon

PS: da das erste JPG zu gross war (=> E-mail zu gross), habe ich die
Komprimierung| erhöht.

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.3 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iD8DBQFBZb+nw+hOcsVSzAMRAjKUAJ9Y/P2F9iGQS8Yexe4qOYI+Wz42ngCgkuMK
5Ini565N++CnUPEFnOANyxI=
=CjWc
-----END PGP SIGNATURE-----

-------------- next part --------------
A non-text attachment was scrubbed...
Name: tetris_snap2.jpg
Type: image/jpeg
Size: 15954 bytes
Desc: not available
Url : http://www.lugbe.ch/vpipermail/linux-support/attachments/20041008/b57b58d2/tetris_snap2.jpe


More information about the Linux-support mailing list