Kỳ 2 hoàn nguyên


10

Nhiệm vụ của bạn là viết một chương trình xuất ra mã nguồn của chính nó theo chiều ngược lại. Tuy nhiên, khi mã đảo ngược được chạy, nó sẽ xuất mã nguồn, hướng đúng hướng.

Thí dụ

Nói chương trình của bạn là abc. Khi chạy, nó sẽ xuất ra cba. cba, khi chạy, nên xuất abc.

Quy tắc

Chương trình của bạn nên tuân theo tất cả các quy tắc của một câu hỏi thích hợp (ngoại trừ việc xuất mã nguồn). Palindromes không được phép.

Lưu ý ngẫu nhiên: Tôi nhận thức được điều này nhưng tôi tin rằng thách thức này là khác nhau vì mã được chuyển đổi phải có cùng thuộc tính.



Câu trả lời:


9

RProgN , 3 byte

1
2

Cảm ơn @MartinEnder đã nhắc nhở tôi về câu trả lời này .

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

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

Điều này khai thác một lỗ hổng tiềm năng trong định nghĩa của chúng tôi về quine thích hợp :

Phải có thể xác định một phần của chương trình mã hóa một phần khác của chương trình. ("Khác nhau" có nghĩa là hai phần xuất hiện ở các vị trí khác nhau.)

Hơn nữa, một quine không được truy cập vào nguồn của chính nó, trực tiếp hoặc gián tiếp.

Đó rõ ràng là trường hợp ở đây, vì đầu ra là đảo ngược của mã và mã không phải là một bảng màu.

RProgN - ký hiệu lập trình ngược - sử dụng ngăn xếp LIFO và in các mục trên đó theo thứ tự chúng được bật. Hai mã thông báo 12 , được phân tách bằng dấu cách và / hoặc dòng mới, được bật theo thứ tự ngược lại và được in cách nhau bởi một dòng mới.

Điều này in chương trình đảo ngược

2
1

trong đó, lần lượt, in bản gốc.

! enilno ti yrT


Tôi thích URL.
Christopher

4
Chúng ta nên sửa lỗi này ... Tôi sẽ đăng một câu trả lời mới (dựa trên nhận xét này ) cho câu hỏi meta, nhưng có lẽ nó sẽ không đủ chú ý để cạnh tranh với các câu trả lời hiện có.
Sản phẩm ETH

2
@ETHproductions: Làm đi. Tôi cảm thấy có một số vấn đề với định nghĩa quine thích hợp hiện tại của chúng tôi. . Định nghĩa; 1 và 2 được mã hóa rõ ràng bởi chính chúng, vì vậy mối quan tâm tiềm năng duy nhất là mã hóa dòng mới. (Điều này khác với một 1\n1, trong đó hai 1s mã hóa lẫn nhau, đó là có thể là một Quine đúng nhưng không phải là một hợp ngược Quine.)

9

Befunge-98 , 33 byte

b3*>1#;-:0g,:#;_@_;#:,g0:-;#1>*b3

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


Câu trả lời đầu tiên tốt đẹp. Nhưng sử dụng #để làm cho bạn tiêu đề. Đồng thời truy cập Tryitonline.net và nhận thông dịch viên trực tuyến
Christopher

2
Cũng đi dưới nút lưu và sử dụng trình mã hóa.
Christopher

Tôi đã chỉnh sửa nó trên TIO ở nơi đầu tiên. Tôi chỉ quên thêm liên kết nhưng bây giờ nó đã được thêm và cảm ơn về mẹo Header
IQuick 143

Lưu ý rằng tùy chọn "trình mã hóa" trên TIO cung cấp cho bạn một mẫu bắt đầu, bao gồm cả tiêu đề.
Ørjan Johansen

Tôi nghĩ rằng gkhông được phép trong các nhóm Befunge, vì nó đọc nguồn của chương trình trực tiếp từ bộ nhớ?

7

Phân hạch 2 , 10 byte

"L;L'!+!'_

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

Bản in này:

_'!+!'L;L"

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

Và ngược lại.

Giải trình

Đây là một sửa đổi của quine ngược . Nó hoạt động theo lợi thế của chúng tôi ở đây !được sử dụng để in và cũng chỉ cách một đoạn mã so với trích dẫn ". Điều đó làm cho nó dễ dàng hơn để làm cho phần in trích dẫn palindromic (the '!+!'). Hãy bắt đầu với mã đầu tiên:

"L;L'!+!'_

Chương trình này có hai điểm vào tại Ls, mỗi điểm tạo ra một nguyên tử trái. Tuy nhiên, cái bên phải ngay lập tức đánh vào ;thứ phá hủy nó. Cái bên trái vào chế độ chuỗi và quấn quanh đến cuối, để nó in toàn bộ mã (ngoại trừ ") từ sau ra trước. Điều đó đã cho chúng ta _'!+!'L;L. Tất cả chỉ còn lại là in ". _có thể bỏ qua, '!đặt khối lượng của nguyên tử lên 33 (điểm mã của !), +tăng nó lên "!in ra. Đó là tất cả các đầu ra được thực hiện. Việc 'Lđặt khối lượng nguyên tử đến điểm mã của Lnhưng điều đó không liên quan. ;phá hủy nguyên tử này là tốt và vì không còn nguyên tử nào, chương trình chấm dứt.

Bây giờ ngược lại:

_'!+!'L;L"

Một lần nữa, chúng ta có hai điểm vào nhưng một nguyên tử bị phá hủy ngay lập tức. Lần này chúng tôi chuyển qua !+!'phần đầu tiên, vì vậy chúng tôi bắt đầu bằng cách in một trích dẫn. Điều '_này một lần nữa không liên quan, nhưng chúng ta cần _(hoặc một số nhân vật vô dụng khác) ở đây để tránh 'thoát ". Nguyên tử kết thúc đến cuối, đi qua mã nguồn một lần trong chế độ chuỗi để in phần còn lại của chương trình, Lsau đó bị bỏ qua và ;phá hủy nguyên tử và chấm dứt chương trình.

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.