Can a program output a copy of itself

前端 未结 11 1070
萌比男神i
萌比男神i 2020-12-29 23:07

I think this might be a classic question but I am not aware of an answer. Can a program output a copy of itself, and, if so, is there a short program that does this?

相关标签:
11条回答
  • 2020-12-29 23:38

    Michael Sipser’s “Introduction to the Theory of Computation” explains in one of the chapters how to construct a quine. I have recently written a Java program based on that idea and posted it at : http://bornagainprogrammer.net/2009/11/07/hello-world-from-the-tm-self/

    I'd suggest you get hold of that book and try implementing the program yourself in your favorite language. There are lot of other fun theorems in that book.

    -kiran

    0 讨论(0)
  • 2020-12-29 23:42

    Yes. Here's a C program that does it that I wrote about 20 years ago.

    http://womencht.reocities.com/Athens/8994/repeat.html

    0 讨论(0)
  • 2020-12-29 23:43

    It is possible in Java, but with some constraints.

    I have written a simple code in java which prints itself. You can use literals of C/C++ to use the same program. You can add anything you want inside this program, it will print itself completely.

    Conditions

    1. Java file should not be inside any package

    2. Folder structure should not contain any folders with spaces in its name

    3. Compilation target should be default or same folder where java file resides

      import java.io.FileInputStream;
      import java.net.URL;
      
      
      public class PrintYourself {
      
          public static void main(String[] args) {
              // TODO Auto-generated method stub
              URL location = PrintYourself.class.getProtectionDomain().getCodeSource().getLocation();
              String path=location.getFile();
              path=path.replace("/bin", "/src");
              System.out.println(path);
      
              try{
                  FileInputStream st=new FileInputStream(path+"PrintYourself.java");
                  int i=0;
                  while((i=st.read())!=-1){
                      System.out.print((char)i);
                  }
                  st.close();
              }
              catch(Exception e){
                  System.out.println(e);
              }
      
          }
      }
      
    0 讨论(0)
  • 2020-12-29 23:46

    It's called a quine, and there's a site that collects them.

    0 讨论(0)
  • 2020-12-29 23:51

    If you write a quine, be careful that the copies don't also write copies of themselves ad infinitum and end up taking over the world.

    0 讨论(0)
提交回复
热议问题