Quine / Lỗi Quine Polyglot


14

Nhiệm vụ của bạn rất đơn giản: Viết chương trình có thể chạy bằng hai ngôn ngữ. Nó phải là một quine bình thường (in mã nguồn của chính nó) trong ngôn ngữ 1 và phải là một quine lỗi (tạo ra một thông báo lỗi giống hệt với mã nguồn của chính nó) trong ngôn ngữ 2.

Đây là , vì vậy bài nộp hợp lệ ngắn nhất (tính bằng byte) sẽ thắng.

Quy tắc:

  • Các ngôn ngữ có thể giống nhau tùy ý. Supersets / phiên bản tương tự / phương ngữ tương tự không được phép.
  • Các quy tắc kiểm tra lỗi giống như các quy tắc trong Tạo một quy tắc lỗi! .


Hai phương ngữ khác nhau của BASIC có được phép không?
MD XF

@MDXF Nếu họ có hành vi giống hệt nhau ngoại trừ một đầu ra cho STDERR thay vào đó, thì không. Nếu không, có.
Trái cây Esolanging

Vì vậy, câu trả lời của tôi là hợp lệ, sau đó.
MD XF

@MDXF Nó hợp lệ.
Trái cây Esolanging

Câu trả lời:


2

Befunge-93 (FBBI) / C (tcc) , 93 + 62 = 155 byte

^"
>#001p#"<>:#,_@#1-8*3:-1*57+55-1*79*57:-1:*77**278\-1:*57$p:1: error: declaration expected

Dùng thử trực tuyến!: Befunge-93 , C

Cảm ơn Randomdude999 đã lưu ý rằng tên tệp yêu cầu dấu ngoặc kép phù hợp để hoạt động.

Phải được lưu dưới tên tệp ^"\n>#001p#"<>:#,_@#1-8*3:-1*57+55-1*79*57:-1:*77**278\-1:*57$p, nơi \nlà một dòng mới. Do đó, TIO cho C không chạy chính xác như dự định. Đã thử nghiệm để hoạt động trên Lubfox.

Giải thích (C):

Chương trình không biên dịch được và tcc vui vẻ xuất ra tên của tệp như một phần của thông báo lỗi. Có nhiều lỗi biên dịch bạn có thể nhận được, dựa trên phần đầu của mã. ^khi bắt đầu cung cấp cho chúng tôi một declaration expected, ngắn và không chứa bất kỳ nhân vật có vấn đề như ". Mặt khác, các nhà phát triển gcc và clang rất bi quan và họ đã chọn xuất ra nhiều lỗi cùng một lúc, điều này không hay lắm, vì vậy chúng tôi không sử dụng trình biên dịch của họ.

Giải thích (Befunge-93):

Befunge thuận tiện cho các quine ở chỗ mã của nó cũng có thể được sử dụng làm dữ liệu ký tự, nhờ vào "lệnh, bật tắt chế độ chuỗi. Lúc đầu, chúng tôi thực hiện một số thao tác ngăn xếp vô dụng, sau đó đưa ra một plệnh (đặt lệnh) đặt ký tự NUL tại (0, 1). Sau đó, chúng tôi phản ánh con trỏ chỉ dẫn sang trái và bắt đầu đọc mọi thứ dưới dạng một chuỗi. Điều này phải được thực hiện ở bên trái, vì tính chất LIFO của ngăn xếp. Sau khi quấn quanh và tiếp cận "nhân vật một lần nữa, chuỗi kết thúc. Lưu ý rằng ký tự NUL đã thay thế$ký tự, tạo một dấu phân cách giữa chuỗi. Sau đó, chúng tôi đẩy 3 số lên ngăn xếp và nhảy qua NUL (vì nó không may treo trình thông dịch khi chạy như một hướng dẫn). Phần tĩnh của thông báo lỗi phải được thực hiện ở đây. Hầu hết các ký tự của nó là no-op, nhưng plệnh tiêu thụ ba đối số (do đó tại sao chúng ta đã đẩy 3 số, nếu không thì một phần của chuỗi sẽ được ăn ở đây) và :& các 1ký tự đẩy tổng cộng 4 giá trị vào ngăn xếp, mà chúng ta chống lại với một pvà một $hướng dẫn (pop và vứt bỏ). Sau đó, một số số học được thực hiện để đẩy mã ASCII ^"\n>#001p#"và cuối cùng một vòng lặp in ra tất cả các giá trị trên ngăn xếp dưới dạng ký tự cho đến khi tìm thấy ký tự NUL và chấm dứt.


Bạn cần tìm một HĐH hỗ trợ tên tệp như vậy và liệt kê nó. Tôi biết Windows không hỗ trợ điều đó.
mbomb007

@ mbomb007 Giả sử, Linux thường sẽ chấp nhận bất kỳ ký tự có thể in nào trong tên tệp ngoại trừ /. Tôi không thể kiểm tra điều đó ngay bây giờ.
âm bảy

1
Phiên bản nào của tcc bạn đã sử dụng? Tôi đang sử dụng 0.9.27-3 trực tiếp từ Arch repos và lỗi tôi gặp là <define>:1: error: missing terminating " character.
Randomdude999

1
Được rồi, tôi đã tìm thấy phiên bản chính xác của tcc được sử dụng trên TIO và tôi đã nhận được thông báo lỗi tương tự, nhưng chỉ khi dấu ngoặc kép của tên tệp khớp. Có trích dẫn chưa từng có vẻ khá cần thiết cho câu trả lời này để hoạt động. Đây là một cái gì đó có thể giúp bạn hiểu: Linux cũng cho phép các dòng mới trong tên tệp. Đây là đầu ra tcc khi thêm một dòng mới và một trích dẫn vào cuối tên tệp: (liên kết chính dài) . Điều này không có nghĩa là bạn sẽ cần tìm cách in dòng mới và nội dung trên dòng thứ 2.
Randomdude999

@ Randomdude999 Cảm ơn. Tôi đã cập nhật giải pháp cho tài khoản này. Thực sự thú vị rằng một trích dẫn chưa từng có gây ra vấn đề như vậy ...
tiêu cực vào ngày 7

0

Applicoft BASIC / Commodore LCD BASIC , 13 byte

?SYNTAX ERROR

Trong Apple] [trình giả lập, nhấn RESETphím để vào chế độ BASIC.
Trong trình giả lập LCD Commodore, nhấn RightArrowEnterđể vào ứng dụng BASIC.
Trong cả hai, không nhập ?SYNTAX ERRORtất cả các chữ hoa, vì chúng tự động viết hoa.


2
trạng thái không cạnh tranh được dành cho các bài nộp bằng các ngôn ngữ được thực hiện sau thử thách. Nếu nó không hợp lệ theo các quy tắc, xóa nó. Trước tiên hãy chờ xác nhận của OP vì tôi nghĩ điều này sẽ hợp lệ (giả sử nó hoạt động).
HyperNeutrino

@HyperNeutrino Cảm ơn, đã chỉnh sửa.
MD XF

1
Sẽ phải nghi ngờ điều này quá, sau đó. Câu hỏi này khá tàn bạo hơn vẻ ngoài của nó ...
Ørjan Johansen

1
@ RjanJohansen Chà, tôi không chắc lắm về điều này. Về mặt kỹ thuật, màn hình LCD Commore không có luồng byte lỗi tiêu chuẩn, vậy nó có thực sự là một lỗi không?
MD XF

1
@ ØrjanJohansen này ? Tôi đoán điều đó có thể có nghĩa là không thể biết liệu điều này có hợp lệ hay không. Chúng tôi có thể chờ xác nhận từ OP?
MD XF
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.