Gương quine (hoặc đầu tôi đau)


32

Tôi đã đọc In mã của bạn ngược - quine ngược Và tôi nghĩ, điều này có thể thú vị hơn nếu mã ngược của bạn cũng có thể thực thi được . Vì vậy, thách thức này sẽ có tất cả các quy tắc và yêu cầu của người khác, nhưng cũng phải là nguồn hợp lệ một khi đã đảo ngược (trong cùng ngôn ngữ hoặc ngôn ngữ khác và vẫn in ngược nguồn của nó.

Tất cả các quy tắc và tính điểm từ thử thách quine ngược được áp dụng, vì vậy tất cả các câu trả lời cho câu hỏi này sẽ trả lời rằng một (nhưng cũng không ghi được điểm nào.)

Chỉnh sửa:

Theo yêu cầu, tất cả các quy tắc hiện được sao chép ở đây.

Quy tắc:

  • viết chương trình p mà khi được thực thi sẽ tạo ra đầu ra p 'trong đó p' là p ngược và p 'khi thực hiện tạo ra p.
  • Không sử dụng các tệp khác (ví dụ reverse.txt)
  • Độ dài mã tối thiểu là hai ký tự.
  • Chương trình của bạn không thể là một bảng màu.

Ghi điểm:

  • +50 nếu bạn sử dụng dữ liệu kéo từ Internet.
  • +25 nếu bạn đọc mã nguồn của riêng bạn.
  • +1 điểm cho mỗi nhân vật.
  • Điểm số thấp nhất chiến thắng.

eval(eval(eval(eval(eval(eval(eval(eval(eval(p)))))))))
Andrew Larsson

Tôi chỉ nói rằng bạn có thể thực hiện đầu ra của việc thực thi đầu ra của việc thực hiện đầu ra của [...] thực thi đầu ra của p (giống như bất kỳ quine nào ngoại trừ quine ngược).
Andrew Larsson

@AndrewLarsson Thật vậy mặc dù Bằng chứng về khái niệm tôi đang xây dựng p sẽ được viết bằng c và p 'bằng perl.
hildred

Ồ, thật tuyệt!
Andrew Larsson

1
Vâng, thấy rằng quá muộn. Không trùng lặp.
Julian Kuhn

Câu trả lời:


22

GolfScript, 46 ký tự

0{`".~#"+.-1%+\.!@@}.~##~.}@@!.\+%1-.+"#~."`{1

Vâng, điều này là xấu xí, nhưng nó hoạt động. Đầu ra bằng với mã được đảo ngược và cũng là một chương trình GolfScript hợp lệ, nó sẽ xuất lại mã gốc.

OK, hãy để tôi cố gắng giải thích cách tôi xây dựng nó. Đầu tiên, tôi bắt đầu từ câu hỏi {".~"}.~và sửa đổi nó như trong câu trả lời này để đảo ngược chính nó. Để biến đầu ra thành một quine thực thi trong chính nó, tôi đã tạo một bản sao của mã trước khi đảo ngược nó và bao gồm một #phần cuối của mã, để phiên bản đảo ngược ở cuối chỉ là một nhận xét. Vì vậy, chúng ta có được quine palindromic:

{`".~#"+.-1%}.~##~.}%1-.+"#~."`{

Tuy nhiên, theo quy tắc, palindromes không được phép, vì vậy tôi cần phải phá vỡ tính đối xứng bằng cách nào đó. Tôi đã tìm cách dễ nhất sẽ được bao gồm 0(trong đó, tự nó, là một Quine trong GolfScript) trong mã và lật nó để 1!sau khi tạo bản sao đảo ngược. Hầu hết các phức tạp còn lại chỉ là thao tác ngăn xếp xấu xí để có được mọi thứ theo đúng thứ tự.


Nó cũng là golfscript khi đảo ngược hoặc nó là ngôn ngữ khác?
hildred

Vâng, đó là cả GolfScript. Thật vậy, ngoại trừ 01ở đầu và cuối, phần còn lại của mã là một bảng màu.
Ilmari Karonen

9
Ồ Được rồi, tôi không cảm thấy đủ thông minh cho SE này nữa :(
Cruncher 19/12/13

21

Perl và C 6478 1955

#!/usr/bin/perl -i//
$_=<<'rahc';eval $_; #//
print scalar reverse "#!/usr/bin/perl -i//\n\$_=<<'rahc';eval \$_; #//\n${_}rahc\n" #//
__END__
__END__ enifed#
};)"{ = ][cn\rahcn\n\"(p
};)'n\'( rahctup) 1 == 21%b ( fi
;)d(p;)]1-b[c,",d%",)d(foezis,d( ftnirpns{)b--;b;)c(foezis=b( rof
;)c(p;]9[d rahc;b tni{)(niam diov
}};)]1-b[c(rahctup )]1-b[c(fi{)b--;b;)c(nelrts=b(rof;b tni{)c*rahc(p diov
>h.gnirts< edulcni#
>h.oidts< edulcni#
;}
,0
,53,33,74,711,511,411,74,89,501,011,74,211
,101,411,801,23,54,501,74,74,01,63,59,16
,06,06,93,411,79,401,99,93,95,101,811,79
,801,23,63,59,95,23,53,74,74,01,211,411
,501,011,611,23,511,99,79,801,79,411,23,411
,101,811,101,411,511,101,23,43,53,33,74,711
,511,411,74,89,501,011,74,211,101,411,801,23
,54,501,74,74,29,011,29,63,59,16,06,06
,93,411,79,401,99,93,95,101,811,79,801,23
,29,63,59,95,23,53,74,74,29,011,63,321
,59,521,411,79,401,99,29,011,43,23,53,74
,74,01,59,59,96,87,86,59,59,01,59,59
,96,87,86,59,59,23,101,011,501,201,101,001
,53,01,521,95,14,43,321,23,16,23,39,19
,99,011,29,411,79,401,99,011,29,011,29,43
,04,211,01,521,95,14,93,011,29,93,04,23
,411,79,401,99,611,711,211,14,23,94,23,16
,16,23,05,94,73,89,23,04,23,201,501,01
,95,14,001,04,211,95,14,39,94,54,89,19
,99,44,43,44,001,73,43,44,14,001,04,201
,111,101,221,501,511,44,001,04,23,201,611,011
,501,411,211,011,511,321,14,89,54,54,95,89
,95,14,99,04,201,111,101,221,501,511,16,89
,04,23,411,111,201,01,95,14,99,04,211,95
,39,75,19,001,23,411,79,401,99,95,89,23
,611,011,501,321,14,04,011,501,79,901,23,001
,501,111,811,01,521,521,95,14,39,94,54,89
,19,99,04,411,79,401,99,611,711,211,23,14
,39,94,54,89,19,99,04,201,501,321,14,89
,54,54,95,89,95,14,99,04,011,101,801,411
,611,511,16,89,04,411,111,201,95,89,23,611
,011,501,321,14,99,24,411,79,401,99,04,211
,23,001,501,111,811,01,26,401,64,301,011,501
,411,611,511,06,23,101,001,711,801,99,011,501
,53,01,26,401,64,111,501,001,611,511,06,23
,101,001,711,801,99,011,501,53,01,95,521,01
{ = ][c
rahc

Chỉnh sửa:

Giải thích ngắn gọn: từ perl hai dòng thú vị là thứ hai và thứ ba. Dòng thứ hai có hai câu lệnh đầu tiên đọc phần còn lại của tài liệu thành một chuỗi. Thứ hai đánh bại chuỗi. Dòng thứ ba in mọi thứ ngược. mọi thứ khác bị bỏ qua. từ phía c bạn có một mảng có chương trình dưới dạng một chuỗi, được in thành một mảng và một chuỗi, và phần còn lại là một nhận xét.


1
wat. : O Đầu tôi nổ tung. Nhưng tôi đếm được 6536 ký tự trong đó ...
Doorknob

Cái gì ... làm thế nào ... 0_0
Chàng trai với chiếc mũ

@DoorknobofSnow Tôi đã tính sai phiên bản. Nhưng đây là một phiên bản ngắn hơn.
hildred

Điều này thật phi thường! Tôi nghĩ Haskell / C có thể là một sự kết hợp khả thi khác.
theonlygusti

@theonlygusti, nếu bạn đăng nó và tôi có thể biên dịch nó, tôi sẽ nâng cấp nó.
hildred

8

Ruby 145

DATA.read.tap {| a | đặt a.reverse, a.tr ("\ x79 \ x59", "\ x59 \ x79")}
: y
__KẾT THÚC__
__DNE__
Y:
}) "97x \ 95x \", "95x \ 97x \" (rt.a, esrever.a stup | a | {pat.daer.ATAD

Ý tưởng chính rất đơn giản: chỉ cần đặt nửa đầu của mã nguồn ngược lại sau phần __END__có thể được đọc bằng DATAruby. Sau đó, chỉ cần in ngược lại dữ liệu này, sau đó in dữ liệu và bạn lấy lại mã nguồn ban đầu

Vấn đề là, điều này trở thành một bảng màu (lưu ý rằng dòng đầu tiên cần một dòng cuối), vì vậy chúng ta phải phá vỡ tính đối xứng. Tôi vừa thêm một ký hiệu :yvào mã và một số mã sẽ biến đổi ký hiệu này giữa chữ thường và chữ hoa giữa các lần chạy, từ đó trở lại trạng thái ban đầu sau hai lần chạy.

Kiểm tra một: chúng có thể được thực thi

$ ruby rq2.rb > rq2t.rb
$ ruby rq2t.rb > rq2tt.rb

Kiểm tra hai: kết quả của hai lần chạy sẽ trả về nguồn ban đầu

$ diff rq2.rb rq2tt.rb
$

Kiểm tra ba: mã không phải là một bảng màu (chạy giữa là khác nhau)

$ diff rq2.rb rq2t.rb
3c3
< :y
---
> :Y
6c6
< Y:
---
> y:

4

> <>, 21 19 byte

'rd3*70.r l?!;o90.<

Hãy thử nó ở đây!

Sử dụng trình thông dịch *> <> để thuận tiện, nhưng mã này hợp lệ> <>.


Nếu lỗi được cho phép, thì nó có thể được thực hiện trong 16 byte:

'd3*}70.!r  !|o|

Hãy thử nó ở đây!


@JoKing cảm ơn bạn! Đó là 7 giờ sáng và tôi đã quá mệt mỏi để đặt nó cùng nhau. Tôi sẽ chỉnh sửa nó trong vài giờ nữa.
Discordian

4

Gol> <> , 11 byte

":5-}H}+5:'

Cả một byte bị băm nhỏ! nó gần như là một bảng màu, nhưng về mặt kỹ thuật không phải vì '+' và '-', haha!

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

Hai cái bên dưới không hoạt động, hoặc ít nhất là chúng không đáp ứng các thông số kỹ thuật của thử thách, nhưng đoạn mã trên thì có.

phiên bản trẻ hơn một chút, 12 byte

"r2ssrH}+5:'

Đánh bại một byte, chỉ đơn giản bằng cách sử dụng dấu ngoặc kép và tăng nó lên 5! Và phiên bản mới này trông giống như một chiếc palindrom.

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

phiên bản cũ hơn, 13 byte

"r2ssrHrss7r'

Có một vấn đề với phần trước mà JoKing đã chỉ ra, cảm ơn bạn vì điều đó, bây giờ nó hoạt động, nhưng với giá của 4 byte thêm ...

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


1

Giúp tôi với, WarDoq! (27 byte)

Thêm 25 byte vì đọc mã nguồn.

<space>q

Cách thức hoạt động:
<space>- một nhận xét kết thúc bằng ký tự không phải dấu cách
q- mã nguồn in bị đảo ngược (q "dấu cách")

Đảo ngược:

q<space>

Cách thức hoạt động:
q- mã nguồn in bị đảo ngược (q bây giờ)
<space>- một nhận xét kết thúc bằng ký tự không phải khoảng trắng và thêm một ký tự vào đầu lệnh q (tạo "khoảng trắng" q)

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.