镜子奎因(或我的头很痛)


32

我正在阅读将您的代码向后打印-反向quine,我想,如果您的向后代码也是可执行的,这可能会更有趣。因此,此挑战将具有其他挑战的所有规则和要求,但一旦反向(以相同或另一种语言显示,也必须向后打印其来源),也必须是有效的来源。

逆向拉网挑战的所有规则和计分均适用,因此该问题的所有答案都将回答该问题(但得分也不相同)。

编辑:

根据要求,所有规则现在都复制到此处。

规则:

  • 编写程序p,该程序在执行时会产生输出p',其中p'向后p,而在执行时会产生p'。
  • 请勿使用其他文件(例如reverse.txt
  • 最小代码长度为两个字符。
  • 您的程序不能是回文。

得分:

  • +50(如果您使用来自互联网的提取数据)。
  • +25,如果您阅读自己的源代码。
  • 每个字符+1点。
  • 最低分获胜。

eval(eval(eval(eval(eval(eval(eval(eval(eval(p)))))))))
安德鲁·拉尔森

我只是说,您将能够执行输出,执行输出,执行p的输出,执行p的输出(除向后quine外,与其他任何quine相同)。
安德鲁·拉尔森

@AndrewLarsson确实,尽管我正在构建p的概念证明将用perl的c和p'编写。
hildred

哦,那太酷了!
安德鲁·拉尔森

1
是的,看到太晚了。不能重复。
约翰内斯·库恩

Answers:


22

GolfScript,46个字符

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

好吧,这很丑,但是行得通。输出等于反转的代码,它也是有效的GolfScript程序,可以再次输出原始代码。

好,让我尝试解释一下我是如何构造的。首先,我从quine开始{".~"}.~,并按照此答案中的说明对其进行了修改以使其自身反转。为了使输出本身成为可执行的quine,我在反转之前制作了一个代码副本,并#在代码末尾添加了一个,因此末尾的反转版本仅是注释。因此,我们得到了回文奎因:

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

但是,按照规则,回文是不允许的,所以我需要以某种方式打破对称性。我想最简单的方法是将包括0(其中,本身就是在GolfScript一个蒯)的代码,并将其翻转到1!创建反转副本之后。剩下的大部分复杂性就是丑陋的堆栈操作,无法按正确的顺序获取所有内容。


颠倒时它还是golfscript还是另一种语言?
hildred

是的,双向都是GolfScript。确实,除了01开头和结尾之外,其余代码都是回文。
Ilmari Karonen

9
哇。好的,我对此SE不够聪明:(
Cruncher 2013年

21

Perl和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

编辑:

简要说明:从perl来看,两个有趣的行是第二行和第三行。第二行有两个语句,第一个语句将文档的其余部分读入字符串。第二个评估字符串。第三行将所有内容向后打印。其他所有事情都会被忽略。从c端开始,您有一个数组,该数组具有作为字符串的程序,该程序被打印为数组和字符串,其余为注释。


1
at :O我的头爆炸了。但是我数了6536个字符……
门把手

什么...如何... 0_0
帽子的家伙

@DoorknobofSnow我算错了版本。但是这是一个较短的版本。
hildred

这难以置信!我认为Haskell / C可能是另一种可行的组合。
theonlygusti 2015年

@theonlygusti,如果您发布它并且可以编译,我会投票赞成。
hildred

8

红宝石145

DATA.read.tap {| a |输入a.reverse,a.tr(“ \ x79 \ x59”,“ \ x59 \ x79”)}
:y
__结束__
__DNE__
Y:
})“ 97x \ 95x \”,“ 95x \ 97x \”(rt.a,esrever.a stup | a | {pat.daer.ATAD

主要思想很简单:只需将源代码的前半部分放到后面__END__,就可以使用DATAruby 读取它了。然后只需打印此数据的反面,然后打印数据,即可获得原始源代码

问题是,这变成了回文(请注意第一行需要一个终点),因此我们必须打破对称性。我刚刚:y在代码中添加了一个符号,并且一些代码将在运行之间在小写和大写之间转换该符号,从而在两次运行后恢复为原始状态。

测试一:可以执行

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

测试二:两次运行的结果将返回原始源

$ diff rq2.rb rq2tt.rb
$

测试三:代码不是回文(中间运行是不同的)

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

4

> <>,21 19字节

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

在这里尝试!

为了方便起见,使用*> <>解释器,但这是有效的> <>代码。


如果允许错误输出,则可以用16个字节完成:

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

在这里尝试!


@JoKing谢谢!早上7点,我太累了,无法将它们放在一起。我将在几个小时内对其进行编辑。
Discordian

4

Gol> <>,11个字节

":5-}H}+5:'

整个字节被砍掉了!它几乎是回文,但从技术上讲并不是因为'+'和'-',哈哈!

在线尝试!

下面的两个不起作用,或者至少它们不符合挑战的要求,但是上面的代码可以。

较年轻的版本,12字节

"r2ssrH}+5:'

仅需使用双引号并将其递增5,就可以打掉一个字节!而且这个新版本看起来不像回文。

在线尝试!

较旧的版本,13字节

"r2ssrHrss7r'

JoKing指出,以前的版本存在问题,谢谢您,现在可以正常工作,但是需要额外的4个字节的价格...

在线尝试!


1

求助,WarDoq!(27个字节)

由于读取源代码而增加了25个字节。

<space>q

工作原理:
<space>-以非空格字符结尾的注释
q-反向打印源代码(q“空格”)

反转:

q<space>

工作原理:
q-反向打印源代码(现在为q)
<space>-以非空格字符结尾的注释,并在q命令的开头添加一个字符(使“空格” q)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.