原始公式已给出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/

10-13 08:20