Viết một Metaquine


19

Một metaquine là một chương trình không phải là một quine, nhưng đầu ra của nó, khi được chạy như một chương trình trong cùng một ngôn ngữ, là một quine.

Mục tiêu của thử thách này là viết một metaquine. Đây là , vì vậy, đoạn mã ngắn nhất sẽ thắng, với câu trả lời sớm nhất được sử dụng như một bộ bẻ khóa. Lưu ý rằng chỉ có các chương trình đầy đủ mới được chấp nhận, do định nghĩa của một quine.

Quy tắc cho Quines

Chỉ có quines thực sự được chấp nhận. Đó là, bạn cần in toàn bộ mã nguồn nguyên văn sang STDOUT, không có :

  • đọc mã nguồn của bạn, trực tiếp hoặc gián tiếp.
  • dựa vào môi trường REPL chỉ đơn giản là đánh giá và in mọi biểu thức bạn cung cấp cho nó.
  • dựa vào các tính năng ngôn ngữ chỉ in ra nguồn trong một số trường hợp nhất định.
  • sử dụng thông báo lỗi hoặc STDERR để viết tất cả hoặc một phần của quine. (Bạn có thể viết mọi thứ cho STDERR hoặc đưa ra các cảnh báo / lỗi không nghiêm trọng miễn là STDOUT là một câu hỏi hợp lệ và các thông báo lỗi không phải là một phần của nó.)
  • mã nguồn bao gồm hoàn toàn bằng chữ (cho dù chúng là chuỗi ký tự, chữ số, v.v.) và / hoặc NOP.

Bất kỳ đầu ra không thể ngăn chặn nào (như thông báo bản quyền, thông báo khởi động / tắt máy hoặc nguồn cấp dữ liệu theo dõi) có thể bị bỏ qua trong đầu ra vì tính hợp lệ của quine.

Thí dụ

Bỏ qua quy tắc cấm các chương trình chỉ có nghĩa đen và câu hỏi tích hợp sẵn, đây sẽ là một metaquine trong Nghiêm túc:

"Q"

Chương trình bao gồm một chuỗi ký tự đơn "Q", được in ngầm ở đầu ra. Khi đầu ra ( Q) được chạy, nó là một quine ( Qlà hàm quine tích hợp).


2
Liệu quy tắc chữ / bình luận / NOP có áp dụng cho đầu ra (tức là câu hỏi thực sự) của metaquote không? Nếu không thì Tlà một câu trả lời Pyth 1 byte dễ dàng.
Doorknob

@Doorknob Vâng, tôi sẽ làm rõ.
Mego

8
Tôi thực sự không thấy điểm khó khăn của thử thách này ở đâu. Không phải là chiến lược "in chuỗi chứa quine được biết đến ngắn nhất" được đảm bảo khá nhiều để giành chiến thắng cho mỗi ngôn ngữ?
Gây tử vong

1
@Firthize Vâng tôi đoán câu hỏi thú vị là, có thể được thực hiện với cùng số lượng hoặc ít byte hơn so với bản thân câu hỏi không.
Martin Ender

3
@Firthize Không phải là bạn cũng có thể viết một metaquine ngắn in ra một câu hỏi dài nhưng hợp lệ sao?
Rhyzomatic

Câu trả lời:


15

CJam, 6 byte

"_p"_p

Bản in

"_p"
_p

đó là câu hỏi thích hợp ngắn nhất trong CJam.

Kiểm tra nó ở đây.

Giải trình

Cả hai chương trình đều hoạt động giống hệt nhau, vì nguồn cấp dữ liệu bên trong quine thích hợp là không có và chỉ được bao gồm bởi vì nó đắt hơn khi loại bỏ nó khỏi đầu ra. Chương trình hoạt động như thế nào:

"_p"  e# Push this string.
_     e# Duplicate it.
p     e# Print a string representation of the top of the stack (i.e. the string with
      e# quotes) followed by a linefeed.
      e# The other copy is then printed automatically at the end of the program, without
      e# stringifying it.

Lưu ý bên

Các công việc tương tự trong GolfScript như

".p".p

mà in

".p"
.p

với một linefeed trailing, lần lượt là một trong những câu hỏi ngắn nhất được biết đến.


10

Pyth, 12 11 10 9 byte

Đã gõ thêm một byte nhờ vào @ Pietu1998.

jN B".[9N

Bản in này

.[9N".[9N

đó là một câu chuyện trong Pyth. Bạn có thể thử nó ở đây .


Là đầu ra một kỷ lục mới cho quine Pyth ngắn nhất? Tôi không tin rằng tôi đã từng nhìn thấy nó trước đây.
Sản xuất ETH

Tôi không thể tìm thấy nó ở bất cứ nơi nào khác. Tôi đã nghĩ ra nó để có được một metaquine.
Rhyzomatic

1
Có lẽ bạn nên đăng nó dưới dạng câu trả lời cho thử thách quine ban đầu :)
ETHproductions 13/2/2016

2
Bạn có thể giảm xuống còn 9 bằng cách sử dụng jN B".[9Nhoặc .[9N"jN B. ( jN B"jN Blà một câu hỏi thực sự khác vào lúc 9: chức năng nhận dạng hai lần và tham gia bởi ".)
PurkkaKoodari

@ Pietu1998 Cảm ơn! Tôi biết rằng phải có một cách để đưa nó lên 9. Có bất kỳ quines nào trong Pyth ngắn hơn 9 byte không?
Rhyzomatic



4

Python 2, 29 byte

_="_=%r;print _%%_";print _%_

Hóa ra quine trăn ngắn nổi tiếng dễ dàng biến thành một metaquine :)

Và, vì chúng ta không phải lo lắng về việc khớp dòng mới, metaquine thực sự ngắn hơn!


đánh bại tôi, một lần nữa :( Tôi nghĩ về một trình bao bọc, nhưng của bạn thì tốt hơn
Erik the Outgolfer

3

Japt, 15 13 byte

Q+"+Q ³s7J" ²

Kiểm tra nó trực tuyến!

Chương trình này đầu ra

"+Q ³s7J"+Q ³s7J

đó là câu hỏi ngắn nhất được biết đến trong Japt.

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

Q+"..." // Take a quotation mark plus this string.  "+Q ³s7J
²       // Repeat it twice.                         "+Q ³s7J"+Q ³s7J
        // Implicit output

Phiên bản không cạnh tranh, 11 byte

Q+"+Q ²é" ²

Tôi vừa thêm é , một lệnh "xoay". Vì thế

"+Q ²é"+Q ²é

bây giờ là một quine hợp lệ.


1

Ruby, 25 23

puts"puts <<2*2,2
"*2,2

Tạo quine Ruby cổ điển TẠI ĐÂY

puts <<2*2,2
puts <<2*2,2
2

Giải pháp cũ

_='_=%p;$><<_%%_';$><<_%_

Tạo chính nó ngoại trừ với dấu ngoặc đơn được thay thế bằng dấu ngoặc kép.



1

Cá (> <>), 17 byte

Điều này hoạt động bằng cách sử dụng quine cá cổ điển "r00g!;oooooooo|nhưng thêm một {cái mà dịch chuyển toàn bộ ngăn xếp sang bên trái để chương trình ban đầu không phải là một quine, nhưng nó là đầu ra, khi chạy, là.

"{r00g!;oooooooo|

Đầu ra:

"r00g!;oooooooo|

đó là một con cá quine!


1

Thạch , 3 byte (không cạnh tranh)

Thật không may, các nguyên tử cần thiết trẻ hơn khoảng 2 tuần so với thử thách.

Metaquine

”Ṙv

Hãy thử trực tuyến!

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

”Ṙv  Main link. No arguments.

”Ṙ   Set the left argument and the return value to the character 'Ṙ'.
  v  Dyadic eval; evaluate the return value with the left argument as argument.
     Executing the atom Ṙ on the argument 'Ṙ' prints a string representation of
     the character, i.e., the string "”Ṙ".
     Finally, v returns its unaltered argument, which is printed implicitly.

Quine

”ṘṘ

Hãy thử trực tuyến!

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

”ṘṘ  Main link. No arguments.

”Ṙ   Set the left argument and the return value to the character 'Ṙ'.
  Ṙ  Print a string representation of the character, i.e., the string "”Ṙ".
     (implicit) Print the unaltered return value.

Vì ký tự thứ hai in hai ký tự đầu tiên ( ”Ṙ), đây là định nghĩa đúng theo định nghĩa của chúng tôi.


1

Octopen-Baru, 22 byte

** Câu trả lời không cạnh tranh

愛[35211].pack歩U')

Đầu ra của Ruby

puts [35211].pack(' U')

Mà đầu ra . Đó là một câu chuyện trong Octopen-Baru!


1

7 , 2 byte, thách thức ngôn ngữ

Chương trình dài hai byte và có thể được hiểu theo nhiều cách; như một bãi chứa hex:

00000000: 4ff4                                     O.

như codepage 437:

O⌠

hoặc, dễ đọc nhất, trong bát phân (mà 7 nguyên bản sử dụng):

237723

Hãy thử trực tuyến!

Hoạt động của việc này rất đơn giản: đó là quine 7 tiêu chuẩn với phần tử ngăn xếp không được chèn giữa hai nửa, để làm cho nó khác biệt (trong ngữ cảnh này, 7tách các phần tử ngăn xếp). (Tôi cũng có thể đã chèn nó khi bắt đầu,723723 . Tôi không thể nào giải thích nó ở cuối vì 7s trailing giống như dấu khoảng trắng, và bỏ qua trong mã hóa đóng gói, do đó nó sẽ không có bất kỳ khác biệt so với các chương trình đầu ra. )

Ngẫu nhiên, chương trình này là một trong hệ thập lục phân, nhưng đó là chủ yếu chỉ trùng hợp ngẫu nhiên.


1

Dưới tải, 11 byte

(:aSS)::aSS

Khá đơn giản. Nó in ra (:aSS):aSS, đó là tiêu chuẩn Underload tiêu chuẩn.


1

Brachylog , 12 byte

"~k;?w₁"gjw₃

Hãy thử trực tuyến!

Một trong 132 biến thể metaquine có cùng độ dài trên quine tôi đã dịch từ quine của Bralylog v1 (không gian lận) của Fatalize. Tôi thực sự đã viết một chương trình (không chơi gôn và ngớ ngẩn tổng thể) để in tất cả chúng ra:

{[[";?","gj","jḍ"],"₁₃₅₇"]j∋ᵐ{ḍ≠&};"\"~~k~ww~w\"~ww~w~n"}ᶠ{lw" metaquines generated:
"ẉ&}w₁ᵐ

Hãy thử trực tuyến!

Có hai bộ phận của Quine gốc có thể được thay thế inconsequentially: ;?có thể được thay đổi để gjhoặc jḍ, và có thể được thay đổi để , hoặc . Nếu chúng ta giữ hoặc thay đổi chúng bên ngoài chuỗi ký tự theo một cách và bên trong chuỗi ký tự theo một cách khác, thì đầu ra sẽ không khớp với nguồn, bởi vì bất kỳ biến thể nào có trong chuỗi ký tự sẽ được in cả bên trong và bên ngoài chuỗi , dẫn đến một quine không phải là chương trình ban đầu chạy.

;?, gjjḍcó thể hoán đổi cho nhau vì cả ba đều ghép chuỗi ký tự bằng chữ: do cách bố trí của chương trình, biến đầu vào ?được hợp nhất với chuỗi, do đó ;?ghép chuỗi với chính nó; Bất kể bố cục, gjkết thúc chuỗi trong một danh sách mà sau đó được nối với chính nó; tương tự jḍnối chuỗi với chính nó sau đó tách nó thành một nửa.

Các chỉ số được đánh số lẻ wcó thể hoán đổi cho nhau bởi vì, mặc dù ban đầu wchỉ có thể lấy 0 hoặc 1, với 0 in đầu vào wvà 1 in phần tử đầu tiên được định dạng với phần thứ hai, kho lưu trữ chỉ mục wđã phát triển thành một thứ có chức năng bên ngoài như một bitfield: bit thấp của chỉ mục mã hóa cho dù là trực tiếp hay được định dạng, bit giữa mã hóa cho dù biến đầu ra từwkhông bị giới hạn hoặc được đặt thành đầu vào, và bit cao mã hóa cho dù việc in được thực hiện ngay lập tức hay nếu nó bị trì hoãn cho đến khi kết thúc chương trình để nó có thể bị quay lại. .


0

Befunge-93, 22 byte

"+1_@#`+39:,g0:">:#,_@

Tôi chỉ lấy quine tiêu chuẩn, đặt nó trong dấu ngoặc kép, đảo ngược nó (để nó được tải vào ngăn xếp một cách chính xác), và sau đó thêm một bản in stack ở cuối.

Có 8 ký tự được thêm vào quine bình thường, vì vậy rất có thể có một giải pháp tốt hơn.


Bạn không thể lấy quine tiêu chuẩn và thêm một dòng mới? Dòng mới sẽ biến mất ở giai đoạn phân tích cú pháp, khiến bạn chỉ còn lại tiêu chuẩn (sẽ tự in).

0

Turtlèd , 52 byte (không lọc )

1 ít hơn so với ban đầu

@##'@r,r,r-{ +.r_}r{ +.r_}"#'@r,r,r-{ +.r_}r{ +.r_}"

Hoạt động theo cùng một cách, ngoại trừ việc nó không có ký tự ở cuối, khi chạy, nó sẽ có một ký tự ở cuối, điều đó không ảnh hưởng đến đầu ra, bởi vì nó ghi # vào #. Lưu ý rằng đầu ra hơi khác so với quine tôi đã thực hiện cho thử thách quine, nhưng hoạt động tương tự: "write #, là ký tự cuối cùng của chính nó, giống như quine tôi đã thực hiện. Hãy xem phần giải thích ở đó .



0

Đẩy , 7 byte

Không cạnh tranh như ngôn ngữ hoãn thách thức.

Đây là quine tiêu chuẩn, nhưng với dòng mới bị loại bỏ. Dòng mới có nghĩa là không có gì trong Pushy, nhưng là dấu phân cách tiêu chuẩn của toán tử in, và do đó cần thiết cho một quine thực sự.

95 34_"

Hãy thử trực tuyến! Kết quả này:

95 34
_ "

Đó là câu hỏi ngắn nhất về Pushy - một lời giải thích về cách thức hoạt động của nó có thể được tìm thấy ở đây .

Ngoài ra, H5-34_"hoạt động cho cùng một số byte.


0

Bọt , 14 byte

[. .'|: ~|]: ~

Điều này in ra quine bọt thứ hai có thể được tìm thấy ở đây . Điều này thực sự ngắn hơn vì .sẽ luôn đặt một khoảng trắng giữa mỗi phần tử, nhưng thanh trong mã thông báo thứ ba cho phép tôi bỏ qua khoảng trắng trước nó.


Tôi đã xóa bit không cạnh tranh vì các ngôn ngữ mới hơn không tự động không cạnh tranh theo chính sách của trang.
Mego

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.