zoukankan      html  css  js  c++  java
  • 自打印算法

    自打印问题描述:

      自打印是指在程序中不读取任何额外的信息,仅使用程序代码中携带的功能和信息,将程序代码本身打印输出。

    在阅读下面的部分之前, 我强烈的建议你自己先想一下这个问题,然后试着去实现一下。

    自打印算法原理:

      一个完整的自打印程序通常至少包括两部分:“描述部分”和“执行部分”。在“描述部分”,用字符串变量来存储“执行部分”的代码。而“执行部分”的代码则打印这个字符串变量。

    实现:

    C语言版本:

      用C语言实现的一个自打印程序如下:[可以看出,该程序通过使用printf函数的特性来实现自打印]

    #include <stdio.h>
    
    char *format = "#include <stdio.h>%c%cchar *format = %c%s%c;%cvoid main(void)%c{%c%cprintf(format, 10, 34, format, 34, 10, 10, 10, 9, 10, 10);%c}%c";
    void main(void)
    {
        printf(format, 10, 10, 34, format, 34, 10, 10, 10, 9, 10, 10);
    }

      注意:format字符串中一定不能包含转义字符(像' ', ' '等),需要将他们转变为其对应的ASCII的形式。本程序用到的转义字符对应的ASCII如下:

      ' ' -- 10        '"' -- 34        ' ' -- 9

      此时,我们可以运行该程序,来验证其有效性:

    lxw 20:42:14:~/lxw0109/c++$ ./a.out
    #include <stdio.h>
    
    char *format = "#include <stdio.h>%c%cchar *format = %c%s%c;%cvoid main(void)%c{%c%cprintf(format, 10, 34, format, 34, 10, 10, 10, 9, 10, 10);%c}%c";
    void main(void)
    {
        printf(format, 10, 34, format, 34, 10, 10, 10, 9, 10, 10);
    }
    lxw 20:42:18:~/lxw0109/c++$ cat ownself.c 
    #include <stdio.h>
    
    char *format = "#include <stdio.h>%c%cchar *format = %c%s%c;%cvoid main(void)%c{%c%cprintf(format, 10, 34, format, 34, 10, 10, 10, 9, 10, 10);%c}%c";
    void main(void)
    {
        printf(format, 10, 10, 34, format, 34, 10, 10, 10, 9, 10, 10);
    }
    lxw 20:42:22:~/lxw0109/c++$ 

    shell版本:

      “----自打印算法很有趣味性,它体现了高超的微观技巧;自打印算法颠覆了‘神创造生命’的神权至上理论。----”

      至于最简短的自打印代码(空程序)以及Python实现的一个非常棒的自打印程序,我这里就不介绍了,你可以看这里

    参考文章:

    百度百科“自打印算法”:http://baike.baidu.com/link?url=zaWoEXiOkp6F0u9hFwbKyp_a4zc6vJhItm0BGSn2IUKGag8KK5SheCu3iirioVM8

    “自打印算法”:http://vicdory.com/self-replicating-algorithm.html

  • 相关阅读:
    SSM中 web.xml配置文件
    实现网站的登陆,注册,查看商品详细信息,加入购物车,注销登陆等简单功能。
    操作步骤
    mysql 查询 练习题及答案
    水仙花数!
    Spark SQL(4)-Unresolved Plan到Analyzed Plan
    Spark SQL(3) Parser到Unresolved LogicPlan
    Spark SQL(2)-InternalRow和TreeNode
    Spark SQL(1)-简述
    logstash output到kafka记录与总结( No entry found for connection 2)
  • 原文地址:https://www.cnblogs.com/lxw0109/p/ownself.html
Copyright © 2011-2022 走看看