原始公式已给出here(您也可以尝试您的程序以获得正确性)。
附加规则:
一。程序应该从标准输入读写到标准输出。
2.程序应该返回零到调用系统/程序。
三。程序应该使用gcc-o2-lm-s-fomit帧指针编译和运行。
这个挑战有一些历史:2009年9月的Polish programming contest blog会议上宣布了短期实施的要求。比赛结束后,最短的密码是81个字符长。在第二次调用之后,对更短的代码进行了调用,在一年之后,matix2267published his solution的78字节中:
main(c){read(0,&c,1)?c-41&&main(c-40&&(c%96<27||main(c),putchar(c))):exit(0);}
有谁能把它变短或证明这是不可能的?
最佳答案
下面是将代码减少到76个字符的方法:
main(c){read(0,&c,1)?c-41&&main(c-40&&putchar(c,c%96>26&&main(c))):exit(0);}
为清晰起见,请使用较长的注释版本:
int main(int c)
{
if (read(0,&c,1)) { /* read char */
if (c-41) { /* if not ')' */
if (c-40) { /* then if not '(' */
if (c%96>26) { /* then if operator (not alphabet or <LF>) */
main(c); /* recurse */
}
putchar(c); /* print */
}
main(c); /* recurse */
}
} else exit(0); /* end program */
}
关于c - 在C中将中缀表达式转换为后缀(RPN)的最短方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4621151/