.: 比赛贴 .::. 据说是贝尔实验室的应聘题目 :.

lexchou 2006-04-03 08:40:14
写出程序打印自身源码。
前提要求:不准使用带反射功能的语言,或者脚本语言,其他语言都可以。也不准打开源代码文件后输出源代码……

详细解释一下
代码A编译后成程序B,程序B运行的结果就是代码A,而且还能继续通过编译输出代码本身。

很久以前看过别人用C写出来的,现在搞不见了,看看各位人才们能怎么写。
...全文
651 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
healer_kx 2006-04-06
  • 打赏
  • 举报
回复
UP
lonelyforest 2006-04-05
  • 打赏
  • 举报
回复
这个是国际编程竞赛的, www.ioccc.org 上面很多。
这里有一个
#include<stdio.h>
main()
{
char *c="#include<stdio.h>%cmain()%c{%cchar *c=%c%s%c;%cprintf(c,10,10,10,34,c,34,10,10);%c}";
printf(c,10,10,10,34,c,34,10,10);
}
kitty74jh 2006-04-05
  • 打赏
  • 举报
回复
是在这里的,是《程序员》06年第5期智慧擂台的题目,现在正在火热进行中。欢迎大家参与 http://community.csdn.net/Expert/topic/4654/4654528.xml
吃狼的豆腐 2006-04-04
  • 打赏
  • 举报
回复
以前的帖子有过,好象还不是很早,去找找吧
猛禽 2006-04-04
  • 打赏
  • 举报
回复
强啊
iamcaicainiao 2006-04-04
  • 打赏
  • 举报
回复
char*f="char*f=%c%s%c;%cmain(){printf(f,34,f,34,10,10);}%c";
main(){printf(f,34,f,34,10,10);}
LiuDian 2006-04-03
  • 打赏
  • 举报
回复
可以用debug信息不? 如果这个都不可以 那这样的程序是写不出来的。最多就是生成和原来代码等价的代码。 因为对于任何编译性的语言来说最后生成的机器语言不可能包含原代码中的所有信息。最起码换行符信息是无论如何也也不可能还原。
herryhuang 2006-04-03
  • 打赏
  • 举报
回复
呵呵,没听说过贝尔实验室有这样的题目,绝对是假的。
不过,这样的程序我倒是见过一些:

char*f="char*f=%c%s%c;main()
{printf(f,34,f,34,10);}%c";
main(){printf(f,34,f,34,10);}

另一个:

void a(char*b,int d,int e,int f){char*c=b;for(;*c;c++){if(!d&*c==68)putchar(
92),putchar('\n');if(!d&*c==92)putchar(92);if(*c==d)a(b,0,0,0);else putchar(
*c==e?34:*c==f?'\n':*c);}}main(){char p[]=/*
andelion '94 */
"void a(char*b,int d,int e,int f){char*c=b;for(;*c;c++){if(!d&*c==68)putchar(\
D92),putchar('\\n');if(!d&*c==92)putchar(92);if(*c==d)a(b,0,0,0);else putchar(\
D*c==e?34:*c==f?'\\n':*c);}}main(){char p[]=/* \
Dandelion '94 */\
DCAC;a(p,65,67,68);}";a(p,65,67,68);}

这个比较长:

#include "stdio.h"

char *stack[2000], buf[2000], chrtab[128][2], *defns[128];

char dna[ ]="stdio.h_X#include X\"__\n\
char 4_Cstack_Sbuf_Bchrtab[4]_Hdefns[4]_V5[4]_]5, 4_,4;_;*4_*2000_K128_L\n\

_/SK]*BK],LH2]LV*,,C;__5==4_%5=4_=dna_DD ]@\"=C;__54_.copy(4)_K\n\
_/strlen(4)_Astrcpy(54,)_E4++_^5+4_+200_X'4'_'5*^4=_Z5;/4._!for (7;6;5)4_F\n\
_/if (5) 4_G{/4/}/_}return(4);/_R(char`*)malloc(4)_M\\\\_$`\"'_Y\n\
_/5 || 4_| c*t^*c^*=Yc*%$'c*%|t$'ZG\\n.'c*%ttt\\n.\\.\"EA+=G;!}F_W\n\
_/cK*Cc*Ct*q*,CqtXcA+M==!tYZ!W!tYZ.t0Z!qR!}!__(4)_~\n\
_/construct(4)_Iarg_J4**_$int 4_Nswitch(5)4}_Odefault: 4_P5-4_-p1-~*_Q\n\
_/break_Ucase 5: 4;/U_:5<4_<5>4_>5 && 4_&4*8'<4*3'>&_?else 4_XqB=Jp=!_W\n\
_/Wtc*V=t*t^t?kpt*-3'+=~J<Jk=Gqqqk*EA+=!;}Gqt*ZX;.}F!q*0=.pJ=!pBA1+MZBE!;_W\n\
_/c*``'p*^ ^c.*H=:YQQK=:!`@'pDZ:!c?p*^c*H=U!;}GP!W.O_W\n\
_/n0=kS=,kp<nnk*^A+=4F_U Uqn1+M=!qn+k*EU!qR!_O\n\
_/cI*Cc*CJ$p$,k$,t*,q*,CnN!pS=c*c^W}F!O.}!__\n\
_/nH5]4=_Ostrncpy(654,,)_Eputs(4)_P923+_T4t.*T%_T\n\
_/xt=D=t*t^ Tqtx-1+M=qxtx-E!qx-t+~*0=! ^TqIPG!t*VqI=X!xt1+=!;}G}F_Q\n\
_/main()/t*x*,q*,CnN!n0=nL<n^0nO10O!nVnH=!;}F!Q.}__";


char *copy(c)
char *c;
{

char *t, *q;
q=t=(char*)malloc(200+strlen(c));
*t++='"';
for ( ;*c;*t++=*c++){
if ('"'==*c || '\\'==*c) *t++='\\';
if ('\n'==*c) t=t+strlen(strcpy(t, "\\n\\")); }
*t++='"';
*t++=0;
return(q);

}

char *construct(c)
char *c;
{

char **arg, **p, **k, *t, *q;
int n;
for (p=stack;*c;c++){
switch(*c){
case '`': *p++=chrtab[* ++c];
break;
case '"': *(p-1)=copy(*(p-1));
break;
case '@': *p++=dna;
break;
default: if (*c<'8' && *c>'3') {
*p++=chrtab[*c];
break;
}
q=buf;
arg=p;
for (t=defns[*c];*t;t++){
if (*t<'8' && *t>'3') {
if ((k=p-*t+'3')<arg) arg=k;
q=q+strlen(strcpy(q, *k));
}
else *q++=*t;
}
*q=0;
p=arg;
strcpy(*p++=(char*)malloc(strlen(buf)+1), buf); }

}
for (n=0, k=stack;k<p;n=n+strlen(*k++)) ; q=(char*)malloc(n+1);
for (n=0, k=stack;k<p;n=n+strlen(*k++))strcpy(q+n, *k); return(q);

}

main()
{

char *t, *x, *q;
int n;

for (n=0;n<128;n++){
chrtab[n][0]=n;
chrtab[n][1]=0;


defns[n]=chrtab[n];
}
for (x=t=dna;*t;t++){
if (* t==92+3) {
q=(char*)malloc(t-x+1);
strncpy(q, x, t-x);
*(q-x+t)=0;
if (* ++t==92+3) puts(construct(q));
else defns[*t]=construct(q);
x=t+1;
}

}

}
vcmute 2006-04-03
  • 打赏
  • 举报
回复
以讹传讹
pankun 2006-04-03
  • 打赏
  • 举报
回复
这个猥琐的ID就是D版的恶鱼杀手啦
firetoucher 2006-04-03
  • 打赏
  • 举报
回复
友情鼎立雷霆华丽关注并up~~~
随便问一下这个猥琐的ID到底是谁?
^^

FT
--
Anything one man can imagine, other men can make real.
pankun 2006-04-03
  • 打赏
  • 举报
回复
指今
pankun 2006-04-03
  • 打赏
  • 举报
回复
自已的编译器算不...添加个编译指命就行...
cunsh 2006-04-03
  • 打赏
  • 举报
回复
好像前几天这里贴过?

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧