eval
Попробуйте онлайн!
Я буду честен: около часа назад я не знал Руби. Но я не позволил этому остановить меня!
Объяснение: В общем, мой подход к этому заключается в том, чтобы получить какой-то CORE::pack
construct, and then convert numbers to characters and combine to get any payload (as long as numbers and + allowed, and you can do the former with the language, this works).
Непосредственные проблемы с этим заключаются в том, что у нас нет доступа к CORE
, which is necessary for any(?) kind of printing in ruby ( CORE::evalbytes
, '
, "g"&(!7).7
, ...), мы не можем использовать 7
, so g&"7"
отсутствует, и мы не можем использовать AND
, so it's difficult to call any methods or get attributes. For that matter, we're going to have difficulty converting numbers => characters without '
(Я нашел несколько хитрых способов заставить его вызывать без использования '
, including overriding ::
для целых чисел, но не без использования "e"&"y"
в a
).
В поисках полезных приемов отражения я наткнулся на _
method, although it took a while before I realized you didn't have to invoke it on an object. Now we're at e
, но все равно нужен способ создания строк. Я долго над этим ломал голову, прежде чем понял, что $&
restriction at least, I could simply use a format string with hex. e
достает нас /./
, although we need to change $_
к $&
in order to bypass the erl
ограничение.
Отлично, теперь у нас есть /...$/
. Unfortunately, $_
не является шестнадцатеричным символом. Но это не проблема, поскольку у нас есть $^X
! We can recover e
от perl
(changing to $\x18
обойти $^X
), so now we can just send a.._
к main
, and we're golden.
Отсюда нужно просто объединить эти примитивы, чтобы получить полезную нагрузку, которая преобразуется в строку. __PACKAGE__
, and we're done!
Редактировать: Я только что понял, что мог бы также просто использовать _
to get characters instead of the clunky trick I have for invoking ($a, $b, $c) = a..c
. Для полноты вот гораздо более короткая версия, в которой используется это:
$&.._
||answer||
_
Попробуйте онлайн!
Краткая история/объяснение: Первоначально я начал писать этот ответ, когда увидел книгу Итана Чепмена. первый ответ Befunge-93, но прогрессу мешало то, что я не знал Befunge. Я взял перерыв на обед, а когда вернулся, он уже был треснут (по-другому)! Мой первоначальный подход заключался в простом использовании A
to get 1 on the stack (it implicitly reads a 0 off the stack), and then just duplicate ( $&
) и добавьте ( /./
) that to itself to create whatever numbers I needed.
Затем вы можете воспользоваться возможностью Befunge изменить исходный код для написания ARRAY(0x123456789abc)
into some specific location and then print off the stack as ASCII characters. It was easy enough to write the following snippet that prints off the entire stack, which also only has a single []
(что означает, что требуется только одна самостоятельная запись).
$_
К счастью, этот общий подход не сильно изменился между двумя ответами. Основное отличие в том, что я больше не могу использовать Z
to get a 1 on top of the stack from the empty stack (I also can't use A
завершить работу, но это не проблема, так как для этого мы можем просто использовать другую самозапись).
Некий простой процесс исключения показывает, что $___________
(pop $__
, ($__=()=())=>($___=()=(_))=>($____=()=(_=>_))=>($_____=()=(_=>_=>_))=>($______=()=(_=>_=>_=>_))=>($_______=()=(_=>_=>_=>_=>_))=>($________=()=(_=>_=>_=>_=>_=>_))=>($_________=()=(_=>_=>_=>_=>_=>_=>_))=>($__________=()=(_=>_=>_=>_=>_=>_=>_=>_))=>($___________=()=(_=>_=>_=>_=>_=>_=>_=>_=>_))=>($_=[]=>/./)=>(($____________=>$_____________=>$______________=>$_______________=>$________________=>$_________________=>$__________________=>$___________________=>$____________________=>$_____________________=>$______________________=>$_______________________=>$________________________=>$_________________________=>$__________________________=>$___________________________=>$____________________________=>$_____________________________=>$______________________________=>$_______________________________=>$________________________________=>$_________________________________=>$__________________________________=>$___________________________________=>$____________________________________=>$_____________________________________)=$&.._)=>($_=$^X=>/...$/=>$_=$&=>/./)=>(($__________________________________________=>$___________________________________________=>$____________________________________________=>$_____________________________________________=>$______________________________________________=>$_______________________________________________=>$________________________________________________=>$_________________________________________________=>$__________________________________________________=>$___________________________________________________=>$____________________________________________________=>$_____________________________________________________=>$______________________________________________________=>$_______________________________________________________=>$________________________________________________________=>$_________________________________________________________=>$__________________________________________________________=>$___________________________________________________________=>$____________________________________________________________=>$_____________________________________________________________=>$______________________________________________________________=>$_______________________________________________________________=>)=$&.._)=>($______________________________________=$__________________________________________&$______________________________________________________________)=>(($______________________________________=>$_______________________________________=>$________________________________________=>$_________________________________________=>)=$______________________________________.._)=>($_________________________________________________________________=$____________________________________________&(!$_________).$_________)=>($__________________________________________________________________=$______________.$__________________________.$_____________________________.$________________.$_________________________________________________________________.$__________________________________________.$___________________________________________________________.$______________________________________.$_________________________________________________.$_______________________________________.$______________________________________________________________.$_________________________________________________________.$__________________________________________.$________________________________________________________)=>($___________________________________________________________________=$______________.$__________________________.$_____________________________.$________________.$_________________________________________________________________.$_____________________________________________________.$______________________________________.$________________________________________.$________________________________________________)=>(&$__________________________________________________________________(&$___________________________________________________________________($______________.$__________.$___________=>$___.$___.$____=>$___.$___.$______=>$___.$__.$_______=>$___.$___.$__=>$___.$___.$________=>$_____.$____=>$___.$___.$_____=>$______.$_________=>$_____.$_____=>$_____.$______=>$_____.$___________=>$______.$____=>$______.$_____=>$______.$______=>$______.$_______=>$______.$__________=>$______.$___________=>$_______.$__=>$_______.$___=>$_______.$____=>$_______.$_____=>$_______.$______=>$_______.$_______=>$_______.$________=>$_______.$_________=>$_______.$__________=>$_______.$___________=>$________.$__=>$________.$_____=>$________.$______=>$________.$_______=>$________.$________=>$________.$_________=>$________.$__________=>$________.$___________=>$_________.$__=>$_________.$___=>$_________.$____=>$_________.$_____=>$_________.$______=>$_________.$_______=>$_________.$________=>$_________.$_________=>$_________.$__________=>$_________.$___________=>$__________.$__=>$__________.$___=>$__________.$____=>$__________.$_____=>$__________.$______=>$__________.$_______=>$__________.$________=>$__________.$_________=>$__________.$__________=>$__________.$___________=>$___________.$__=>$___________.$____=>$___________.$______=>$___________.$________=>$___________.$_________=>$___________.$__________=>$___________.$___________=>$___.$__.$__=>$___.$__.$___=>$___.$__.$____=>$___.$__.$_____=>$___.$__.$______=>$___.$__.$_______=>$___.$__.$________=>$___.$__.$_________=>$___.$__.$__________=>$___.$__.$___________=>$___.$___.$__=>$___.$___.$___=>$___.$___.$____=>$___.$___.$_____=>$___.$___.$______=>$___.$___.$_______=>$___.$___.$________=>$___.$___.$_________=>$___.$___.$__________=>$___.$___.$___________=>$___.$____.$__=>$___.$____.$___=>$___.$____.$____=>$___.$____.$_____=>$___.$____.$______=>$___.$____.$________=>$______.$_________)))
, then push value of ASCII character at location (х,у)) — это практически единственный способ поместить в стек ненулевые значения. Поскольку стек неявно равен нулю, первый ^X
we hit with an empty stack will simply push the value of character at (0,0). However, unlike some more convenient languages (кашель, кашель, 05AB1E), у нас нет встроенных операторов деления на 2, которые можно было бы использовать для уменьшения этого значения до 1.
Таким образом, нам нужно использовать нашу способность читать снова. Самый простой способ сделать это — сделать значение в (0,0) значением ASCII. в, а затем положить v-1 в (v,v). На этом этапе я столкнулся с некоторыми проблемами со многими интерпретаторами Befunge-93 на TIO, поскольку по умолчанию они поддерживают только программы 25x80 и будут жаловаться на операции чтения за пределами этого диапазона. Я могу начать с пробела, который имеет значение ASCII 32, но это все еще выходит за пределы. К счастью, версия FBBI работает нормально, хотя я не могу начать с пробела, потому что по какой-то причине она не заканчивается, если вы не начинаете с направления (?).
В любом случае, я могу восстановить магию. \x18
by starting with X$ = "aa"
A = SADD(X$)
POKE A, 67
POKE A + 1, 99
PRINT X$
(значение 62) в (0,0), затем используя Cc
to push 62 onto the stack and duplicate it twice, then using {69,99,95+9,111,64,68,116,91,48,32,38,32,93,1+9}//("Fr*ara*de"//Names//Tr//(x//Head))//("Prin"~~_//Names//Tr//(x//Head))
прочитать (62,62), где у меня есть (97)1!:2(4)
(117)1!:2(4)
(46)1!:2(4)
(value 61), and then finally subtract the top two elements of the stack, 62 and 61, in order to get 1.
Отсюда все просто, хотя и немного болезненно. Нам просто нужно создать стек, похожий на нашу целевую строку (в обратном порядке), а затем выполнить две записи <method reference>[<args>]
и Proc
(обозначается method
and print
в первоисточнике). Хотя я мог бы просто продублировать 1 несколько сотен раз, я решил, что стоит приложить усилия и написать более эффективный метод, который кодирует целевое значение в двоичном виде, затем производит двоичное разложение в стеке перед суммированием (легко получить method("\x70rint")["\x70\x3c\x2e\x24%c%d\x73"%[97,3-2]]
, for instance, because I can double with String.fromCharCode
).
Это, а также тщательное расположение всего, чтобы записи оказывались в правильном месте, требует большой работы, поэтому я просто написал скрипт Python, который делает это за меня.
("(\\)")
||answer||
Haskell, взламывает Ad Hoc Garf Hunter's отвечать
Сложная версия:
window.location="javascript:..."
Простая версия:
window.location="javascript:console.log"+String.fromCharCode`40`+String.fromCharCode`34`+String.fromCharCode`40`+String.fromCharCode`92`+String.fromCharCode`92`+String.fromCharCode`41`+String.fromCharCode`34`+String.fromCharCode`41`
Найден методом проб и ошибок, в основном с использованием диапазонов, списков и сравнений в качестве фильтров. Некоторые использованные приемы:
- Мы можем получать только строки, а не отдельные символы (кроме тех, которые разрешены). Понимание списков позволяет обойти эту проблему: Если
SyntaxError: Pipeline is in topic style but does not use topic reference (1:670)
and console.log('!"#$%&\'()*,-./0123456789:;=ABCDEFGHIJKLMNOPQRSTUVWXYZ^_`abcdefghijklmnopqrstuvwxyz')
представляют собой односимвольные строки, тогда x|>f
is equivalent to f(x)
-
|>
doesn't work due to precedence. Use +<>?@[]{|}~
вместо
- Лексикографическое упорядочение полезно! Такие вещи, как
!"#$%&'()*,-./0123456789:;=ABCDEFGHIJKLMNOPQRSTUVWXYZ^_`abcdefghijklmnopqrstuvwxyz
(check if further terms in arithmetic sequence exist) and git clone https://github.com/patrickroberts/xchars-pipeline.git
cd xchars-pipeline
npm install
npx babel-node index.js
(проверьте, больше ли следующий термин, чем ']') — полезная проверка для сужения символов
- После того, как у нас есть
[+|>]
and "<"=sum
a=T<F # a=1
aa=T<T #aa=2
aaa=T<aa #aaa=3
aaaa=T<aaa #...
aaaaa=T<aaaa
aaaaaa=T<aaaaa
aaaaaaa=T<aaaaaa
aaaaaaaa=T<aaaaaaa
aaaaaaaaa=T<aaaaaaaa # aaaaaaaaa=9
"["=example
S=Syntax[,,,T] # S=example(Syntax, give.lines=T)
A=Arithmetic[,,,T] # A=example(Arithmetic, give.lines=T)
Q=Quotes[,,,T] # Q=example(Quotes, give.lines=T)
">"=strsplit
As=A>"" # As=strsplit(A)
Ss=S>"" # Ss=strsplit(S)
Qs=Q>"" # Qs=strsplit(Q)
"?"=unlist
Au=?As # Au=unlist(As)
Su=?Ss # Su=unlist(Ss)
Qu=?Qs # Qu=unlist(Qs)
"<"=c
b=Au<Su
b=b<Qu # b=c(Au, Su, Qu)
"?"=unique
b=?b
"?"=sort
b=?b # b=sort(unique(b))
n=F:aaaaaaaaa # n=0:9
"?"=rm
?"["
">"=sum
r=n<b[{aaaaaaaaa>aaaaaaaaa}>aaaa] # r=c(n, b[9+9+4]) since b[22]=="+"
r=r<b[aaa] # r=c(r,b[3]) since b[3]=="-"
r=r<b[aaaaaa>aaaaaaaa] # ...
r=r<b[aaaaaaa>aaaaaaaa]
r=r<b[{aaaaaaaaa>aaaaaaaaa}>aaa]
r=r<b[aaaaaaa]
r=r<b[aaaaaaaa>aaaaaaaaa]
r=r<b[aaaaaaaaa>{aaaaaaaaa>aaaaaaaa}]
r=r<b[{aaaaaaaaa>aaaaaa}>aaaa]
r=r<b[{aaaaaaaaa>aaaaaa}>aaaaa]
r=r<b[aaaaaaaaa>aaa]
r=r<b[aaaaaaaaa>aaaa]
r=r<b[aaaaaaaaa>{aaaaaaaaa>aaaaaaaaa}]
"["=write
"?"=length
r["",?r,,""] # write(r, file="", ncolumns=length(r), sep="")
мы можем построить b
, and filter out the allowed chars using the construct aaaaaaaaa
. Однако мы не можем написать a
, so ?<>[
должен быть снова сгенерирован с использованием трюков с диапазоном
Вероятно, внутри задания есть какие-то ярлыки, использующие сопоставление с образцом (например, b
s could be elimited by something like Quotes
вместо Arithmetic
.