在华为时写过一个《感谢代码》,昨天有同事旧事重提,提起那段代码,勾起了我对项目组的一些美好回忆,9个月过去了,望大家都好。我已经不记得当时是怎么写代码的了,但原理记得清楚,现在重写了一份,这次我把产生感谢代码的代码贴出来,它是一份C代码,编译运行以后打印出一段代码,这段代码就是感谢代码(一份C代码, 不能用C++编译器编译),感谢代码编译运行之后是几行感谢的话。雕虫小技,博君一笑。
gcc gen_thx_code.c -o gen_code && ./gen_code > thx.c && cat thx.c && gcc thx.c -o thx && ./thx
#include <stdio.h> const char * raw = "Feng Ge," "Wang Shiqiang," "Kui Ge," "Huang Jiaoshou," "Xiao Xuzong," "Zou Yan," "Hai Yan," "Liu Yi," "Mei Li," "Hu Chuanlie," "Zheng Yunhang," "De Bao," "Tao Ge," "...\n" "Thank you!\n" ; const char * fmt = "11111111111111111111111111111111111111111111111111\n" "11111111111111111111111111111111111111111111111111\n" "1111111111111111111111 111111111111111111111111111\n" "11111111 1111111111 111111111111111 1111111\n" "11111111 111111111 1111111111111111 1111111\n" "111111111 11111 111111111 1111111\n" "1111111111 1111 1111111 111111111 1111111\n" "11111111111 111111 1111111 111111111 1111111\n" "111111111111111111 11 111\n" "11111 11111111111 111111111 1111111\n" "11111 111111 1111111 111111111 1111111\n" "111111111 111111 1111111 111111111 1111111\n" "111111111 111111 11 1111 1111111\n" "111111111 111111 1111111 111 111 1111111\n" "111111111 111111 1111111 111 111 1111111\n" "111111111 111 1111 11 1111111\n" "111111111 111 111111111 1111111\n" "111111111 11 11111111 11 111111111 1111111\n" "111111111 11111 111 111111111 1111111\n" "111111111 111111 1111 111111111 1111111\n" "11111111 11111 111111 111111111 1111111\n" "11111111 1111 1111111 111111111 1111111\n" "11111111111111111 11111 11111 1111111\n" "1111111111111111111111111 11111111 111111111\n" "11111111111111111111111111111111111111111111111111\n" "11111111111111111111111111111111111111111111111111\n" "11111111111111111111111111111111111111111111111111\n" ; int main(void) { int okay = 0; int v = 64; printf("%s\n", "#define main(l11)char*l=#l11,l1=1;main(){for(;(l1=(l1<<!!(040-0[l]))+!(0[l]-061))>>7?((putchar(l1&0177))?(l1=1):0):1;l++);}"); printf("main(\n"); for(; *fmt; fmt++) { if(*fmt==' ' || *fmt=='\n') { printf("%c", *fmt); } else { printf("%c", *raw & v ? '1' : 'l'); v >>= 1; if(v == 0) { v = 64; if(*raw) { ++raw; } else { okay = 1; } } } } if(okay) { printf(")\n"); } else { fprintf(stderr, "ERROR: raw string too long, and fmt string too short!\n"); } return 0; }
下面就是运行gen_thx_code生成的C代码,它看起来很奇怪,但可以编译
#define main(l11)char*l=#l11,l1=1;main(){for(;(l1=(l1<<!!(040-0[l]))+!(0[l]-061))>>7?((putchar(l1&0177))?(l1=1):0):1;l++);} main( 1lll11l11ll1l111l111l11ll111l1lllll1lll11111ll1l1l 1l11ll1l1l11111llll111l111l11ll111l1lllll1l1ll1111 l1lll11l1ll1111lll111l 1ll111llll111l111l11ll111l1 l11ll1ll 1l11111l1l 111l1ll1l1lllll 1lll111 11ll1l1l 1l11ll1ll 1lll111l1l111lll l111l11 1l11ll111 l1lll ll1ll1l1l 11l1ll1 11llll111l 1111 111ll11 11l1lll11 l111111 1l1l1l1l11l l1l11l ll11l1l l111llll1 11l1111 l1lllll1l11lll111l 1l 111 11l1l 11l111111l1 11l11ll11 1l1l11l l1l11 l1l11l 1111111 l1l1l1lll ll1l11l l111llll1 11l111 ll1l11l l1ll1lll1 1llll11 1l1ll1l1l llll1l 11 ll11 1llll11 1l111ll1l 11ll1l l11ll11 l1l l11 11l1l1l 1lllll1l1 1ll111 l1ll1l1 l11 ll1 ll11l11 1ll1l111l 1ll 1l1l ll ll1ll11 ll11l1ll1 l1l 11ll1ll1l ll111l1 l1l1lllll 1l lll1111l 1l ll111l1l1 11llll1 11l111l11 l11ll 11l 1ll111ll1 l1l1l11 ll1l11l1l 11l1ll l11l l1l111l11 1l11ll1 11l1llll l1l11 ll1111 l1l111l11 1l11l1l ll11llll 111l 111l11l l111l1l11 ll1lll1 ll11ll1l1l1lllll1 llll1 l11ll ll111l1 111l1l11ll1l1l1ll11llll11 1l1111l1 lllll1lll 11111ll1l1l1l11lll1l111ll1l111ll1l111llll1l1l1l1l1 ll11l1lll11llll111l111l11l1l11l1lllll1111ll111l111 1111l1l1l1llll1lll1l1lllllllllllllllllllllllllllll )