Quining, nhưng với các tập tin Windows!


9

Viết một quine, khi chạy, sẽ tự tạo trong thư mục hiện tại, trong một tệp nguồn có tên chính nó. Chúng tôi sẽ sử dụng Windows trong việc này, vì vậy tên tệp (và do đó là quine) phải có các giới hạn sau:

  • Không ai trong số những nhân vật này \ / : ? * < > |
  • Ít hơn 211 255 ký tự

Hạn chế và giả định

  • Mã của bạn phải là một chương trình đầy đủ (Rốt cuộc nó sẽ được chạy).

  • Không sao chép từ tập tin nguồn.

  • Bạn có thể giả sử rằng không có tệp nào khác với tên Quine của bạn như tên của nó (vì nó sẽ tạo ra Quine (1)).

  • Lỗi được cho phép (miễn là chúng không vào mã nguồn

Đây là , mã ngắn nhất tính bằng byte thắng!

Biên tập

Có lẽ tôi đã không rõ ràng, tập tin có tên của quine phải thực sự chứa quine. Lỗi của tôi.


Những hạn chế đối với các ký tự không phải ASCII trong chương trình là gì? (Trên Windows, điều này hoàn toàn có thể phụ thuộc vào phiên bản ngôn ngữ của Windows được cài đặt; tôi quên các quy tắc chính xác và liệu chúng có thay đổi theo thời gian hay không.)

Tại sao ít hơn 211 byte? Đó là một hạn chế tùy tiện ...
mbomb007

@ mbomb007 Kích thước tên tệp tối đa, tôi tin.
Addison Crump

1
@VoteToC Đóng Đó là 255. stackoverflow.com/a/265782/2415524
mbomb007

@ mbomb007 Typo, có lẽ?
Addison Crump

Câu trả lời:


6

Vitsy, 10 27 byte

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

Nếu :được cho phép, tôi có thể rút ngắn điều này xuống còn 11 byte. :

Giải trình:

'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".

Hai ngăn xếp sẽ giống hệt nhau ở cuối. Trên một số phiên bản Java, điều này có thể FileNotFoundExceptiongây ra do các triển khai khác nhau của FileInputStreamlớp.

Câu trả lời trước khi chỉnh sửa:

&'rddd++}.

Giải trình:

&           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)

Bởi vì tôi cũng có thể, đây là sơ đồ các bước xảy ra trong ngăn xếp (mỗi ngăn xếp được thể hiện bởi []):

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).

Tôi thực sự không chắc làm thế nào điều này hoạt động đúng; thay đổi phút khiến điều này bị phá vỡ. Ví dụ: đặt &các vị trí khác nhau cũng hoạt động tốt, nhưng nó gây ra ClassCastExceptions, IOExceptions và ArrayOutOfBoundsExceptions tùy thuộc vào nơi bạn đặt nó. Tôi có thể cần phải làm một số sửa lỗi.


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

1
+1 từ tôi nếu bạn có thể đẩy ngăn xếp ngăn xếp mới sang ngăn xếp ngăn xếp ngăn xếp, nếu không hãy quên nó đi! ... Đùa 1, tôi cũng cười.
Bạch tuộc ma thuật Urn

2
@carusocomputing Nếu tôi nói với bạn tôi có thể với othì sao? ;)
Addison Crump

Thở dài giải nén ...
kỳ diệu Octopus Urn

1
Uhm ... Tôi nghĩ rằng tệp được tạo được cho là chứa mã (tức là nội dung của nó phải bằng tên tệp của nó)
Leo

5

Node.js, 56 52 byte

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

Điều này in cảnh báo

DeprecationWarning: Gọi một hàm không đồng bộ mà không gọi lại bị phản đối.

Nếu bạn muốn tất cả-màu xanh lá cây, nó có giá 4 byte để thay đổi writeFileđể 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)

Nhập cái này vào điện thoại của tôi, sẽ hoạt động, nhưng tôi sẽ kiểm tra nó khi tôi đến máy tính.


12
Tôi nghĩ ít nhất bạn sẽ cần phải thay đổi sting.formatthành string.formathai lần.
Peter Taylor

@PeterTaylor bạn không thích Sting, phải không?
KeyWeeUsr

5
@KeyWeeUsr, cá nhân tôi không có gì chống lại anh ấy, và thực tế anh ấy đã giúp trả tiền cho sự nuôi dưỡng của tôi, nhưng tôi nghĩ rằng thư viện tiêu chuẩn Lua có lẽ được thiết kế cho những người quen thuộc với API tương tự thay vì dành riêng cho người hâm mộ của Cảnh sát.
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);}

Nguồn ở đây chứa *vì vậy nó không giống như được cho phép theo quy tắc.
Mực giá trị

@ValueInk Đã sửa. Cảm ơn đã chỉ ra rằng!
MD XF
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.