Bức xạ làm mềm quine


38

Thật đơn giản: Tạo một quine thích hợp trong đó nếu bạn loại bỏ bất kỳ ký tự nào, thì nó vẫn là một quine.

Sự khác biệt giữa điều này và một quine làm cứng bức xạ là nếu chương trình của bạn AB, trong một quine được làm cứng bức xạ Asẽ tạo ra AB, nhưng ở đây, Asẽ xuất ra A.

Code golf, tất cả các quy tắc tiêu chuẩn, sơ hở tiêu chuẩn áp dụng, không gian lận.


Một chương trình trống có hợp lệ không?
Loovjo

4
@Loovjo số
Martin Ender

3
@feersum Thử thách nêu rõ "Tạo một câu hỏi trong đó ...", vì vậy ABnên xuất ra AB.
Mego

1
@Mego Tôi biết nó nói điều đó, nhưng thông số kỹ thuật không phải lúc nào cũng chính xác và nó không được chỉ ra trong các ví dụ.
frageum

4
@feersum "Make a quine" có nghĩa là tạo ra một quine. "Sự khác biệt giữa điều này và quine cứng hóa bức xạ ..." có nghĩa là sự khác biệt duy nhất là chương trình với bất kỳ một byte nào bị loại bỏ trong một quine, không phải là chương trình in nguồn của chương trình gốc. Không có sự mơ hồ ở đây.
Mego

Câu trả lời:


22

> <> (Cá), 145 107 byte

Câu trả lời này sử dụng hướng dẫn nhảy của> <> để khắc phục sự cố.

!<0078*+00~..>0[!."r43a*+8a+&{ee+00&1-:&(?.~~ol?!;4b*0.0f<>0['r3d*159*+&}7a*00&1-:&(?.~~ol?!;68a*+0.0+*a58 

Quine này thực sự có chứa hai máy phát điện quine khác nhau. Nó bắt đầu với một số logic nhảy và theo mặc định sử dụng quine trái. Nếu một ký tự được loại bỏ khỏi logic nhảy hoặc từ quine trái, chương trình sẽ nhảy sang quine phải.

Bạn có thể thử nó ở đây

Giải trình

Mã này có thể được chia thành một vài phần:

A: !<0078*+00~..>0[!. 
B:              >0[!."r43a*+8a+&{ee+00&1-:&(?.~~ol?!;4b*0.
C:                                                    .0f<
D:                                                        >0['r3d*159*+&}7a*00&1-:&(?.~~ol?!;68a*+0.
E:                                                                                                 .0+*a58 

Giải thích về các phần khác nhau:

  • A: Nhảy sang bên phải của C. Nếu bất kỳ ký tự nào bị xóa khỏi A, thì nó nhảy sang bên trái của D hoặc bên phải của E, kích hoạt quine thứ hai. Nếu bất kỳ ký tự nào bị xóa khỏi B hoặc C, mã được dịch chuyển 1 ký tự sang trái, khiến mã này nhảy sang trái của D.
  • C: Mã này nhảy sang trái của B.
  • B: Câu hỏi số 1
  • D: Quine # 2
  • E: Nhảy sang trái D

Giải thích về quine (với ví dụ # 1):

Khi con trỏ lệnh đạt đến một trong các quine, bạn chắc chắn rằng quine đó hoàn toàn nguyên vẹn.

>0[!.                                       //Fix the instruction pointer's direction and empty the stack (The '!.' is a leftover from codepart A)
     "r43a*+                                //Start reading all of the code and add the '"' character to the stack
            8a+&                            //Because the quine started reading at the 19th character instead of the first, the stack has to move 18 characters. 
                                            //This part saves the number 18 to the register.
                {ee+00&1-:&(?.              //Move the stack one to the left, decrease the stack by 1. If the stack is not empty yet, jump back to the start of this section.
                              ~~              //Clean the temporary variables from the stack. It should now contain the whole quine.
                                ol?!;4b*0.  //Print the first character from the stack. As long as the stack isn't empty, jump back to the start of this section.

Xin giải thích.
Máy

Lặp lại ở trên.
Máy

1
Điều này đã đủ rõ ràng chưa?
Thijs ter Haar

36

Chiều dài , 4,54 × 10 761 byte

Nó có số lượng ký tự null:

453997365974271498471447945720930600149036031871190716908688344432973027776681259141680552038829875159204621651993092104775733418288411812715164994750890484868305218411129600012389568016974351721147925344946382782884546247102886167837964612372737300786173159265347137401863281368021545169383664534228503236761742285358985343373496184959796553930661837467682191561275123057706776367104142995491262443697167483190110516522677811931124842961701222425076750211774387637740969301686178545299089832300154448308384461700726890067468872402133010536518468336342175124002115991866466700174974019423711837589532744970385003356612639263433822126850314801275940879069069974437167102618471264140597777702065896715558989678487253830854848740247786166790545462769498303055791292

Nhìn cách tiêu chí trong thử thách này mâu thuẫn với định nghĩa của một "câu hỏi thích hợp", nghiêm túc, tôi nghĩ rằng một biến thể Unary sẽ chiến thắng.

Mã Brainfuck mở rộng:

>>+++>++++++++>+++>+++>+>+>+>+>+>+>+>+++>+>+>+>+>+>+>+>+>+++>+>+>+>+>+>+>+>+>++++++++>++++>++++++++>++++>+++++++>++>+++>+>+++>++>+++>+++>+>+>+>+>+>+>+>+>++++>++++>+++++++>+>++++>++++++++>++>+++++++>+++>++++++++>++>+++++++>+++>++++++++>++>+++++++>+++>++++++++>++>+++++++>+++>+++++>++++++++>++++>+++++++>+++++++>+>+>+++>+>+>+>++++++++>+++>+++++++>+>+++>+>+++>+>+++>+>++++++++>++++>++++++++>++++>++++++++>++++>++++>+>+++>+++>++>+++++++>+++++++>+>+>+>++++++++>+++>+>++++++++>++++>+>+++>++>+++++++>++>+++++++>++++>++++>++++++++>+++>++++++++>+++>+++>+>++++>++++>++>+++++++>+++>+++>++++++++>++++>+>+++>++>+++++++>++++>++++>+++++++>+++>+++>+++>+++>++++++++>++++>++++>+>+++>+>+++>++>+++++++>+++++++
[
    [->+>+<<]
    >>>>[<<[->+<]>>[-<<+>>]>]
    <<[-[->+<]+>]+++
    [[->>+<<]<]<
]
+>+>+>+
[>]+++>++
[
    [<].
    >[-]>[-]>[-]>[-]
    <+[<<++++++++>>->+>-[<]<]
    ++++++++>++++++++>+++++++>>
]
.

Nếu một ký tự bị xóa khỏi chương trình Lenguage, ký tự cuối cùng trở thành một <, điều này khiến chương trình in chính xác một ký tự ít hơn.


1
Làm thế nào bạn quản lý để tìm thấy điểm cố định? (Hoặc cách khác, mã Brainfuck hoạt động như thế nào?)
Martin Ender

1
@ MartinBüttner Các bản sao vòng lặp lớn đầu tiên và mã hóa dữ liệu dưới dạng "> +++ ..." (và đảo ngược nó). Vòng lặp lớn khác in dữ liệu dưới dạng một số nguyên trong unary. Nó không phức tạp lắm nhưng chỉ dài vì nó là Brainfuck.
jimmy23013

Ồ đúng rồi, vậy nó giống như một câu đố Brainfuck đơn giản, nhưng với chức năng giải mã khác nhau?
Martin Ender

@ MartinBüttner Một chút nào đó. Nhưng một nửa chương trình là "chức năng giải mã".
jimmy23013

Có vẻ như bạn có thể sử dụng một kỹ thuật tương tự để xây dựng các câu trả lời về điểm số tùy ý cho codegolf.stackexchange.com/q/57257/8478 (mặc dù cách hoạt động chính xác sẽ phụ thuộc vào câu trả lời cho nhận xét mới nhất của tôi).
Martin Ender
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.