向后打印代码-反向搜索


83

编写一个程序,将其自身的源代码向后打印出来,即eniuq

得分:

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

规则:

  • 请勿使用其他文件(例如reverse.txt
  • 最小代码长度为两个字符。
  • 您的程序不能是回文。

1
看起来这之前已经完成过,只是没有“禁止回文”规则。
Iszi 2013年

3
这些分数是奖金还是罚款?您需要用词指定是惩罚还是奖励,因为+10可以说“分数比实际多10个字符”或“代码可以包含10个不会多的字符”。得分”或其他解释。
AJMansfield

7
@AJMansfield最低分获胜意味着+ x将是罚款,-x将是奖金。
Iszi 2013年

9
那么,我的一个问题是,为什么从互联网上提取数据比读取源文件要付出更大的代价?
AJMansfield

4
Woohoo,在热网络问题列表中排名第一:D我们的网站需要更多关注...
Doorknob

Answers:


69

GolfScript-2


1

(即换行符\n1在哪里\n

输出:

1

(即1\n


引用Ilmari

GolfScript自动将换行符追加到输出的末尾

因此,换行符后跟一个数字将打印该数字后跟一个换行符。


14
+1我认为没有什么可以击败Mathematica解决方案的。
卡亚

26
相当无聊的解决方案……
theonlygusti 2015年

@theonlygusti这是golfscript,哇达雅期待...
Redwolf节目

96

嗯?,5个字符

!hcuO

我实际上不知道它是如何工作的,但是如果您下载了解释程序,并且编写了代码!hcuO,那么您会得到Ouch!

要运行此程序,您需要执行以下程序:

huh.exe !hcuO

实际上,它将查找名为的文件!hcuO,但该文件不存在,因此输出Ouch!


93
+1撰写您不了解的内容
Cruncher

30
您不了解自己的代码的工作原理是否有点讽刺意味?在设计上也不应该理解您的代码吗?
Iszi 2013年

@Iszi这是个玩笑。
AJMansfield

9
我不确定您是否使用huh?正确,尽管我很难找到合适的文档。看来用途是预期的,huh.exe <path to source code>并且Ouch!返回的是无效路径。尝试将代码放入实际文件中,并将该文件作为参数提供给它,huh?然后看看会发生什么。有趣的是,它生成的Notes.txt文件带有一些注释。
Iszi 2013年

8
好的,这件事只是告诉我它认为可以理解,但是我什么都没看到。也许我应该停止在主系统上使用它。
Iszi 2013年

85

Mathematica,3个字符

a 2

a 2表示a时间2。所以答案是2 a


2
除非有人可以获得两个字符的解决方案,否则这可能会获胜。
ike13年

22
实际上,我知道两个字符的解决方案。另外在Mathematica中:1#。输出为#1
alephalpha

7
@alephalpha:那么您应该将其发布为答案!
ProgramFOX 2013年

65

H9 +,13个字符

!dlrow ,olleH

随着网页说,那是不是所有的字符H9或者+被忽略,所以我的程序将打印Hello, world!


30
疯狂的深奥语言的唯一且唯一的实际好处是回答这些疯狂的问题。
totymedli 2013年

如果这些问题是这样,那将更为实际。
kojiro

1
那真是太聪明了!
theonlygusti 2015年

40

Javascript:34个字符

reifitnedi detcepxenU :rorrExatnyS

输出SyntaxError: Unexpected identifier,至少在Chrome控制台中


8
聪明地利用滥用错误来滥用系统
WallyWest

2
先生,您好,我今天过
得很愉快

4
不是原来的想法,已经有了另外一个答案这个在Python 2
O0' 。

1
@Lohoris对不起,我没看到那个
scrblnrd3

1
Mozilla Firefox中的Firebug控制台:tnemetats erofeb ; gnissim :rorrExatnyS=> SyntaxError: missing ; before statement
kenorb 2014年

27

蟒蛇,43 41

_=']0~::[_%%_ tnirp;%r=_';print _%_[::~0]


20

TI-BASIC,2

i2

哪里 i虚数。

产出 2i


1
这仅适用于主屏幕,不适用于PRGM。
kernigh

8
@kernigh你尝试了吗?工作正常。(如果TI-BASIC程序的最后一条语句求值为表达式,则在程序终止时将打印其结果,而不是打印“ Done”)
AJMansfield

18

基本 22 12 7个字符

:-)

1 enil ni rorre xatnyS

编辑:如果您被允许以即时模式进入程序,则可以将其减少为rorre xatnyS(12个字符)。

在BBC BASIC中,您仅需要7个字符:

ekatsiM

13

C ++ 472个字符

很多字符,但我想不出基于C语言的简单方法。

#include<iostream>
#include<string.h>
#define p(t) std::cout<<'}'<<';'<<')'<<strrev(&std::string(#t)[0])<<t;
char* strrev(char*p){char*t=p;char*q=p;while(q&&*q)++q;for(--q;p<q;++p,--q)*p=*p^*q,*q=*p^*q,*p=*p^*q;return t;}
int main(){p("(p{)(niam tni};t nruter;q*^p*=p*,q*^p*=q*,q*^p*=p*)q--,p++;q<p;q--(rof;q++)q*&&q(elihw;p=q*rahc;p=t*rahc{)p*rahc(verrts *rahc;t<<)]0[)t#(gnirts::dts&(verrts<<')'<<';'<<'}'<<tuoc::dts )t(p enifed#>h.gnirts<edulcni#>maertsoi<edulcni#");}

13

重击

$ dnuof ton dnammoc :found :hsab-
-bash: dnuof: command not found

长度:31个字符。


SH

$ dnuof ton dnammoc :found :hs-
sh: dnuof: command not found

长度:29个字符。

该版本无法在某些Linux发行版上运行,但可以在OSX上运行。


tcsh

$ .dnuof ton dnammoC :found.
.dnuof: Command not found.

长度:26个字符。


csh

% .dnuof ton dnammoC :found.
.dnuof: Command not found.

长度:26个字符。


获奖者是:

sh

$ dnuof ton :found :hsk
ksh: dnuof: not found

长度:21个字符。


以上内容适用于所有基于* unix的操作系统。


32
对我不起作用,我有一个名为dnuof
Kroltan

8
我忘了补充,它不适用于已dnuof安装的发行版(无论安装了什么)。该死的黑客。
kenorb 2013年

5
哈哈哈,有个命令叫dnuof?:D它做什么?
门把手

11

GolfScript,12个字符

"-1%.`"-1%.`

此代码采用双引号引起来的字符串"-1%.`",将其反转(-1%),将其复制(),然后将其.除以(`第二个副本),并在其周围恢复双引号。

上一个条目(13个字符):

{`'.~'+-1%}.~

基于8字符喹{'.~'}.~这个答案 ; 需要额外的5个字符来对输出进行字符串化和反转。

附言 请注意,GolfScript会在输出末尾自动添加换行符。如果将此视为输出的一部分,则可以在任一版本的代码之前添加相应的换行符,而不会影响输出,但需要额外的一个字符。


10

Befunge 98-10个字符

"8k,'!1+,@

如果您的解释器在"添加额外的空间后未解释换行,则此方法有效。如果您的解释器确实这样解释了换行,则此11个字符的解决方案有效(因为字符串文字中的重复空格被解释为一个):

"9k,'!1+,@ 

如果我可以g不加惩罚地使用,那么这些也可以工作(分别为7和8个字符):

"5k,g,@

"6k,g,@ 

9

Ruby,60岁

puts(2,s=<<2.chop.reverse,s)
puts(2,s=<<2.chop.reverse,s)
2

基于经典的Ruby quine。


很好地使用heredocs。
乔恩·普迪

9

Perl,41岁

$_=q{print~~reverse"\$_=q{$_};eval"};eval

旧的52个字符的答案(27分+ 25分)

open+0;print ~~ reverse <0>

读取自己的源,将反面存储在标量中,然后打印出来。


1
scalar操作员可以被替换~~。但是,您需要在分数上加上+25才能阅读自己的源代码。
面包箱

@breadbox指出
smcg 2013年

+1。我正准备发布类似shell解决方案的内容$_='say"lave;\047",~~reverse,"\047=_\$"';eval,但是您的解决方案更短:-)请注意,您可以使用来将其打成39个字符say。希望您能战胜所有深奥的怪异:-)
Tomas

您是否建议print使用@Tomas替换say?最终不打印任何内容。
smcg 2014年

您使用-Mfeature=say选项运行perl 吗?
Tomas

9

裂变,6个字节

稀有情况的广义quine 与普通quine的长度相同:

"LO+!'

这个想法与普通quine的想法相同,但是我们使用了一个向左移动的原子(从处开始L),以便打印模式以相反的顺序遍历代码。


8

J:26

标准奎因 (26个字符):通过定义一个函数并将其自己的定义传递给引号:

|.(,],2#{:)'|.(,],2#{:)'''

可能会缩短。

特定于J的 字符(33个字符):通过定义一个变量并询问变量定义在哪个文件中,即这个文件,然后打印出该文件的内容:

1!:2&2|.1!:1(4!:4 a=:<'a'){4!:3''

必须从脚本保存并运行(即不在REPL中,因为问题的答案是“您的参数未在文件中定义”,因此没有文件可读取)。


2
第二个应该获得+ 25奖金来读取自己的文件。
Johannes Kuhn 2013年

2
@JohannesKuhn:罚款,但是。
jazzpi 2013年

1
“奖金”听起来更好。
约翰内斯·库恩

7

> <>,25个字节

我很惊讶地发现这还没有完成。:)

...yhsif sllems gnihtemoS

将代码粘贴到此处并运行。

. 是Jump命令,弹出 xy堆栈,然后将IP移到(x, y)代码框中。在这种情况下,堆栈为空,因此将打印该语言的唯一错误消息:

Something smells fishy...

1
最好的答案
Insane

7

缩图,11个字节

我有点不得不这样做。

0"Caxq"Caxq

出乎意料的是,这实际上比该语言已知的最短真奎因短。qa在其他方面是等效的,除了q添加包装引号而a不是添加引号。


5

JavaScript jQuery 119 92 74 70个字符

alert($("#answer-16051 pre code").text().split("").reverse().join(""))

现在使用jQuery(如微型技术在注释中建议的那样),并手动进行包装,<pre><code>这样我就可以使用,text()而不必担心这篇文章中的其他代码块会造成干扰。<h4>在我测试时,手动包装与chromeium不兼容,因此现在它应可在大多数浏览器中使用。

如果从该页面运行该程序,则会在其正上方找到代码块,并反转其内容,并将其放入警报框中。

它很容易验证,只需将其粘贴到开发控制台即可。


这比仅使用函数要长得多。并且您应该使用jQuery(在此页面上)或至少使用querySelector
Ry-

@minitech感谢您的提示,我querySelector现在将其交换了一下。我想研究一下jQuery的可能性,但是看起来我需要花费更长的时间。
AJMansfield

@minitech好的,谢谢你的jQuery提示。(我昨天才开始学习JavaScript。)
AJMansfield

我喜欢这个解决方案;外箱思考。
theonlygusti 2015年

4

PHP,41个字符(+25)

不知道我是否正确理解了作业。但是这是一个PHP尝试:

while(!isset($s) || $s) echo isset($s) ? array_pop($s) : ($s = str_split(file_get_contents(__FILE__)) and null);

编辑:这可以短得多:

echo strrev(file_get_contents(__FILE__));

但是因为它可以这么简单,所以可能不是要问的问题...



当我单击“运行”时,我会得到一堆无用的废话(这是它的一小段:>? ;)llun dna ))__ELIF__(f$(tilps_rts = s$( : )s$(pop_yarra ? )s$(tessi ohce )s$ || )s$(tessi!(elihw ;"stnetnoc_"=.f$ ;'teg_elif'=f$ php?<>?}};ESLAF nruter;"ec6x\i66x\02x\e47x\96x\rw ;还有更多)。另外,包括您的字符数;这是代码高尔夫。另外,似乎您正在阅读源文件,因此将25个字符添加到字符计数中,这就是您的得分。最低分获胜。
贾斯汀

@Quincunx首先,它是向后的……但是,第二,这是phpfiddle生成的源代码!(但倒退...)他们似乎逃避了很多事情,试图确保事情安全。替换array_poparray_shift以查看源代码,而不是向后...
nl-x

是的,我可以看到相反的源代码,但是所有多余的文本是什么?有许多转义序列,但有些则不是(例如:ESLAF nruterie return FALSE)。
贾斯汀

@Quincunx对不起,如果您对phpFiddle的工作方式表现出兴趣,或者您批评我的代码,我没有抓住。如果是后者,那么为了防御起见,请将我的代码放在.php文件中,然后在浏览器中运行它,即可正常工作。我只是认为phpfiddle是一个让您看到的好东西,因此您可以看到它的一些内部功能。
nl-x

4

MATLAB,78个字符:

 
|
.snoisserpxe ro stnemetats BALTAM ni dilav ton si retcarahc tupni ehT :rorrE

请注意,该解决方案要求您以特殊字符(alt + 0160)开头,并且它会精确打印反转的消息。(与python解决方案不同)


4

UNIX Shell,31岁

52个字符的实际解决方案

A='printf "A$ lave;\047`echo $A|rev`\047=A"';eval $A

但是要当心!诚实在当今世界没有回报!罚款太低!!

6个字符+ 25 = 31:

rev $0

在OSX上会rev $0产生错误:rev: illegal option -- b
kenorb 2014年

4

MS-DOS,24个字节

eman elif ro dnammoc daB

输出:

Bad command or file name

3

JavaScript,62

function f(){alert((f+'f()').split('').reverse().join(''))}f()

适用于我最新的Chrome版本(v 31.0.1650.63)。其他一些浏览器可能会提供不同的输出。(如果您反转该输出,则它将起作用:P)


3

SmileBASIC,118个 102字节

FOR I=-101TO.?MID$(("+CHR$(34))*3,30,102)[-I];:NEXTFOR I=-100TO.?MID$(("+CHR$(34))*3,30,102)[-I];:NEXT

2

JavaScript,56

($=_=>_!=$._?_?$(_.slice(1))+_[0]:')':$('($='+$+')('))()

请说明您的环境,因为这在Chrome中不起作用。这是犀牛还是什么?
乔治·瑞斯

@GeorgeReith:任何支持ES6箭头功能的东西。例如,所有SpiderMonkey都应该可以正常工作(包括犀牛)。
Ry-

2

CSS,88字节

<style>:before,*{display:block;unicode-bidi:bidi-override;direction:rtl;content:'<style>

放入空白的html页,以避免与其他标签冲突。


2

JavaScript,53 50 46 43字节

q=_=>("q="+q+";q()").split("").reverse().join("");q()

(q=_=>`(q=${q})()`.split("").reverse().join(""))()

(q=_=>`(q=${q})()`.split``.reverse().join``)()

(q=_=>[...`(q=${q})()`].reverse().join``)()

请帮助我缩短时间。


您不需要包装器。q=_=>[...`q=${q}`].reverse().join`` 效果也一样。
Rɪᴋᴇʀ

如果删除包装器,它将不会自动执行。
ericw31415 '16

它不需要。功能很好。
Rɪᴋᴇʀ

但随后,代码将返回函数引用,而不是函数的输出。
ericw31415 '16

@ ericw31415是正确的。函数调用是必需的。
Mama Fun Roll

2

Fuzzy Octo鳄梨酱,4字节

KNU_

K打印_UNKN推送NoneU推送0。并_在堆栈上弹出最高值(但不打印)。因此仅_UNK打印。


为什么K输出_UNK
Caird coinheringaahing

@RandomUser向Riker询问更多细节,他是语言的创造者。我只是看了文档。
秃头巴萨
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.