红宝石面试问题

时间:2010-07-16 21:13:27

标签: ruby perl

我在之前的一次采访中得到了这个问题而无法做到这一点,任何想法?

  1. 这是做什么的:

    `$=`;$_=\%!;($_)=/(.)/;$==++$|;($.,$/,$,,$\,$",$;,$^,$#,$~,$*,$:,@%)=( 
    $!=~/(.)(.).(.)(.)(.)(.)..(.)(.)(.)..(.)......(.)/,$"),$=++;$.++;$.++; 
    $_++;$_++;($_,$\,$,)=($~.$"."$;$/$%[$?]$_$\$,$:$%[$?]",$"&$~,$#,);$,++ 
    ;$,++;$^|=$";`$_$\$,$/$:$;$~$*$%[$?]$.$~$*${#}$%[$?]$;$\$"$^$~$*.>&$=` 
    

5 个答案:

答案 0 :(得分:17)

这是Perl代码,打印出“Just another Perl hacker。”

虽然大多数$_$=等变量也可以在Ruby中使用,但是$,++等语句的存在表明Perl实际上有pre-post和post -increment运算符,与Ruby不同。


我接受了Vim并用English等价物替换了所有符号。我输出了一些东西,因为输出现在是“只是另一个每个黑客”(错过了Perl上的L),但这就是我想出的:

use English;
`$FORMAT_LINES_PER_PAGE`;
$ARG=\%!;($ARG)=/(.)/;$FORMAT_LINES_PER_PAGE=++$OUTPUT_AUTOFLUSH;
($INPUT_LINE_NUMBER,$/,$OUTPUT_FIELD_SEPARATOR,$OUTPUT_RECORD_SEPARATOR,$LIST_SEPARATOR,$SUBSCRIPT_SEPARATOR,$FORMAT_TOP_NAME,$OFMT,$FORMAT_NAME,$MULTILINE_MATCHING,$FORMAT_LINE_BREAK_CHARACTERS,@%)=(
$!=~/(.)(.).(.)(.)(.)(.)..(.)(.)(.)..(.)......(.)/,$LIST_SEPARATOR),$FORMAT_LINES_PER_PAGE++;
$INPUT_LINE_NUMBER++;
$INPUT_LINE_NUMBER++; $ARG++;$ARG++;
($ARG,$OUTPUT_RECORD_SEPARATOR,$OUTPUT_FIELD_SEPARATOR)=($FORMAT_NAME.$LIST_SEPARATOR."$SUBSCRIPT_SEPARATOR$/$FORMAT_PAGE_NUMBER[$CHILD_ERROR]$ARG$OUTPUT_RECORD_SEPARATOR$OUTPUT_FIELD_SEPARATOR$FORMAT_LINE_BREAK_CHARACTERS$FORMAT_PAGE_NUMBER[$CHILD_ERROR]",$LIST_SEPARATOR&$FORMAT_NAME,$OFMT,);
$OUTPUT_FIELD_SEPARATOR++ ;
$OUTPUT_FIELD_SEPARATOR++;
$FORMAT_TOP_NAME|=$LIST_SEPARATOR;
`$ARG$OUTPUT_RECORD_SEPARATOR$OUTPUT_FIELD_SEPARATOR$/$FORMAT_LINE_BREAK_CHARACTERS$SUBSCRIPT_SEPARATOR$FORMAT_NAME$MULTILINE_MATCHING$FORMAT_PAGE_NUMBER[$CHILD_ERROR]$INPUT_LINE_NUMBER$FORMAT_NAME$MULTILINE_MATCHING${#}$FORMAT_PAGE_NUMBER[$CHILD_ERROR]$SUBSCRIPT_SEPARATOR$OUTPUT_RECORD_SEPARATOR$LIST_SEPARATOR$FORMAT_TOP_NAME$FORMAT_NAME$MULTILINE_MATCHING.>&$FORMAT_LINES_PER_PAGE`

答案 1 :(得分:1)

在这里,我将所有特殊的Ruby全局变为单字母变量并插入了一些空格:

`a`
n = \%!
(n) = /(.)/
a = ++o
(b, c, d, f, e, g, h, i, j, k, l, @%) = (m =~ /(.)(.).(.)(.)(.)(.)..(.)(.)(.)..(.)......(.)/, e), a++
b++
b++
n++
n++
(n, f, d) = (j . e . "gcp[q]nfdlp[q]", e & j, i,)
d++
d++
h |= e
`nfdclgjkp[q]bjk${#}p[q]gfehjk.>&a`

写这篇文章的人不懂Ruby。 Ruby中没有增量运算符。像\%!@%这样的标记在Ruby中没有任何意义。您不能在字符串或反引号命令中插入变量,甚至全局变量,如"$="中所示。点.不是Ruby中的连接运算符。我不认为这是Ruby。它就像语言的混合。

答案 2 :(得分:0)

我不是第一步的Ruby专家,应该把它变成你可以阅读的格式。我把它分开了。

`$=`;

$_=\%!;

($_)=/(.)/;

$==++$|;

($.,$/,$,,$\,$",$;,$^,$#,$~,$*,$:,@%)=($!=~/(.)(.).(.)(.)(.)(.)..(.)(.)(.)..(.)......(.)/,$"),$=++;$.++;$.++; 

$_++;

$_++;

($_,$\,$,)=($~.$"."$;$/$%[$?]$_$\$,$:$%[$?]",$"&$~,$#,);

$,++;

$,++;

$^|=$";

`$_$\$,$/$:$;$~$*$%[$?]$.$~$*${#}$%[$?]$;$\$"$^$~$*.>&$=`

我作弊并试图运行它,但它不起作用。我收到意外的空错误。

如果你不能这样做,不要心疼。这似乎毫无意义。编程问题应该尝试测试你的技能而不是测试你的东西,如果有人真正使用它将意味着应用程序将非常糟糕。

答案 3 :(得分:0)

老实说,这看起来更接近Perl,但无论如何都非常荒谬。

答案 4 :(得分:0)

与Ruby无关我认为,上面编码的消息是在https://en.wikipedia.org/wiki/Just_another_Perl_hacker仅在标点符号的帮助下给出的。另外还提​​供了另一个。

''=~('(?{'.('-)@.)@_*([]@!@/)(@)@-@),@(@@+@)'
^'][)@]`}`]()`@.@]@%[`}%[@`@!#@%[').',"})')