Бурлеск, 40 байт
ri#Q2 SH ~- "ri#Q" \/ .+ j "<-" ps if sh
Пояснення:
Бурлеск має вдосконалені вбудовані модулі стека та коду. Насправді ви не можете отримати доступ до вихідного коду програми, але ви можете отримати доступ до решти коду, який повинен бути виконаний у майбутньому. Це означає #Q
, що поверне весь код, який слідує за ним, тому ми повинні додати все #Q
до того коду, з яким ми робимо ri#Q
.
blsq ) #Q1 2++
12 -- this is the result of 1 2++
{1 2 ++} -- this is the result of #Q
++1 2
є технічно незаконнім кодом, оскільки він заснований на стеці. Але ми можемо маніпулювати кодом, щоб змусити його виконувати як 1 2++
:
blsq ) #Q<-#q++1 2
12
Робота з цими вбудованими версіями неймовірно складна, і ніхто ще не використовував їх для чогось продуктивного, крім справ, пов’язаних із королевою. Якщо ви реверсуєте, ++1 2
ви отримуєте те, 2 1++
що виробляло б, 21
а ні 12
. Причина, яку створює код вище, 12
полягає в тому, що він #Q
також включає <-
так, що ми зрештою виконуємо набагато більше, ніж просто 2 1++
: p. Ми закінчуємо виконувати те, 2 1++#q<-
що виробляє 12
.
Насправді ми можемо замінити речі в нашому коді, наприклад, цей код замінює всі виникнення ?+
в собі?*
blsq ) #Q(?+)(?*)r~5.-#q5 5?+
25
Використання:
$ echo "1" | blsq --stdin 'ri#Q2 SH ~- "ri#Q" \/ .+ j "<-" ps if sh'
hs fi sp "-<" j +. /\ "Q#ir" -~ HS 2Q#ir
$ echo "0" | blsq --stdin 'ri#Q2 SH ~- "ri#Q" \/ .+ j "<-" ps if sh'
ri#Q2 SH ~- "ri#Q" \/ .+ j "<-" ps if sh