Quay lại và chuyển tiếp polyglot quine!


9

Bạn phải tạo một polyglot xuất mã nguồn của nó bằng một ngôn ngữ và mã nguồn của nó ngược lại với ngôn ngữ khác. Không giống như các quy tắc thông thường, bạn được phép đọc tệp hiện tại hoặc sử dụng nội dung dựng sẵn để lấy mã nguồn của bài gửi của bạn và đảo ngược nó bằng một ngôn ngữ. Mã nguồn của bạn không thể là một bảng màu.

Ví dụ: nếu mã nguồn của bạn là abcxyz, nó phải xuất ra abcxyzmột ngôn ngữ và ngôn ngữ zyxcbakhác. Nếu mã của bạn là abcxyzyxbca, nó không hợp lệ vì nó là một bảng màu.

Chúc may mắn!


3
Quy tắc bình thường là có một lý do. Việc cho phép tích hợp sẵn có thể khiến thử thách này trở nên quá rộng và cho phép mã nguồn palindrom cho phép câu trả lời là các câu hỏi chuyển tiếp cho cả hai ngôn ngữ.
Erik the Outgolfer

@EriktheOutgolfer palindromes hiện không được phép.
lập trình

1
@EriktheOutgolfer Ah, vậy mã nguồn có thể là một bảng màu?
Luis Mendo

2
Tôi nghĩ bạn nên đưa ra một khoản tiền thưởng cho người đầu tiên hoàn thành thử thách này mà không vi phạm bất kỳ quy tắc quine thông thường nào. (có thể là 50 đại diện?)
clismique

1
Tôi đọc "bằng một ngôn ngữ" vì rõ ràng không đồng ý với trường hợp cả hai ngôn ngữ đều đọc mã nguồn, nhưng câu trả lời được bình chọn hàng đầu hiện nay thực hiện chính xác điều đó. Bạn có thể chỉnh sửa để làm rõ liệu điều đó có nghĩa là được phép không?
hvd

Câu trả lời:



6

Python 2 / Python 3, 71 byte

lambda _='lambda _=%r:(_%%_)[::int(1-(1/2)*4)]':(_%_)[::int(1-(1/2)*4)]

Không sử dụng bất kỳ nội dung quine.

Cảm ơn những quả trứng đã đánh thức tôi.


lambda _='lambda _=%r:(_%%_)[::int(1-(1/2)*4)]':(_%_)[::int(1-(1/2)*4)]cho 71 byte
ovs

@ovs Tất nhiên, làm thế nào tôi không nghĩ về điều đó.
Erik the Outgolfer

6

Batch / bash + tac, 39 byte

:;tac -r -s '.\|'$'\n' $0;exit
@type %0

Đầu ra chuyển tiếp trong Batch. Giải thích: Batch xem dòng đầu tiên là nhãn và bỏ qua nó, trong khi dòng thứ hai chỉ cần sao chép tệp nguồn vào STDOUT. (Lưu ý rằng bạn cần gọi tệp bao gồm cả phần mở rộng hoặc thay đổi %0thành %~f0.) bashThấy bốn lệnh:

  • :không có gì (giống như true)
  • tac -r -s '.\|'$'\n' $0
    • -rđưa tacvào chế độ regex
    • -s chỉ định một biểu thức chính quy
    • '.\|'$'\n' là regex, bao gồm
      • . bất kỳ nhân vật nào ngoại trừ dòng mới
      • \| hoặc là
      • $'\n' một dòng mới
    • Kết quả cuối cùng là tacchia tệp thành các ký tự chứ không phải là dòng.
  • exit dừng tập lệnh, bỏ qua lệnh thứ tư
  • @type %0 (mặc kệ)

Tôi nghĩ rằng bạn có thể thay thế dòng đầu tiên với :;rev $0|tac;exit. Ngoài ra, tiêu đề nên nói Batch / sh + produc-linux + coreutils thay thế.
Erik the Outgolfer

@EriktheOutgolfer $'\n'là một Bashism, rev $0|tackhông đảo ngược dòng mới một cách chính xác, và nó có thực sự quan trọng tactrong một gói không?
Neil

$'\n'không tồn tại trong sự thay thế mà tôi đã đề xuất và rev $0|taclàm việc cho tôi. Và tôi nghĩ tốt hơn là chỉ định các gói thay vì các tiện ích riêng lẻ, bởi vì đôi khi có thể xảy ra nhầm lẫn (ví dụ: gói tacnào?).
Erik the Outgolfer

@EriktheOutgolfer Hãy thử trực tuyến! là sai. Vậy là hãy thử trực tuyến! (nhưng tinh tế hơn).
Neil

Bạn có thể vui lòng cho một lời giải thích?
lập trình

3

PHP & Retina, 2 byte

1

Giống như câu trả lời PHP & GolfScript của Gille.

PHP chỉ cần đọc mã và xuất mã trực tiếp, Retina sẽ thay thế các chuỗi trùng khớp trong đầu vào và thay thế bằng 1 và xuất ra mã đó bằng một dòng mới.


2

JS (ES5), JS (ES6), 94 byte

function f(){try{eval("x=(f+'f()').split``.reverse().join``")}catch(e){x=f+"f()"};return x}f()

Không sử dụng bất kỳ quine dựng sẵn. Chỉ cần sử dụng thực tế là các hàm JS xâu chuỗi mã của chúng. Có lẽ có thể được chơi golf nhiều hơn.


1

Nếu bạn cho phép đọc mã nguồn, nó thực sự không phải là một vấn đề.

PHP & sh + produc-linux, 6 byte

rev $0

Tôi chắc chắn rằng các ngôn ngữ chơi golf thông thường có thể làm điều đó trong 2 byte.


Họ nguyên vẹn có thể.
ATaco
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.