闲的蛋疼,挑战一下Quine... - swgr's Blog

闲的蛋疼,挑战一下Quine...

swgr posted @ 2011年6月03日 18:42 in other with tags quine , 2060 阅读

刚睡醒,比较闲,小玩一下...

 
以下这段代码是一个C语言程序,它的输出是一个Java语言程序的源代码,这个Java程序的输出恰好是之前那个C语言程序的代码本身...
 
main(a,b){char c[1024];a="public class Main{public static void main(String[]args){String a=%%c%%s%%c;String b=%%c%%s%%c;String c=String.format(a);System.out.printf(c,34,b,34,34,a,34);}}";b="main(a,b){char c[1024];a=%%c%%s%%c;b=%%c%%s%%c;sprintf(c,a);printf(c,34,b,34,34,a,34);}";sprintf(c,a);printf(c,34,b,34,34,a,34);}
 
语法高亮的版本:(显然加上了缩进的话就不正确了...要跑还是得用上面那段)
main(a,b)
{
    char c[1024];

    a="public class Main                                      \
      {                                                       \
          public static void main(String[]args)               \
          {                                                   \
              String a=%%c%%s%%c;                             \
              String b=%%c%%s%%c;                             \
              String c=String.format(a);                      \
              System.out.printf(c,34,b,34,34,a,34);           \
          }
      }";
    b="main(a,b)                                              \
      {                                                       \
          char c[1024];                                       \
          a=%%c%%s%%c;                                        \
          b=%%c%%s%%c;                                        \
          sprintf(c,a);                                       \
          printf(c,34,b,34,34,a,34);                          \
      }";
    sprintf(c,a);
    printf(c,34,b,34,34,a,34);
}
 
 
最后附上对偶的Java代码(就是上面这个C语言程序的输出结果:)
 
public class Main{public static void main(String[]args){String a="main(a,b){char c[1024];a=%%c%%s%%c;b=%%c%%s%%c;sprintf(c,a);printf(c,34,b,34,34,a,34);}";String b="public class Main{public static void main(String[]args){String a=%%c%%s%%c;String b=%%c%%s%%c;String c=String.format(a);System.out.printf(c,34,b,34,34,a,34);}}";String c=String.format(a);System.out.printf(c,34,b,34,34,a,34);}}
 
语法高亮的版本:
public class Main
{
    public static void main(String[]args)
    {
        String a="main(a,b)
                  {
                      char c[1024];
                      a=%%c%%s%%c;
                      b=%%c%%s%%c;
                      sprintf(c,a);
                      printf(c,34,b,34,34,a,34);
                  }";
        String b="public class Main
                  {
                      public static void main(String[]args)
                      {
                          String a=%%c%%s%%c;
                          String b=%%c%%s%%c;
                          String c=String.format(a);
                          System.out.printf(c,34,b,34,34,a,34);
                      }
                  }";
        String c=String.format(a);
        System.out.printf(c,34,b,34,34,a,34);
    }
}
 
注:两个编译器分别是gcc 3.4.5和jdk 1.6.0_23。
 
----------------------------------------------------  
 
后记:写完这段代码后,ACM_DIY群友[HIT]Larry告诉了我这么一个神一样的存在:
 
 
简介:这段ruby代码,相当牛,如作者所说,运行这段ruby,生成一段python代码,再运行python代码,生成一段perl代码,再运行perl代码,生成一段lua代码。。。这样一直下去,经过11种语言,最后。。。居然又能重新得到之前的ruby代码。。
 
这11种语言是:ruby 1.8.7-p72、Python 2.5.2、perl v5.10.0、Lua 5.0.3、OCaml 3.10.2、ghc-6.8.2、gcc 4.3.2、java “1.5.0_17″、beef 0.0.6-2、whitespace 0.3-2、unlambda 2.0.0-5。

登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter
Host by is-Programmer.com | Power by Chito 1.3.3 beta | © 2007 LinuxGem | Design by Matthew "Agent Spork" McGee