13

编写一个程序,将其源代码的反向输出为字符串。如果源是

abcd
efg

(即 C 字符串"abcd\nefg"

那么输出应该是

gfe
dcba

(即 C 字符串"gfe\ndcba"

使用诸如 Brainf*ck 等深奥语言的奖励积分。


*编辑:** 删除了不必要的 \0 字符。+

4

25 回答 25

32

C : 0 个字符

参考:http ://www0.us.ioccc.org/years.html#1994_smr

于 2010-03-17T21:15:27.940 回答
24

总部9+:

HQ9+深奥的语言中,此代码可能是:

Q

在这里您可以找到该语言的解释器

红宝石:

从这里逆转奎因。

eval s=%q(puts "eval s=%q(#{s})".reverse)
于 2009-09-01T22:28:25.683 回答
18

Powershell FTW(1 个字符):

1

将其直接放在命令行上或脚本内。

于 2009-09-03T16:08:41.457 回答
8

这是一个两行代码,改编自NeatQuine.py

me = 'me = %(me)r\nprint (me %% locals())[::-1]'
print (me % locals())[::-1]
于 2009-09-01T22:59:08.540 回答
7

C89

int sprintf(char*,char*,...);char*d=
"int sprintf(char*,char*,...);char*d=%c%c%s%c%c,b[999],*p=b+251;main(){for(sprintf(b+1,d,10,34,d,34,10,10,10);*p;)putchar(*p--);}%c"
,b[999],*p=b+251;main(){for(sprintf(b+1,d,10,34,d,34,10,10,10);*p;)putchar(*p--);}
于 2009-09-01T23:47:58.457 回答
5

Bash script

(10 Charecters)

cat $0|rev

This must be saved as a script file to work and executed on the same directory.

Another solution would be in python (or any other scripting languages) a zero byte source code file! it will print nothing in return. There's nothing in the rules saying it can't be 0byte file :).

于 2009-09-01T23:05:55.640 回答
5

J,26 个字符。

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

产生输出:

'''):{#2,~,(.|'):{#2,~,(.|
于 2010-06-29T04:39:23.473 回答
4

我会在高尔夫上输,但它教会了我关于reverse(). Perl中有太多(142) 个字符:

#!/usr/bin/perl
$_='#!/usr/bin/perlc%$_=c%s%c%;print sprintf~~reverse,10,39,~~reverse,39,10;c%';print sprintf~~reverse,10,39,~~reverse,39,10;

这证明sprintf()/reverse()组合不是解决这个问题的方法。更好的 Perl 解决方案无疑会使用eval().


巨大改进:45 个字符:

print~~reverse <<''x2
print~~reverse <<''x2

请注意,源文件应以空行结尾。空行被计入字符数 - 你认为我们如何从两行相同的代码中得到奇数字符数?

于 2009-09-02T00:04:56.380 回答
4

Python 2(55 个字符):

x='x=%s;print(x%%repr(x))[::-1]';print(x%repr(x))[::-1]

更好的高尔夫球手可能会稍微缩短这一点,因此欢迎任何改进。

编辑(43 个字符):

x='x=%r;print(x%%x)[::-1]';print(x%x)[::-1]

还要感谢 @stephan202 捕捉打印上的空白

于 2009-09-05T06:59:33.647 回答
3

在 Python 交互式提示符下:

xatnys dilavni :rorrExatnyS

27 个字符。

于 2013-12-18T22:55:08.393 回答
3

在 C 中,217 个字符:

a="};)01(rahctup;)--p*(rahctup);p*;43=p*(rof;)a(ftnirp;))a,b=p(tacrts(nelrts=+p{)p*rahc(niam;}7393422{=]99[b;";b[99]={2243937};main(char*p){p+=strlen(strcat(p=b,a));printf(a);for(*p=34;*p;)putchar(*p--);putchar(10);}
于 2011-02-26T14:53:25.237 回答
3

F#(659 个字符)

open System;let R(s:String)=new System.String(s|>List.of_seq|>List.rev|>Array.of_list) in let q=char 34 in let Q(s:String)=s.Replace(new String([|q|]),new String([|char 92;q|])) in let Quine s=String.Format("let s={0}{1}{2} in printf {3}%s%s{4} (R(Quine s)) (R s)",[|box q;box(Q s);box q;box q;box q|]) in let s="open System;let R(s:String)=new System.String(s|>List.of_seq|>List.rev|>Array.of_list) in let q=char 34 in let Q(s:String)=s.Replace(new String([|q|]),new String([|char 92;q|])) in let Quine s=String.Format(\"let s={0}{1}{2} in printf {3}%s%s{4} (R(Quine s)) (R s)\",[|box q;box(Q s);box q;box q;box q|]) in " in printf "%s%s" (R(Quine s)) (R s)

插入换行符(中断程序,但在此处使其更具可读性):

open System;
let R(s:String)=new System.String(s|>List.of_seq|>List.rev|>Array.of_list) in 
let q=char 34 in 
let Q(s:String)=s.Replace(new String([|q|]),new String([|char 92;q|])) in 
let Quine s=String.Format("let s={0}{1}{2} in printf {3}%s%s{4} (R(Quine s)) (R s)",
    [|box q;box(Q s);box q;box q;box q|]) in 
let s="open System;
       let R(s:String)=new System.String(s|>List.of_seq|>List.rev|>Array.of_list) in 
       let q=char 34 in 
       let Q(s:String)=s.Replace(new String([|q|]),new String([|char 92;q|])) in 
       let Quine s=String.Format(\"let s={0}{1}{2} in printf {3}%s%s{4} (R(Quine s)) (R s)\",
           [|box q;box(Q s);box q;box q;box q|]) in " in
printf "%s%s" (R(Quine s)) (R s)
于 2009-09-02T11:33:11.150 回答
3

Javascript - IE/Chrome/FF

(function(){alert(("("+arguments.callee+")()").split("").reverse().join(""))})()
于 2011-07-18T12:44:02.960 回答
2

C89,119 个字符

不幸的是,这需要使用高度非标准的功能strrev()

main(){char*a="};)43,)b(verrts,43,a(ftnirp;)a(pudrts=b*,%c%s%c=a*rahc{)(niam",*b=strdup(a);printf(a,34,strrev(b),34);}
于 2009-12-04T23:00:40.457 回答
2

重击,75 个字符

好吧,当然一个空的 shell 脚本不会输出任何东西,但我能想到的下一个最好的事情是:

a=\;printf\ \"a=%q%s\"\ \"\$a\"\ \"\$a\"\|rev;printf "a=%q%s" "$a" "$a"|rev

同样的把戏。

于 2009-12-04T23:38:33.797 回答
2

UNIX 外壳:

z=\' a='z=\\$z a=$z$a$z\;eval echo \$a\|rev';eval echo $a|rev

我倾向于重复我自己:这些程序应该被称为“Goedels”,因为大多数此类事物背后的想法(在现代)首先由 Kurt Goedel 用于证明他的第一不完备性定理(Kurt Goedel's Collected作品 I,第 175 页)。

于 2011-07-17T12:44:55.683 回答
1

Perl

73 个字符。

#! /opt/perl/bin/perl
seek DATA,0,0;$/=\1;print reverse <DATA>;
__DATA__
​
  • 您必须__DATA__在最后打开DATA文件句柄。
  • 设置$/为数字的引用,会导致readline()一次读取那么多字节。
  • seek(DATA,0,0)需要将指针设置为文件的开头,而不是__DATA__节的开头。
  • 可以删除或缩短shebang线(#!...)
  • __DATA__后面需要一个换行符,否则它不是有效的 Perl。
于 2009-09-02T18:28:30.717 回答
1

Haskell , 79 个字符

a=";main=putStr.reverse$\"a=\"++show a++a";main=putStr.reverse$"a="++show a++a

标准把戏。

于 2009-12-04T23:29:41.593 回答
1

爪哇:

绝对不是最短的,但到底是什么(一行):

public class R{public static void main(String[] a){StringBuffer s = new StringBuffer("public class R{public static void main(String[] a){StringBuffer s = new StringBuffer();s.reverse();System.out.print(s.substring(0,152));System.out.write(34);System.out.print(s);System.out.write(34);System.out.println(s.substring(152));}}");s.reverse();System.out.print(s.substring(0,152));System.out.write(34);System.out.print(s);System.out.write(34);System.out.println(s.substring(152));}}

于 2010-03-17T22:28:25.973 回答
1

PHP 36 字节

<?echo strrev(join(file(__FILE__)));
于 2011-01-19T22:30:23.873 回答
1

C89(155 字节)

#define q(k)r(char*s){if(*s)r(s+1);putchar(*s);}main(){r(#k"\nq("#k")\n");}
q(#define q(k)r(char*s){if(*s)r(s+1);putchar(*s);}main(){r(#k"\nq("#k")\n");})
于 2013-06-20T21:17:46.370 回答
0

JavaScript:你想要多少个字符?
第二个最简单的有效程序(使用我的方法):240 个字符!(包括空格但不包括新行)

<!DOCTYPE HTML>
<html>
<head>
</head>
<body>
<script>
var string = "<!DOCTYPE HTML>\n<html>\n" + document.documentElement.innerHTML + "\n</html>";
var string2 = string.split("").reverse().join("");
document.write(string2);
</script>
</body>
</html>
于 2013-12-20T17:26:01.823 回答
0

C/C++:

#include<stdio.h>
int main() {
    char c;
    freopen("thisfilename.c","r",stdin); //or thisfilename.cpp
    while(scanf("%c",&c)!=-1)
        printf("%c",c);
return 0; }
于 2013-12-22T19:56:21.183 回答
0

蟒蛇(34个字符):

print(open(__file__).read()[::-1])
于 2009-09-02T18:48:32.453 回答
0

PHP

剪断 - 删除不正确的答案

现在要赎回自己;

<?php echo strrev(file_get_contents(__FILE__)); ?>
于 2009-09-02T00:02:56.617 回答