diff --git a/19/art.c b/19/art.c new file mode 100644 index 0000000..7777baf --- /dev/null +++ b/19/art.c @@ -0,0 +1,50 @@ +#include +#include +#include +#include + + typedef + #define U realloc + #define r(n,a,b,c) \ + case n :return(B){a ,b,c} + struct B{int x,y,z ;}B;inline static + B S( B a,B b){ return(B){a. x-b.x,a.y- + b. y ,a.z-b.z};} typedef struct Q{int c,e;B* + R; }Q;inline static int M( B a,B b){ return abs(a.x-b. + x)+abs(a.y-b .y)+abs(a.z- b.z);}const size_t Z= sizeof(B) + ,q=sizeof (Q);inline static B T(B b,int i){int x=b.x,y=b.y ,z=b.z; + switch(i){r( 0,x,y,z);r( 1,x,-y,-z);r (2,x,z,-y);r (3,x,-z,y);r (4,y,x,-z + );r( 5,y,-x,z); r(6,y,z,x);r (7,y,-z,-x); r(8,z,x,y);r (9,z,-x,-y );r( + 10,z ,y,-x);r(11,z,-y,x) ;r(12,-x,y,- z);r(13,-x, -y,z);r(14 ,-x, + z,y) ;r(15,-x ,-z,-y);r( 16,-y,x,z);r( 17,-y,-x,-z );r( + 18, -y,z,-x);r(19 ,-y,-z,x);r( 20,-z,x,-y );r( + 21,- z,-x,y) ;r(22,-z,y,x );r(23,- z,- + y,- x);} return(B){0};} int + main (){Q*E=NULL;getchar(); int + n,e =1,I=0,G =0,i + =0, j,m ;while (scanf ("-" + "- " "scanner " "%d " "---\n" ,&n + )== 1){n++;E=U(E,n *q );Q* s =& E[ n-1];s ->R= + NULL ;s->c =1;s ->e=n== 1;B b;while (scanf ("""" + "%i" ",%i," "%i", & b.x, &b.y,&b. z)==3) {s->R =U(s + ->R ,++s ->c *Z) ; s -> R[s ->c-1 ]=b;I++;} scanf( "%*""[" "^-" + "]" );memset(&s-> R[0],0 ,Z);}B *W;W =malloc( I*Z);I= E[0].c;memcpy(W,E [0]. + R,I *Z);while(e= 12){ { B Y[E[ i].c -1];p= 0;for( a=1;a< E[i] .c;a + ++) { B t=S( T(E[i] .R[a ],m),D );f=0; for(d= 0;d< + I;d ++)if(! memcmp ( &t ,& W[d ],Z )) { f++; + break ;}if( !f ) Y [ p ++]=t;} memcpy (W+I + ,Y,p *Z);I+= p;E[i] .R[0 ]=(B){-D. x,-D + .y,-D. z};E[i].e= 1;e ++; + printf("" "%d/" "%d\n", + e, n);} goto X;}}}}X: + }for(;i< n;i ++)for(j= + 0;jG) G= m ;} printf("" + "Silver: %d\nGold: %d\n",I + -1,G) ;}