红宝石面试问题

fen*_*nec 13 ruby perl

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

  1. 这是做什么的:

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

Mar*_*off 17

这是打印出"Just another Perl hacker"的Perl代码.

虽然大多数的$_,$=等变量在Ruby中也是可用的,语句如存在$,++表明Perl中,实际上有前和后递增的运营商,不同的Ruby.


我和Vim一起进去,用英语等同替换了所有的符号.我输出了一些东西,因为输出现在是"只是另一个每个黑客"(在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`
Run Code Online (Sandbox Code Playgroud)

  • @Karl:我自己刚刚进行了一些技术访谈,我甚至无法想象采访者在想什么.即使面试官打算说"我只是在开玩笑,这是一个JAPH计划",这在我看来完全不合适.对这段代码所做的事情的了解或理解不会产生什么影响,因为即使用有意义的名称替换符号,它仍然难以理解. (10认同)
  • 很高兴知道!但是,我不明白为什么他们会把这个问题作为面试问题.如果你写Perl就像你正在做一些可怕的错误.. (6认同)
  • >如果你像写那样的Perl你正在做一些可怕的错误.FTFY:如果你写Perl你正在做一些可怕的错误.;) (5认同)

Dav*_*rab 0

无论如何,我不是 Ruby 专家,第一步应该是将其转换为您可以阅读的格式。我把它按行分解了。

`$=`;

$_=\%!;

($_)=/(.)/;

$==++$|;

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

$_++;

$_++;

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

$,++;

$,++;

$^|=$";

`$_$\$,$/$:$;$~$*$%[$?]$.$~$*${#}$%[$?]$;$\$"$^$~$*.>&$=`
Run Code Online (Sandbox Code Playgroud)

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

如果您做不到这一点,也不要感到难过。这似乎毫无意义。编程问题应该尝试测试你的技能,而不是测试你的某些东西,如果有人真的使用它,就意味着应用程序会非常糟糕。