Skip to content

Instantly share code, notes, and snippets.

@rexim
Created June 13, 2024 18:25
Show Gist options
  • Save rexim/f582098611b2be202051ba543e21da05 to your computer and use it in GitHub Desktop.
Save rexim/f582098611b2be202051ba543e21da05 to your computer and use it in GitHub Desktop.
// cc -w -include time.h -o qlock qlock.c // MIT Copyright (c) Tsoding
char*s="// cc -w -include time.h -o qlock qlock.c // MIT Copyright (c) Tsoding\n"
"char*s=\"?\";x,y,d[8],i,dx;f[]={31599,19812,14479,31207,23524,29411,29679,\n"
"30866,31727,31719,1040};char*so,*si;p(ch){i=x/2/(3+2);dx=x/2%(3+2);if(i<8&&(y-5)\n"
"/2<5&&dx<3&&(f[d[i]]>>((5-(y-5)/2-1)*3+dx))&1)printf(\"\\033[1;41;30m%c\\033[0m\",ch\n"
");else printf(\"%c\",ch);if(ch=='\\n'){y+=1;x=0;}else x+=1;}gd(){time_t t=time(NULL);struct\n"
" tm*tm=localtime(&t);d[0]=tm->tm_hour/10;d[1]=tm->tm_hour%10;d[2]=10;d[3]=tm->tm_min\n"
"/10;d[4]=tm->tm_min%10;d[5]=10;d[6]=tm->tm_sec/10;d[7]=tm->tm_sec%10;}main(){for\n"
"(gd();;printf(\"\\n\\033[%dA\\033[%dD\",y+1,x),sleep(1),gd())for(so=s,x=0,y=0;*so;so++\n"
")if(*so==63)for(si=s;*si;si++)switch(*si){case'\\n':p('\\\\');p('n');p('\"');p('\\n')\n"
";p('\"');break;case'\"':p('\\\\');p('\\\"');break;case'\\\\':p('\\\\');p('\\\\');break;default\n"
":p(*si);}else p(*so);}";x,y,d[8],i,dx;f[]={31599,19812,14479,31207,23524,29411,29679,
30866,31727,31719,1040};char*so,*si;p(ch){i=x/2/(3+2);dx=x/2%(3+2);if(i<8&&(y-5)
/2<5&&dx<3&&(f[d[i]]>>((5-(y-5)/2-1)*3+dx))&1)printf("\033[1;41;30m%c\033[0m",ch
);else printf("%c",ch);if(ch=='\n'){y+=1;x=0;}else x+=1;}gd(){time_t t=time(NULL);struct
tm*tm=localtime(&t);d[0]=tm->tm_hour/10;d[1]=tm->tm_hour%10;d[2]=10;d[3]=tm->tm_min
/10;d[4]=tm->tm_min%10;d[5]=10;d[6]=tm->tm_sec/10;d[7]=tm->tm_sec%10;}main(){for
(gd();;printf("\n\033[%dA\033[%dD",y+1,x),sleep(1),gd())for(so=s,x=0,y=0;*so;so++
)if(*so==63)for(si=s;*si;si++)switch(*si){case'\n':p('\\');p('n');p('"');p('\n')
;p('"');break;case'"':p('\\');p('\"');break;case'\\':p('\\');p('\\');break;default
:p(*si);}else p(*so);}
@andriemc
Copy link

glock.c?

@gusteivos
Copy link

croke ?

@CHEpachilo
Copy link

'i=x/2/(3+2);dx=x/2%(3+2);'

Why not i=x/10;dx=x/2%5;?

(5-(y-5)/2-1)*3

Basically 12-(y-5)/2*3

Also k=10; will save some space and x=y=0; instead of x=0,y=0;

Ну кисонька, милая, ну ещё рюмашечку

@tralph3
Copy link

tralph3 commented Jun 16, 2024

I can't believe nobody yet suggested to assign the values of d with braces like so:

d[8] = {
    tm->tm_hour/10,
    tm->tm_hour%10,
    [...]
}

Instead of assigning by index.

@CHEpachilo
Copy link

I can't believe nobody yet suggested to assign the values of d with braces like so:

d[8] = {
    tm->tm_hour/10,
    tm->tm_hour%10,
    [...]
}

Instead of assigning by index.

I thought about it. I didn't touch C for almost 10 years, but I believe this will work only with dynamic array, witch need a little more typing to work.

@alexlnkp
Copy link

alexlnkp commented Jun 22, 2024

it's too small now i have to add copious amounts of padding just so the clock isn't cropped 😔

/**********************ld -r -b binary -o qlock.o qlock.c*********************/
/*****************cc -w -include time.h -o out qlock.c qlock.o****************/
extern char _binary_main_c_start[];x,y,d[8],i,dx;f[]={31599,19812,14479,31207,\
23524,29411,29679,30866,31727,31719,1040};char*so,*si;p(ch){i=x/2/(3+1);dx=x/2\
%(3+1);if(i<8&&(y-1)/2<5&&dx<3&&(f[d[i]]>>((5-(y-1)/2-1)*3+dx))&1)printf(/****/
"\033[1;41;30m%c\033[0m",ch);else putchar(ch);if(ch=='\n'){y+=1;x=0;}else/****/
x+=1;}gd(){time_t t=time(NULL);struct tm*tm=localtime(&t);d[0]=tm->tm_hour/10;\
d[1]=tm->tm_hour%10;d[2]=10;d[3]=tm->tm_min/10;d[4]=tm->tm_min%10;d[5]=10;d[6]\
=tm->tm_sec/10;d[7]=tm->tm_sec%10;}main(){for(gd();;printf("\n\033[%dA\033[%dD"
,y+1,x),sleep(1),gd())for(so=_binary_main_c_start,x=0,y=0;*so;so++)p(*so);}/***
******************************************************************************/

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment