Nghịch đảo-trích dẫn-quine


29

Triển vọng của thử thách này là:

  • Nếu chương trình của bạn chạy bình thường, tất cả các mã trong dấu giọng nói ( "- dấu ngoặc kép) sẽ được in.
  • Nếu chương trình của bạn được gói trong dấu ngoặc kép (lần lượt đảo ngược dấu giọng nói), mã thường không được in trong dấu ngoặc kép sẽ được in.

Ví dụ:

Giả sử bạn có mã sau đây:

fancyStuff("myCode"); "I like".isGreat();

Nếu tôi chạy nó, tôi sẽ mong đợi một đầu ra:

myCode
I like

Tuy nhiên, nếu tôi gói nó trong dấu ngoặc kép, tôi sẽ nhận được:

"fancyStuff("myCode"); "I like".isGreat();"

Khi mã này được chạy, đầu ra dự kiến ​​sẽ là:

fancyStuff(
); 
.isGreat();

Rõ ràng, ví dụ trên không phải là một phản ứng chức năng trong bất kỳ ngôn ngữ nào. Công việc của bạn là viết mã thực hiện theo cách này.

Quy tắc

  • Tiêu chuẩn áp dụng.
  • Các giá trị được in, ở cả hai dạng được trích dẫn và không được trích dẫn, phải không trống hoặc chỉ bao gồm khoảng trắng. Điều này cũng có nghĩa là tất cả các chương trình phải bao gồm ít nhất một bộ trích dẫn.
  • Tuy nhiên, khoảng trắng dấu vết / preeeding được cho phép.
  • Không nhìn vào mã của riêng bạn, tên tệp yêu cầu, v.v.
  • Báo giá chưa từng có là không được phép
  • Nếu có nhiều chuỗi, chúng có thể được in dưới dạng dòng mới (như trong ví dụ) hoặc theo một số cách dễ đọc khác của con người - không có mảng hoặc đối tượng
  • Đây là , vì vậy câu trả lời ngắn nhất bằng byte thắng.

Các trích dẫn chưa từng được cho phép, và nếu vậy, chúng nên được xử lý như thế nào?
âm bảy

3
@GezaKerecsenyi Vì vậy, là một dấu tách cần thiết, hoặc chúng ta có thể đơn giản nối các chuỗi?
Erik the Outgolfer

9
Làm thế nào là một mảng không phải là một định dạng có thể đọc được của con người?
Thuật sĩ lúa mì

4
Các chuỗi phải là đầu ra theo cùng thứ tự chúng xuất hiện trong mã của chúng tôi?
Xù xì

1
Tôi nghĩ rằng điều này sẽ phức tạp hơn một chút nếu bạn phải in bất cứ điều gì không có trong trích dẫn
Jo King

Câu trả lời:


28

Python 2 , 20 byte

print";print'print'"

-7 byte nhờ tsh

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


Câu trả lời cũ:

Python 2 , 27 byte

'';print";print 2*"'';print

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

Sự suy nghĩ đằng sau câu trả lời này:

Bắt đầu với một bản in đơn giản, bởi vì chúng ta cần in một cái gì đó .

print"a"

Chúng ta cũng cần in một cái gì đó trong trường hợp ngược, tức là. có một bản in bên trong dấu ngoặc kép.

print"print"

Trường hợp không đảo ngược là khá tốt ở điểm này. Hãy tập trung vào trường hợp đảo ngược. Bây giờ chúng ta bắt đầu với chuỗi print, không thể theo sau bằng câu lệnh in. Hãy sửa lỗi này bằng dấu chấm phẩy.

print";print"

Đồ tốt. Ngoại trừ, mã đảo ngược không thực sự in bất cứ điều gì. Chúng ta sẽ cần in phần printđầu, vì nó kết thúc bằng dấu ngoặc kép, nhưng cũng in bất cứ thứ gì xuất hiện sau trích dẫn thứ hai, vì nó cũng kết thúc bằng dấu ngoặc kép. Cách rõ ràng xung quanh điều này là nối printvà nhân chuỗi cuối cùng với 2.

print";print 2*"print

Bây giờ mã đảo ngược hoạt động tốt, mặc dù chúng ta phải cảnh giác với thực tế là phần trước trích dẫn đầu tiên và phần sau trích dẫn thứ hai cần phải được giữ nguyên trong suốt những thay đổi trong tương lai. Đối với mã không đảo ngược, nó đưa ra một lỗi cú pháp - một lần nữa, chúng ta cần đưa ra một dấu chấm phẩy cho các biểu thức riêng biệt.

;print";print 2*";print

Python không thực sự thích giao diện của dấu chấm phẩy đơn độc đó, vì vậy chúng ta phải thỏa mãn cơn đói của con rắn với hai biểu hiện không giống nhau, được chèn trước dấu chấm phẩy đầu tiên và dấu chấm phẩy cuối cùng. Hầu hết các biểu thức sẽ hoạt động tốt trong trường hợp đầu tiên, nhưng trong trường hợp thứ hai, nó phải tuân theo print";print 2*"mã không đảo ngược mà không phá vỡ bất cứ điều gì. Chúng ta có thể sử dụng '', đơn giản là được nối với chuỗi trước.

'';print";print 2*"'';print

5
print(";print('print()');")cũng là 27 byte và cũng là Python 3.
tsh

2
@tsh Mã này tiết lộ một giải pháp Python 2 20 byte đáng lẽ phải rõ ràng trong nhận thức muộn, rất hay!
âm bảy

19

CSS, 66 byte

body:after{content:"{}body:after{content:'body:after{content:}'}"}

"body:after{content:"{}body:after{content:'body:after{content:}'}"}"

Không có nhiều câu hỏi có thể được giải quyết bằng CSS ...


Có vẻ như body:aftercũng hoạt động trên một số thực hiện?
Shieru Asakoto

@ShieruAsakoto Bạn nói đúng. :aftercó sẵn trong hầu hết các trình duyệt vì lý do tương thích ngược
tsh

@Shaggy Nhưng thật khó để xác định cách "bọc mã nguồn của bạn bằng dấu ngoặc kép" hoạt động khi cả HTML và CSS được cung cấp.
tsh

@tsh Không sao - Tôi không chỉ định về nhiều tệp trong quy tắc, vì tôi không mong đợi câu trả lời độc đáo như vậy!
Geza Kerecsenyi

10

HQ9 + [xem ghi chú bên dưới] , 1016 byte

"Chào thế giới""""""""""""""""""""""""""""""""""""""""""""""" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" " "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" """" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" " "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" " "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" """" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" " "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" " "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" """" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" " "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" " "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" """" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" " "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" " "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" """" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" " "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" " "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" """" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" " "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" " """"""""""""""""""""""""""""""""""""""Chào thế giới"" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" " "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" " """""""""""""""""""""""""""""""""""Chào thế giới"" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" " "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" " """""""""""""""""""""""""""""""""""Chào thế giới"" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" " "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" " """"""""""""""""""""""""""""Chào thế giới"" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" " "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" " """"""""""""""""""""""""""""Chào thế giới"" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" " "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" " """""""""""""""Chào thế giới"" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" " "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" " """""""""""""""Chào thế giới"" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" " """"""""""""""""""""""""""""""""""""""Chào thế giới"" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" " """"""""""""""""""""""""""""""""""""""Chào thế giới"""""""""""""""""""""""""""""""""""Chào thế giới"""""""""""""""""""""""""""""""""""Chào thế giới

Sử dụng triển khai trên https://esolangs.org/w/index.php?title=HQ9%2B&oldid=59995 và biên dịch trình thông dịch với MinGW GCC 5.3.0 trên Windows. Tôi không chắc nó có hoạt động với phiên bản trình biên dịch khác hay không, vì hành vi không xác định của C là bắt buộc để chấm dứt chương trình. Bộ đệm dài 1000 byte. Và mã nguồn lớn hơn 1000 byte thực hiện thủ thuật. Tôi không chắc những điều này đã xảy ra như thế nào.


7
Có lẽ đây là câu trả lời HQ9 + dài nhất trên trang web này. (?)
tsh

1
"Một hành vi không xác định của C được yêu cầu để chấm dứt chương trình" Hành vi không xác địnhkhông xác định : nó có thể làm bất cứ điều gì.
Solomon Ucko

Theo trang 4 của tiêu chuẩn C18 : "Hành vi không xác định có thể bao gồm từ việc bỏ qua hoàn toàn tình huống với kết quả không thể đoán trước, để hành xử trong khi dịch hoặc thực hiện chương trình theo cách thức được ghi lại trong môi trường (có hoặc không có thông báo chẩn đoán ), để chấm dứt dịch thuật hoặc thực thi (với việc phát hành thông báo chẩn đoán). "
Solomon Ucko

@SolomonUcko Nhưng chúng tôi xác định một ngôn ngữ bằng trình biên dịch / trình thông dịch của nó trên trang web này. Và câu trả lời là tốt miễn là ít nhất một trình biên dịch / trình thông dịch có thể tạo ra kết quả chính xác.
tsh

9

05AB1E , 4 byte

"A"§

Đầu ra được nối mà không có dải phân cách.

Dùng thử trực tuyến hoặc thử trực tuyến với các trích dẫn xung quanh .

Giải trình:

        # Program without surrounding quotes will output string "A"
"A"     # Push "A" to the stack
   §    # Cast it to a string
        # (output the top of the stack implicitly as result)

        # Program with surrounding quotes will output string "§"
""      # Push an empty string to the stack
  A     # Push the alphabet to the stack: "abcdefghijklmnopqrstuvwxyz"
   "§"  # Push "§" to the stack
        # (output the top of the stack implicitly as result)

Thật không may, điều này vi phạm quy tắc # 2. Mặc dù có một số trích dẫn trống trong mã của bạn là tốt, nhưng phải có ít nhất một dấu ngoặc không trống ở cả hai dạng được bao quanh và không có nền tảng.
Geza Kerecsenyi

@GezaKerecsenyi Rất tiếc, đọc qua phần " trong cả hai hình thức trích dẫn và không trích dẫn ". Nên sửa ngay.
Kevin Cruijssen

6

Japt , 4 byte

"P"s

Hãy thử nó không trích dẫn hoặc trích dẫn

Plà biến Japt cho chuỗi rỗng và sphương thức cắt một chuỗi - không có bất kỳ đối số nào, nó không làm gì cả.


Hoặc, bao giờ hơi ít tầm thường:

"+"u

Hãy thử nó không được trích dẫn hoặc trích dẫn

Cái đầu tiên viết hoa +và cái thứ hai nối uvào một chuỗi trống.


3
Lưu ý rằng 4 là điểm tối thiểu cho câu hỏi này, vì bất kỳ ít vi phạm các hạn chế.
Jo King

5

C # (Trình biên dịch tương tác Visual C #) , 113 112 107 70 64 byte

Write(".f();static void f(this string s){Write(s+')'+';');}//");

Đã lưu 5 byte nhờ @negative seven

Không trích dẫntrích dẫn

Sau một thời gian, tôi nhận ra rằng giải pháp của mình quá phức tạp. Chương trình mới nhất được hiển thị ở đây chỉ đơn giản là ẩn phần còn lại của chương trình trong một bình luận để tránh lỗi khi được trích dẫn.

Khi được gói trong dấu ngoặc kép, Write(được truyền vào một phương thức mở rộng, nó sẽ in nó cùng với );.


Split()-> Trim()var a->_
âm bảy

1
@negativeeven Cảm ơn, tôi sẽ không bao giờ nghĩ đến việc sử dụng một loại bỏ!
Hiện thân của sự thiếu hiểu biết

1
@negativeeven Trên thực tế, giải pháp của tôi thậm chí không cần quá phức tạp, hãy xem bản chỉnh sửa mới nhất của tôi
Hiện thân của sự thiếu hiểu biết

64 byte sử dụng phương thức mở rộng. Khá ngạc nhiên điều này làm việc rất tốt!
âm bảy

1
@negativeeven Cảm ơn! Và bạn đã cho tôi một ý tưởng cho phần hai của thử thách: Tôi đã chụp bên ngoài trong một biến và sau đó sử dụng RemoveInserttrên đó, bây giờ tôi chỉ có thể sử dụng một phương thức mở rộng!
Hiện thân của sự thiếu hiểu biết


4

Foo , 4 byte

"P"s

Hãy thử trực tuyến! Cũng hoạt động trong Japt.

5 byte (UTF-8)

"A"§

Hãy thử trực tuyến! Cũng hoạt động trong 05AB1E.

9 byte

"!""$;"$;

Hãy thử trực tuyến! Cũng hoạt động trong Runic Enchantments.

11 byte

say ".say~"

Hãy thử trực tuyến! Cũng hoạt động trong Perl 6.

20 byte

print";print'print'"

Hãy thử trực tuyến! Cũng hoạt động trong Python 2.

69 byte

body::after{content:"{}body::after{content:'body::after{content:}'}"}

Hãy thử trực tuyến! Cũng hoạt động trong CSS.

Hmm ... Foo là một ngôn ngữ có khả năng thích ứng cao.


" Hmm ... Foo là một ngôn ngữ có khả năng thích ứng cao. " Đối với bất kỳ ai không biết Foo: mọi thứ trong dấu ngoặc kép đều là đầu ra và mọi thứ khác (ngoại trừ một vài ký tự dựng sẵn khác) đều không có. " Ngôn ngữ hoàn hảo cho công việc " là một cách nói nhỏ ở đây. ;)
Kevin Cruijssen

2
Vì vậy, về cơ bản, chỉ cần gạt bỏ mọi giải pháp khác cho thử thách này?!
Shaggy

@Shaggy Ngôn ngữ là Foo. Hầu hết mọi thứ với ít nhất một cặp trích dẫn và cả hai đều xuất hiện các tác phẩm không trống trong Foo trong thử thách này. Vì vậy, "a"b 1"2"cũng hoạt động trong Foo. Câu trả lời duy nhất trong thử thách này không phải là một polyglot Foo cho đến nay là trong HQ9 +, bởi vì trình thông dịch Foo cũng có vấn đề tràn.
jimmy23013

4

> <> , 18 9 byte

"|o<"r>o|

-9 byte nhờ Jo King

Hãy thử trực tuyến! ( trích dẫn )

Giải trình

"|o<"r>o|
"|o<"     Pushes the quoted characters onto the stack
     r    Reverses the stack
      >o| Outputs all characters on stack & errors
""|o<"r>o|"
""          No-op
  |         Reverses the IP direction
     "r>o|" Pushes the quoted characters onto the stack (backwards)
  |o<       Outputs all characters on stack & errors

5
Chào mừng bạn đến với Code Golf!
Stephen

@Stephen Cảm ơn!
tjjfvi


2

Bùa mê , 9 byte

"!""$;"$;

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

Từ Kevin Cruijssen, người chủ yếu sửa chữa nỗ lực đầu tiên của tôi bằng cách sử dụng những gì tôi đã làm trong lần thứ hai.

Đi xuống "nấm không bao giờ có trích dẫn chưa từng có" bẻ cong quy tắc "có một cái gì đó về điều này không nên ổn", được ám chỉ trong nhận xét của riêng tôi:

7 byte

0".""$;

Hãy thử trực tuyến! "0".""$;"

Trong các trường hợp thông thường, chương trình này thực thi như 0".""$;0".""$;đẩy một số nguyên 0, sau đó chuỗi ., nối $;0, NOP, nối chuỗi rỗng, in top-of-stack (chuỗi .$;0) và kết thúc. Việc gói nó trong dấu ngoặc kép sẽ tạo ra "0".""$;"một chuỗi- 0, NOP, nối chuỗi rỗng, in đỉnh ngăn xếp và chấm dứt (hiển thị số nguyên chưa được in trước đó 0ở dạng chuỗi). Cái cuối cùng "không được thực hiện (và dù sao cũng không phải là một phần của chương trình gốc ).

Fungoids không có chuỗi ký tự chuỗi, chúng có lệnh bật chế độ "đọc nguồn riêng dưới dạng chuỗi" và một số dạng của quy tắc "con trỏ lệnh đã đạt đến quy tắc ranh giới nguồn" (thường là bao quanh cạnh), do đó, cùng mã nguồn -byte điều kiện hoạt động như cả hai lệnh "bắt đầu chuỗi" và "chuỗi kết thúc", tạo ra một chuỗi bằng chữ của toàn bộ hàng / cột đó (không bao gồm "chính nó).


Câu trả lời siêu nhanh! Tôi chỉ tự hỏi nếu tôi hiểu nhầm điều gì đó về bài nộp của bạn, nhưng đối với tôi nó không in $;phần cuối trong phiên bản được trích dẫn.
Geza Kerecsenyi

Tôi nhận ra rằng khi đọc lại và đang cố gắng giải đố nếu runic có thể thực hiện được bit đó không. Bắt đầu điều tra các trích dẫn "chưa ghép đôi" bây giờ; ví dụ "$;""$;"(Runic quấn quanh trích dẫn ghép nối với chính họ).
Draco18

@GezaKerecsenyi Hãy cho tôi biết nếu chương trình cập nhật của tôi vi phạm bất kỳ quy tắc nào.
Draco18

Umm .. Làm thế nào là hợp lệ? Chương trình của bạn không có đầu ra dấu ngoặc kép !.(đúng), nhưng không phải chương trình của bạn có đầu ra dấu ngoặc kép 0$;? Tái bút: Tôi hoàn toàn không biết Bùa mê Runic, nhưng cách khắc phục tiềm năng dựa trên bố cục hiện tại của bạn mà tôi nghĩ là hợp lệ 0"!""$;"$;(sẽ xuất ra nguyên trạng!$; hoặc xuất ra0$; nếu được bao quanh bằng dấu ngoặc kép). EDIT: Trên thực tế, tôi nghĩ rằng bạn có thể bỏ 0và đầu ra !$;$;.
Kevin Cruijssen

1
@KevinCruijssen $là "in top stack" và ;chấm dứt. Nhưng về cơ bản bạn đã có một câu trả lời hợp lệ.
Draco18





0

Japt , 4 byte

"P"u

Không trích dẫn, nó chuyển đổi chuỗi Pthành chữ hoa. Trích dẫn, nó in u.

Thử nó

Japt , 4 byte

"P"w

Không trích dẫn, nó đảo ngược chuỗi P. Trích dẫn, nó in w.

Thử nó



@Shaggy Giải pháp của chúng tôi hơi khác một chút, có nhiều giải pháp khác nhau cho thử thách này
Hiện thân của sự thiếu hiểu biết

Sử dụng Q thay vì P, đó là meta nhiều hơn! ;)
Xù xì

0

R, 16 byte

 ";print(";");" 

Lưu ý rằng đoạn mã trên không được gói trong dấu ngoặc kép bổ sung và có cả khoảng trắng ở đầu và cuối.

Dùng thử (phiên bản không bọc)


Bạn có thể muốn thêm một lưu ý rằng chương trình được liên kết là phiên bản không gói.
Jonathan Frech

Tôi cũng sẽ thêm một lưu ý về không gian hàng đầu và dấu. Thật khó để nhận ra họ khác.
mbomb007

Đã chỉnh sửa, cảm ơn những lời đề nghị!
James Otto

0

AppleScript, 9 byte

return"&"

Giải thích:

return"&"    -- returns "&"

Trích dẫn:

"return"&""  -- implied return of the string "return" concatenated with ""
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.