Бурлеск, 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