Làm một gần như quine


12

Tôi muốn đánh lừa một người bạn bằng cách cho anh ta một Quine rằng gần như làm việc, nhưng đã trở thành sloppier và sloppier.

Tạo một chương trình, khi chạy, sẽ xuất chương trình, nhưng tắt một ký tự. Có thể thêm, xóa một ký tự hoặc cả hai (một ký tự thay đổi). Nhưng chỉ có một nhân vật.

Điểm của bạn sẽ là (length of your program) / floor(sqrt(number of times the program almost quines))( / 0Vô cực)

number of times the program almost quineslà số lần chương trình của bạn chạy trong khi chỉ thay đổi một ký tự trong thiết bị xuất chuẩn. Chương trình của bạn có thể không chấp nhận đầu vào. Nó cũng có thể không in một chương trình mà nó đã in.

Bạn cũng không thể thêm một ký tự mà bạn đã thêm trước đó hoặc xóa một ký tự khỏi cùng một chỉ mục. Ví dụ: nếu bạn đã thêm 1trước đó và bạn thêm 1lại, đó là number of times the program almost quinesđiểm dừng. Nếu bạn xóa ký tự đầu tiên, bạn không thể xóa ký tự đầu tiên một lần nữa. Nếu bạn thay đổi ký tự thứ ba thành a 2, bạn không thể thêm 2hoặc xóa ký tự thứ ba.


một quine là gì?
Abr001am

@ Agawa001 Một quine là một chương trình tự in.

Câu trả lời:


7

CJam, 0,000884

{_,6/[{64md}6*](124+\+'�f++`"1$~"}""1$~

Ở đây, biểu thị ký tự không thể in được với mã điểm 128. Hãy thử trực tuyến.

Ý tưởng

Cách tiếp cận này nối thêm tất cả các ký tự UCS (đặc điểm kỹ thuật ban đầu) với các điểm mã giữa U + 4000000 và U + 7FFFFFFF vào chuỗi trống ban đầu theo sau khối mã.

Chúng tôi chọn UTF-8 , mã hóa từng ký tự này bằng chuỗi 6 byte như sau:

1111110u₂     10vvvvvv₂     10wwwwww₂     10xxxxxx₂     10yyyyyy₂     10zzzzzz₂

252 + u       128 + vvvvvv  128 + wwwwww  128 + xxxxxx  128 + yyyyyy  128 + zzzzzz

Do đó, chúng ta có thể mã hóa ký tự thứ n trong phạm vi này bằng cách tính 6 chữ số có nghĩa nhỏ nhất của nó trong cơ sở 64 và thêm 252 vào số có nghĩa nhất và 128 cho các chữ số còn lại.

Chấm điểm

2 ** 31 = 2,147,483,648 6 byte UTF-8 ký tự và độ dài của mã gốc là 39, vì vậy điểm số là 39 / floor(2 ** 15.5) = 39 / 46340 = 0.0008416055243849806.

Làm thế nào nó hoạt động

{                                }""    e# Push the code block and an empty string.
                                    1$~ e# Execute a copy of the code block.
 _,                                     e# Push the length of the string.
   6/                                   e# Divide by 6 to get the number of chars.
      {64md}6*                          e# Perform modular division six times.
     [        ]                         e# Collect the results in an array.
               (124+\+                  e# Add 124 to the first element.
                      '�f+              e# Add 128 to all and cast each to Char.
                          +             e# Concatenate the strings.
                           `            e# Push a string representation.
                            "1$~"       e# Push '1$~' to complete the quine.

Tôi chấp nhận điều này vì điểm số đầu tiên (thấp hơn) của bạn. Tôi sẽ cho phép nó.

6

CJam, 46 byte, thêm 65504, 65505 del, Điểm 0.127424

{`-2<_0c#)!{'#/~(_)\+\+S+]'#*}*W<"
}_~"e# 
}_~

Kiểm tra nó ở đây.

Các hình thức cơ bản là một quine CJam tổng quát tiêu chuẩn. Để "gần như bỏ cuộc", có một bình luận e#ở cuối khối của câu hỏi, nơi tôi có thể tự do thêm các ký tự mà không ảnh hưởng đến mã. Lưu ý rằng nhận xét ban đầu chứa một khoảng trắng.

Chương trình tiếp tục thêm các ký tự vào phía trước của bình luận, bắt đầu từ !và sau đó đi theo thứ tự giá trị ASCII. Mã ký tự của CJam bao quanh sau 2 16, vì vậy tại một số điểm, điều này sẽ thêm một byte null. Khi điều đó xảy ra, chương trình bắt đầu loại bỏ các byte từ cuối bình luận (sao cho vị trí của ký tự bị xóa luôn khác nhau) cho đến khi bình luận trống.


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.