Quining, tetapi dengan file Windows!


9

Tulis quine, yang ketika dijalankan, membuat dirinya sendiri di direktori saat ini, di file sumber bernama itu sendiri. Kami akan menggunakan Windows dalam hal ini, jadi nama file (dan karenanya quine) harus memiliki batasan berikut:

  • Tak satu pun dari karakter ini \ / : ? * < > |
  • Kurang dari 211 255 karakter

Keterbatasan dan asumsi

  • Kode Anda harus merupakan program penuh (Ini akan dijalankan setelah semua).

  • Tidak menyalin dari file sumber.

  • Anda dapat berasumsi bahwa tidak ada file lain dengan Quine Anda sebagai namanya (karena akan menghasilkan Quine (1)).

  • Kesalahan diizinkan (selama tidak masuk ke kode sumber

Ini adalah , kode terpendek dalam byte yang menang!

Edit

Mungkin saya tidak jelas, file dengan nama quine harus benar-benar berisi quine. Salahku.


Apa batasan pada karakter non-ASCII dalam program ini? (Pada Windows, ini mungkin sangat tergantung pada versi bahasa apa dari Windows yang diinstal; Saya lupa aturan yang tepat dan apakah mereka telah berubah dari waktu ke waktu.)

Mengapa kurang dari 211 byte? Itu semacam pembatasan sewenang-wenang ...
mbomb007

@ mbomb007 Ukuran nama file maks, saya percaya.
Addison Crump


@ mbomb007 Typo, mungkin?
Addison Crump

Jawaban:


6

Vitsy, 10 27 byte

'rddd++&"rdd8++a[v}v1-D);].

Jika :diizinkan, saya bisa mempersingkat ini menjadi 11 byte. :(

Penjelasan:

'rddd++&"rdd8++a[v}v1-D);].
'                           Capture all instructions as a string until encountering
                              ' again, looping if necessary.
 r                          Reverse the current stack (output is top-down).
  ddd++                     Push char literal ' to the stack.
       &                    Push a new stack to the stack stack.
        "                   Same as ', but " specific.
         r                  Reverse the current stack.
          dd8++             Push char literal " to the stack.
               a            Push 10 to the stack.
                [        ]  Loop forever.
                 v          Capture the top value as a variable.
                  }         Take the bottom item of the stack and put it on the top.
                   v        Dump the variable to the stack.
                    1-      Subtract 1.
                      D     Duplicate the top item.
                       );   Pop n; if n is 0, exit the loop.
               a[v v1-D);]  This is a makeshift for loop with 10 iterations.
                          . Pop the top stack as n, and the second stack as o. 
                              Write a file called "n" with the contents of "o".

Dua tumpukan akan identik di akhir. Pada beberapa versi Java, ini dapat menyebabkan FileNotFoundExceptionimplementasi yang berbeda dari FileInputStreamkelas.

Jawaban sebelumnya sebelum edit:

&'rddd++}.

Penjelasan:

&           Push a new stack to the stack stack.
 'rddd++    Modified standard quine.
        }   Move the ' to the right place.
         .  Pop the top stack as n, and the second stack as o. Write a file called
                 "n" with the contents of "o". (Quine name, no content)

Karena saya mungkin juga, inilah diagram langkah-langkah yang terjadi di dalam tumpukan (setiap tumpukan diwakili oleh []):

Initial state: [[]]

&              [[], []]
                  Push a new stack to the stack stack.

 '             [[], ["r", "d", "d", "d", "+", "+", "}", ".", "&"]]
                  This stack state occurs because ' will loop around the line
                    until finding the next '.

  r            [[], ["&", ".", "}", "+", "+", "d", "d", "d", "r"]]
                  Reverses the top (last) stack.

   ddd         [[], ["&", ".", "}", "+", "+", "d", "d", "d", "r", 13, 13, 13]
                  Push thirteen thrice.

      ++       [[], ["&", ".", "}", "+", "+", "d", "d", "d", "r", "'"]
                  Because char ' is 39 = 13 + 13 + 13.

        }      [[], [".", "}", "+", "+", "d", "d", "d", "r", "'", "&"]]
                  Takes the bottom item, then puts it on the top.

         .     []
                  Writes a file with content from the second-to-top stack and the
                    name as the concatenation of all elements in the top stack,
                    with top member priority (backwards from my representation).

Saya sebenarnya tidak yakin bagaimana ini bekerja dengan benar; perubahan kecil menyebabkan ini rusak. Misalnya, menempatkan &di berbagai lokasi lain juga harus berfungsi, tetapi menyebabkan ClassCastExceptions, IOExceptions, dan ArrayOutOfBoundsExceptions tergantung di mana Anda meletakkannya. Saya mungkin perlu melakukan beberapa perbaikan bug.


1
+1 untukPush a new stack to the stack stack.
Pavel

1
+1 dari saya jika Anda bisa mendorong tumpukan tumpukan baru ke tumpukan tumpukan, kalau tidak lupakan saja! ... Bercanda +1, saya juga tertawa.
Magic Octopus Mm

2
@carusocomputing Bagaimana jika saya katakan saya bisa dengan o? ;)
Addison Crump

Hentikan unzip ...
Magic Gurita Guci

1
Uhm ... Saya pikir file yang dihasilkan seharusnya berisi kode (mis. Isinya harus sama dengan nama file-nya)
Leo

5

Node.js, 56 52 byte

function f(){require('fs').writeFile(f+='f()',f)}f()

Ini mencetak peringatan

DeprecationWarning: Memanggil fungsi asinkron tanpa callback tidak digunakan lagi.

Jika Anda ingin semua hijau, harganya 4 byte untuk berubah writeFilemenjadi writeFileSync.


2

Lua, 96 byte.

s="s=%qs=string.format(s,s)f=io.open(s)f.write(f,s)"s=string.format(s,s)f=io.open(s)f.write(f,s)

Mengetik ini di ponsel saya, harus berfungsi, tetapi saya akan mengujinya ketika saya sampai di komputer.


12
Saya pikir setidaknya Anda harus berubah sting.formatmenjadi string.formatdua kali.
Peter Taylor

@PeterTaylor Anda tidak suka Sting, bukan?
KeyWeeUsr

5
@KeyWeeUsr, saya tidak menentangnya secara pribadi, dan sebenarnya dia membantu membiayai pendidikan saya, tapi saya pikir perpustakaan standar Lua mungkin dirancang untuk kegunaan umum oleh orang-orang yang akrab dengan API serupa daripada khusus untuk penggemar Polisi.
Peter Taylor

1

C, 134 byte

s[255];fd;char p[255]="s[255];fd;char p[255]=%c%s%c;main(){sprintf(s,p,34,p,34);creat(s,0);}";main(){sprintf(s,p,34,p,34);creat(s,0);}

Sumber di sini mengandung *sehingga sepertinya tidak diizinkan menurut aturan.
Value Ink

@ NilaiTetap Tetap. Terima kasih telah menunjukkan itu!
MD XF
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.