Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
| Newsgroups | comp.lang.c |
|---|---|
| Date | 2015-06-01 18:04 -0700 |
| References | (7 earlier) <be10e258-bd94-4000-849f-eb7cd63272f2@googlegroups.com> <ccfc958e-f44e-4ece-a516-f59a44dc5a3e@googlegroups.com> <a063bfe3-3de5-4409-84c9-fc67b5601eaf@googlegroups.com> <6f80e574-39cf-4fde-85cc-874b9ebc4f6c@googlegroups.com> <ct2jrdFrf5eU2@mid.individual.net> |
| Message-ID | <7beb4e90-e514-45e4-bee6-77211b33abe9@googlegroups.com> (permalink) |
| Subject | Re: Column slices |
| From | luser droog <luser.droog@gmail.com> |
On Monday, June 1, 2015 at 3:36:14 AM UTC-5, Ian Collins wrote:
> asetofsymbols@gmail.com wrote:
> > I wrote:"
>
> More gobbledegook?
>
If you like gobbledegook, here's my code all golfed-
up and gook. There's even a little whitespace in there.
A very little.
$ cat arrg.c
#include<stdarg.h>
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include"ppnarg.h" //https://github.com/luser-dr00g/inca/blob/master/ppnarg.h
typedef char C; typedef int I;
typedef struct a{I r,*d,*w,*p;}*A;
#define R return
#define DO(n,x){I i=0,N=(n);for(;i<N;++i){x;}}/*loop i=[0..n)*/
I tr(I r,I*d){ I z=1; DO(r,z*=d[i]) R z; } /* productdims */
dw(I r,I*d,I*w){ I x=1; DO(r,w[r-1-i]=x; x*=d[r-1-i]) } /* calculate weights */
A ah(I r,I*d,I sz){ A z=malloc((sizeof*z)+(sizeof(I)*(r+r+sz))); /* array header + sz extra */
z->r=r; z->d=(I*)(((C*)z)+sizeof*z); z->w=z->d+r; z->p=NULL;
memcpy(z->d,d,r*sizeof(I)); dw(r,d,z->w); R z; }
A ara(I r,I*d){ I sz=tr(r,d); A z=ah(r,d,sz); z->p=z->w+r; R z; } /* arraya */
dv(I r,I*d,va_list v){ DO(r,d[i]=va_arg(v,I)) } /* loaddimsv */
A ar(I r,...){ va_list v; I d[r]; va_start(v,r); dv(r,d,v); va_end(v); R ara(r,d); } /* array rm */
#define ar(...)ar(PP_NARG(__VA_ARGS__),__VA_ARGS__)
A caa(I*p,I r,I*d){ A z=ah(r,d,0); z->p=p; R z; } /* casta rm */
A ca(I*p,I r,...){ va_list v; I d[r]; va_start(v,r); dv(r,d,v); va_end(v); R caa((I*)p,r,d); }
#define ca(p,...)ca((I*)p,PP_NARG(__VA_ARGS__),__VA_ARGS__)
A cl(A a){ A z=ah(a->r,a->d,0);
memcpy(z->d,a->d,z->r*sizeof(I));
memcpy(z->w,a->w,z->r*sizeof(I)); z->p=a->p; R z; } /* clone */
I*ela(A a,I*j){ I x=0; DO(a->r, x+=j[i]*a->w[i]) R a->p+x; } /* elema */
I*elv(A a,va_list v){ I j[a->r]; dv(a->r,j,v); R ela(a,j); } /* elemv */
I*el(A a,...){ I*z; va_list v; va_start(v,a); z=elv(a,v); va_end(v); R z; } /* elem */
int *vx(I x,I*d,I r,I*v){ DO(r, v[r-1-i]=x%d[r-1-i]; x/=d[r-1-i]) R v; } /* vector_index */
int rx(I*v,I*d,I r){ I z=*v; DO(r-1, z*=d[i+1]; z+=v[i+1]) R z; } /* ravel_index */
A cp(A a){ I sz=tr(a->r,a->d); A z=ah(a->r,a->d,sz); z->p=z->w+z->r;
I j[z->r]; DO(sz, vx(i,z->d,z->r,j); z->p[i]=*ela(a,j)) R z; } /* copy rm */
#define CASE ;break;case
#define OP(x,y)((((x))*256)+((y)))
#define OPS(_) _("+", '+', 0, +, 0) \
_("*", '*', 0, *, 1) \
_("=", '=', 0, ==, 1) \
_("==",'=','=',==, 1) \
/* f f0 f1 F id */
#define BINOP(f,f0,f1,F,id) CASE OP(f0,f1): *el(z,i) = *el(x,i) F *el(y,i);
A bin(A x,C*f,A y){ A z=cp(x); DO(x->d[0], switch(OP(*f,f[1])){ OPS(BINOP) }) R z; }
#define bin(X,F,Y) bin(X,#F,Y)
#define REDID(f,f0,f1,F,id) CASE OP(f0,f1): z = id;
#define REDOP(f,f0,f1,F,id) CASE OP(f0,f1): z = *el(y,n-2-i) F z;
int red(C*f,A y){ I z; I n=y->d[0];
switch(OP(*f,f[1])){ OPS(REDID) }
if (n){ z=*el(y,n-1);
if (n-1>0) DO(n-1, switch(OP(*f,f[1])){ OPS(REDOP) }) }
R z; }
#define red(F,Y) red(#F,Y)
A xt(A a,I x){ I r=a->r+x; I d[r];
DO(x, d[i]=1) memcpy(d+x,a->d,a->r*sizeof(I)); R caa(a->p,r,d); } /* extend */
A iot(I n){ A z=ar(n); DO(n,*el(z,i)=i) R z; } /* index generator */
A xp(A a,I*j){
I d[a->r]; I w[a->r];
DO(a->r, d[i]=a->d[j[i]];
w[i]=a->w[j[i]])
A z=caa(a->p,r,d);
memcpy(z->w,w,a->r*sizeof(I)); R z; } /* transpose */
A sl0(A a,I x){ I r=a->r-1; A z=ah(r,a->d+1,0);
memcpy(z->w,a->w+1,r*sizeof(I));
z->p=a->p+x*a->w[0]; R z; }
A sl(A a,I*s,I*f){ I r=0;
DO(a->r, r+=s[i]!=f[i])
I d[r]; I w[r]; I j=0;
DO(r, while(s[j]==f[j])++j;
d[i]=1+(s[j]<f[j]? f[j]-s[j] : s[j]-f[j]);
w[i]= s[j]<f[j]? a->w[j] : -a->w[j];
++j)
A z=caa(a->p,r,d);
memcpy(z->w,w,r*sizeof(I)); DO(a->r, z->p += s[i] * a->w[i]) R z; } /* slices [s[i]..f[i]] */
I contig(A a){ I x=1;
DO(a->r, if(a->w[a->r-1-i]!=x) R 0;
x*=a->d[a->r-1-i])
R 1; }
pr(A a,I wid){ I max; I copy=0;
if (wid){ max=wid; } else {
I sz=tr(a->r,a->d);
if (!contig(a)){
a=cp(a);
copy=1;
}
max=0;
DO(sz,
sz=snprintf(NULL,0,"%d",a->p[i]);
if (sz>max) max=sz)
}
switch(a->r){
case 0: printf("%*d\n", max, *a->p); break;
case 1: {
I sep=0;
DO(a->d[0],
if (sep) printf(" ");
printf("%*d", max, *el(a,i));
sep=1) }
if (wid==0) printf("\n"); break;
default:DO(a->d[0], A t=sl0(a,i);
pr(t,max);
printf("\n");
free(t)) break;
}
if(copy)free(a); }
dmp(A a){
printf("%d\n",a->r);
DO(a->r,printf("%d ",a->d[i])) printf("\n");
DO(a->r,printf("%d ",a->w[i])) printf("\n");
printf("%p %p %p %p\n",
(void*)a, (void*)a->d, (void*)a->w, (void*)a->p); }
int main(){
A x=ar(3);
*el(x,0)=5;
*el(x,1)=6;
*el(x,2)=7;
dmp(x);
pr(x,0);
A a=iot(24);
dmp(a);
pr(a,0);
A b=ca(a->p,2,3,4);
dmp(b);
pr(b,0);
A c=sl(b,(I[]){0,1,1},(I[]){0,2,3});
pr(c,0);
A d=xp(c,(I[]){1,0});
pr(d,0);
return 0;
}
Back to comp.lang.c | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
Column slices luser droog <luser.droog@gmail.com> - 2015-05-05 23:18 -0700
Column slices asetofsymbols@gmail.com - 2015-05-06 00:26 -0700
Re: Column slices luser droog <luser.droog@gmail.com> - 2015-05-06 02:33 -0700
Re: Column slices Bartc <bc@freeuk.com> - 2015-05-06 10:46 +0100
Re: Column slices asetofsymbols@gmail.com - 2015-05-07 11:02 -0700
Re: Column slices asetofsymbols@gmail.com - 2015-05-07 14:05 -0700
Re: Column slices Nobody <nobody@nowhere.invalid> - 2015-05-06 08:29 +0100
Re: Column slices Bartc <bc@freeuk.com> - 2015-05-06 10:30 +0100
Re: Column slices luser droog <luser.droog@gmail.com> - 2015-05-06 03:11 -0700
Re: Column slices asetofsymbols@gmail.com - 2015-05-08 09:05 -0700
Re: Column slices luser droog <luser.droog@gmail.com> - 2015-05-11 16:50 -0700
Re: Column slices asetofsymbols@gmail.com - 2015-05-11 17:24 -0700
Re: Column slices asetofsymbols@gmail.com - 2015-05-11 19:01 -0700
Re: Column slices luser droog <luser.droog@gmail.com> - 2015-05-19 09:56 -0700
Re: Column slices asetofsymbols@gmail.com - 2015-05-19 10:43 -0700
Re: Column slices asetofsymbols@gmail.com - 2015-05-19 11:16 -0700
Re: Column slices asetofsymbols@gmail.com - 2015-05-19 11:27 -0700
Re: Column slices luser droog <luser.droog@gmail.com> - 2015-05-19 21:28 -0700
Re: Column slices asetofsymbols@gmail.com - 2015-05-20 08:05 -0700
Re: Column slices luser droog <luser.droog@gmail.com> - 2015-05-19 21:20 -0700
Re: Column slices asetofsymbols@gmail.com - 2015-05-20 08:55 -0700
Re: Column slices asetofsymbols@gmail.com - 2015-05-20 08:58 -0700
Re: Column slices asetofsymbols@gmail.com - 2015-05-21 01:22 -0700
Re: Column slices asetofsymbols@gmail.com - 2015-05-21 01:34 -0700
Re: Column slices asetofsymbols@gmail.com - 2015-05-26 19:17 -0700
Re: Column slices asetofsymbols@gmail.com - 2015-05-31 13:56 -0700
Re: Column slices Keith Thompson <kst-u@mib.org> - 2015-05-31 14:23 -0700
Re: Column slices Ian Collins <ian-news@hotmail.com> - 2015-06-01 09:37 +1200
Re: Column slices asetofsymbols@gmail.com - 2015-06-01 01:23 -0700
Re: Column slices Ian Collins <ian-news@hotmail.com> - 2015-06-01 20:35 +1200
Re: Column slices mark.bluemel@gmail.com - 2015-06-01 03:50 -0700
Re: Column slices luser droog <luser.droog@gmail.com> - 2015-06-01 18:04 -0700
Re: Column slices luser droog <luser.droog@gmail.com> - 2015-06-01 18:16 -0700
Re: Column slices "Chris M. Thomasson" <nospam@nospam.nospam> - 2015-06-01 19:57 -0700
Re: Column slices Rosario19 <Ros@invalid.invalid> - 2015-06-02 08:30 +0200
Re: Column slices luser droog <luser.droog@gmail.com> - 2015-06-02 00:22 -0700
Re: Column slices Ike Naar <ike@iceland.freeshell.org> - 2015-05-12 06:06 +0000
Re: Column slices Ike Naar <ike@iceland.freeshell.org> - 2015-05-12 21:15 +0000
Re: Column slices asetofsymbols@gmail.com - 2015-05-13 20:49 -0700
Re: Column slices luser droog <luser.droog@gmail.com> - 2015-05-13 23:43 -0700
Re: Column slices luser droog <luser.droog@gmail.com> - 2015-05-13 23:44 -0700
Re: Column slices asetofsymbols@gmail.com - 2015-05-14 01:02 -0700
Re: Column slices asetofsymbols@gmail.com - 2015-05-15 23:06 -0700
Re: Column slices asetofsymbols@gmail.com - 2015-05-16 03:46 -0700
Re: Column slices luser droog <luser.droog@gmail.com> - 2015-05-23 00:17 -0700
Re: Column slices asetofsymbols@gmail.com - 2015-05-23 07:59 -0700
Re: Column slices asetofsymbols@gmail.com - 2015-05-23 21:25 -0700
Re: Column slices luser droog <luser.droog@gmail.com> - 2015-05-24 18:29 -0700
Re: Column slices luser droog <luser.droog@gmail.com> - 2015-05-24 18:08 -0700
Re: Column slices asetofsymbols@gmail.com - 2015-05-25 00:13 -0700
csiph-web