Self printing program




Bài đăng trên chuyên mục Lập trình vào ngày 29 tháng 7 năm 2014 bởi manhhomienbienthuy. Chỉnh sửa lần cuối lúc 13:47:48 ngày 28 tháng 7 năm 2021 (JST).

Self printing program

A quine is a non-empty computer program which takes no input and produces a copy of its own source code as its only output. The standard terms for these programs in the computability theory and computer science literature are "self-replicating programs", "self-reproducing programs", and "self-copying programs".

A quine is a fixed point of an execution environment, when the execution environment is viewed as a function. Quines are possible in any Turing complete programming language, as a direct consequence of Kleene's recursion theorem. For amusement, programmers sometimes attempt to develop the shortest possible quine in any given programming language.

The name "quine" was coined by Douglas Hofstadter, in his popular science book Gödel, Escher, Bach: An Eternal Golden Braid, in the honor of philosopher Willard Van Orman Quine (1908–2000), who made an extensive study of indirect self-reference, and in particular for the following paradox-producing expression, known as Quine's paradox:

"Yields falsehood when preceded by its quotation" yields falsehood when preceded by its quotation.

In some languages, particularly scripting languages, an empty source file is a fixed point of the language, being a valid program that produces no output. Such an empty program, submitted as "the world's smallest self reproducing program", once won the "worst abuse of the rules" prize in the International Obfuscated C Code Contest.

C

#include<stdio.h>

main()
{
char*s="#include <stdio.h>%cmain()%c&#123;%c  char *s=%c%s%c;%c  printf (s, 10, 10, 10, 34, s, 34, 10, 10, 10);%c}%c";
printf(s,10,10,10,34,s,34,10,10,10);
}

python

print open(__file__).read()

or

s = 's = %r\nprint(s%%s)'
print(s%s)

Java

public class Quine
{
  public static void main(String[] args)
  {
    char q = 34;      // Quotation mark character
    String[] l = {    // Array of source code
    "public class Quine",
    "{",
    "  public static void main(String[] args)",
    "  {",
    "    char q = 34;      // Quotation mark character",
    "    String[] l = {    // Array of source code",
    "    ",
    "    };",
    "    for(int i = 0; i < 6; i++ )          // Print opening code",
    "        System.out.println(l[i]);",
    "    for(int i = 0; i < l.length; i++)    // Print string array",
    "        System.out.println( l[6] + q + l[i] + q + ',' );",
    "    for(int i = 7; i < l.length; i++)    // Print this code",
    "        System.out.println( l[i] );",
    "  }",
    "}",
    };
    for(int i = 0; i < 6; i++)           // Print opening code
        System.out.println(l[i]);
    for(int i = 0; i < l.length; i++)    // Print string array
        System.out.println(l[6] + q + l[i] + q + ',');
    for(int i = 7; i < l.length; i++)    // Print this code
        System.out.println(l[i]);
  }
}

Ruby

eval s="print 'eval s=';p s"
#self printing #coding style #quine

Tôi xin lỗi nếu bài viết có bất kỳ typo nào. Nếu bạn nhận thấy điều gì bất thường, xin hãy cho tôi biết.

Nếu có bất điều gì muốn nói, bạn có thể liên hệ với tôi qua các mạng xã hội, tạo discussion hoặc report issue trên Github.

Welcome




manhhomienbienthuy

Bài viết liên quan




Bài viết mới




Chuyên mục




Lưu trữ theo năm




Câu nói yêu thích




There's a big difference between knowing the name of something and knowing something.

– Richard P. Feynman –

Thông tin liên hệ




Cảm ơn bạn đã quan tâm blog của tôi. Nếu có bất điều gì muốn nói, bạn có thể liên hệ với tôi qua các mạng xã hội, tạo discussion hoặc report issue trên Github.