Рубинский вопрос интервью
Я получил этот вопрос в предыдущем интервью и не смог его сделать, любая идея?
-
Что это делает:
`$=`;$_=\%!;($_)=/(.)/;$==++$|;($.,$/,$,,$\,$",$;,$^,$#,$~,$*,$:,@%)=(
$!=~/(.)(.).(.)(.)(.)(.)..(.)(.)(.)..(.)......(.)/,$"),$=++;$.++;$.++;
$_++;$_++;($_,$\,$,)=($~.$"."$;$/$%[$?]$_$\$,$:$%[$?]",$"&$~,$#,);$,++
;$,++;$^|=$";`$_$\$,$/$:$;$~$*$%[$?]$.$~$*${#}$%[$?]$;$\$"$^$~$*.>&$=`
Ответы
Ответ 1
Это код Perl, который выводит "Просто другой хакер".
В то время как большинство переменных $_
, $=
и т.д. доступны также в Ruby, наличие таких операторов, как $,++
, указывает Perl, у которого фактически есть операторы pre и post-increment, в отличие от Ruby.
Я вошел с Vim и заменил все символы на английский эквивалент. Я что-то перепутал, так как результат теперь "просто другой Per hacker" (отсутствует L на Perl), но вот что я придумал:
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`
Ответ 2
Здесь я изменил все специальные глобулы 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. Я не думаю, что это Рубин. Это похоже на гибрид языков.
Ответ 3
Я не являюсь экспертом Ruby любыми средствами на первом шаге, должен превращать его в формат, который вы можете прочитать. Я сломал его по очереди.
`$=`;
$_=\%!;
($_)=/(.)/;
$==++$|;
($.,$/,$,,$\,$",$;,$^,$#,$~,$*,$:,@%)=($!=~/(.)(.).(.)(.)(.)(.)..(.)(.)(.)..(.)......(.)/,$"),$=++;$.++;$.++;
$_++;
$_++;
($_,$\,$,)=($~.$"."$;$/$%[$?]$_$\$,$:$%[$?]",$"&$~,$#,);
$,++;
$,++;
$^|=$";
`$_$\$,$/$:$;$~$*$%[$?]$.$~$*${#}$%[$?]$;$\$"$^$~$*.>&$=`
Я обманул и попытался запустить его, и он не работает. Я получаю неожиданную ошибку null.
Не чувствуйте себя плохо, если вы не можете этого сделать. Это кажется бессмысленным. Вопросы программирования должны пытаться проверить ваши навыки, а не тестировать вас на что-то, что если кто-то действительно использует это, это будет означать, что приложение будет действительно плохо.
Ответ 4
Это выглядит ближе к Perl, если честно, но в любом случае довольно бессмысленно.
Ответ 5
Не связано с Ruby. Я думаю, что над закодированным сообщением указано https://en.wikipedia.org/wiki/Just_another_Perl_hacker с помощью только знаков препинания. Здесь также предоставляется еще одна.
''=~('(?{'.('-)@.)@_*([]@[email protected]/)(@)@[email protected]),@(@@[email protected])'
^'][)@]`}`]()`@[email protected]]@%[`}%[@`@!#@%[').',"})')