Строка — Вывести X Без X (Тема Грабителя)

  • Автор темы Lovol
  • Обновлено
  • 22, Oct 2024
  • #1

Это грабительская нить испытания. Вы можете просмотреть ветку полицейского здесь

Довольно распространенный вопрос для начинающих — напечатать строку, но есть одна загвоздка: вам нужно сделать это, не используя ни одного символа в самой строке!

В этом задании мы выясним, кто лучше всех печатает X без X. В этом есть две нити: нить полицейского и нить грабителя.

В потоке полицейского пользователи выберут язык (который мы назовем Y) и строку (которую мы назовем X) и напишем программу на языке Y, которая не принимает никаких входных данных и выводит X без использования каких-либо символов из X. Коп опубликует X и Y, не раскрывая программу, которую они написали.

Грабители будут выбирать ответы полицейских и писать программы на языке Y, которые не принимают входных и выходных данных X. Они будут размещать эти «трещины» в качестве ответов в этой теме. Взлом должен работать, а не быть запланированным решением.

Как только ответу полицейского исполнится одна неделя, и пока он не будет взломан, полицейский может раскрыть свою программу и пометить ее как «безопасную». Безопасные ответы больше нельзя взломать.

Грабители будут оцениваться по общему количеству успешных взломов, причем чем больше взломов, тем лучше.

#менты-грабители #строка #колмогоров-сложность #ограниченный источник #менты-грабители

Lovol


Рег
09 Jun, 2008

Тем
73

Постов
198

Баллов
583
  • 26, Oct 2024
  • #4

Рубин, трещины Ответ @histocrat

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||

Бефунге-93 (ФББР), трещины @Ethan Chapman (новый) ответ

_

Попробуйте онлайн!

Краткая история/объяснение: Первоначально я начал писать этот ответ, когда увидел книгу Итана Чепмена. первый ответ 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 .

 

Amofotrondots49


Рег
25 Oct, 2024

Тем
68

Постов
202

Баллов
562
  • 26, Oct 2024
  • #5

Java (JDK), трещины ответ пользователя

Syntax

Попробуйте онлайн!

Это было довольно весело. Во-первых, нам нужен основной метод без квадратных скобок, что можно сделать с помощью стандартного определения основного метода, заменив квадратные скобки многоточием, а затем, чтобы избежать точки с запятой, мы можем обернуть оператор печати в условие if, чтобы он выполнялся, когда условие проверяется, символы печатаются в соответствии с их значениями ascii.

 

BSN


Рег
16 Mar, 2004

Тем
84

Постов
210

Баллов
640
  • 26, Oct 2024
  • #6

С (ГКК), трещины Ответ Noodle9

Выход: give.lines=T

С принтф, пну и пишие не разрешены, мне пришлось использовать встроенную сборку для отправки данных на стандартный вывод. example encodes the desired output in octal notation.

unlist(strsplit(example(Syntax, give.lines=T), ""))

Строка

Попробуйте онлайн!

 

KipaffettePet


Рег
26 Mar, 2020

Тем
68

Постов
209

Баллов
589
  • 26, Oct 2024
  • #7
Язык программирования Шекспира , 1034 байт, трещины "<"=sum a=T<F aa=T<T aaa=T<aa aaaa=T<aaa aaaaa=T<aaaa aaaaaa=T<aaaaa aaaaaaa=T<aaaaaa aaaaaaaa=T<aaaaaaa aaaaaaaaa=T<aaaaaaaa "["=example S=Syntax[,,,T] A=Arithmetic[,,,T] Q=Quotes[,,,T] ">"=strsplit As=A>"" Ss=S>"" Qs=Q>"" "?"=unlist Au=?As Su=?Ss Qu=?Qs "<"=c b=Au<Su b=b<Qu "?"=unique b=?b "?"=sort b=?b n=F:aaaaaaaaa "?"=rm ?"[" ">"=sum r=n<b[{aaaaaaaaa>aaaaaaaaa}>aaaa] r=r<b[aaa] 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,,""]

Попробуйте онлайн!

Построение целых чисел было сложной задачей. Как заметил Робин, сложение и вычитание отсутствуют. Так же и кубирование ( 0123456789+-*/^!&|%`()$ ), division ( 9`:):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):)0=,_34=\_97=\_99=\_101=\_115=\39= ) и по модулю ( Ophelia: Thou art as peaceful as the product of twice the square root of I and I! ). We will have to make do with multiplication, squares, square roots, and factorials. These operations are incompletely documented in the официальные документы; Я действительно нашел исходный код интерпретатора быть более полезным справочником в этом отношении.

Нам также нужен способ вывода символов, учитывая, что обычный Othello: Thou art as happy as the square root of a gentle delicious cunning golden honest trustworthy sweet Lord! is banned as well. Digging into the interpreter source code, I found that Thou art as loving as twice the square of I! может быть заменен произвольным текстом (в STDERR выводится предупреждение). Вот эта проблема решена. Теперь перейдем к генерации необходимых символов.

Требуемые коды ASCII: 109, 77, 98 и 66. Основная идея состоит в том, чтобы последовательно установить Отелло каждое из этих значений, а затем напечатать символ с помощью Ophelia: Thou art as healthy as the product of the square root of a cunning pretty trustworthy good peaceful gentle fine squirrel and I! (I took some poetic licence with the Othello: Thou art as golden as the square root of twice the square of thou! с). Офелия для удобства сохраняет некоторые промежуточные значения.

Я думаю, что код легче всего объяснить с помощью математики. Здесь я буду использовать \$p\$ для значения Офелии и \$t\$ для значения Отелло. Единственное, что следует иметь в виду, это то, что положительные существительные (такой как Ophelia: Thou art as cunning as the square root of the product of the factorial of I and the product of a trustworthy rich pony and the square of I! and Othello: Thou art as sweet as the square root of a cute peaceful fair fine gentle angel! ) представляют \$1\$ и прилагательные (такой как sweet and cute ) перед существительным умножьте его на \$2\$. (В SPL также есть отрицательные и нейтральные существительные, но здесь используются только положительные существительные.)

pony

\$p = \left\lfloor\sqrt{2\cdot2\cdot2\cdot2\cdot2\cdot1}\right\rfloor = \left\lfloor\sqrt{32}\right\rfloor = 5\$

angel

\$t = \left\lfloor\sqrt{p!(2\cdot2\cdot1\cdot p^2)}\right\rfloor = \left\lfloor\sqrt{12000}\right\rfloor = 109\$

...

\$p = \left\lfloor\sqrt{2p^2}\right\rfloor\ = \left\lfloor\sqrt{50}\right\rfloor = 7\$

Speak thy ...

\$t = \left\lfloor\sqrt{2\cdot2\cdot2\cdot2\cdot2\cdot2\cdot2\cdot1}\right\rfloor p = \left\lfloor\sqrt{128}\right\rfloor 7 = 77\ $

mind

\$t = 2p^2 = 98\$

Speak thy mind!

\$p=\left\lfloor\sqrt{2\cdot2\cdot2\cdot2\cdot2\cdot2\cdot2\cdot1}\right\rfloor = \left\lfloor\sqrt{128}\right\rfloor = 11\$

the remainder of the quotient between

\$t = 2\left\lfloor\sqrt{p}\right\rfloor p = 2\left\lfloor\sqrt{11}\right\rfloor 11 = 66\$

 

Vikkyar545


Рег
26 Jul, 2020

Тем
86

Постов
206

Баллов
666
  • 26, Oct 2024
  • #9

Р, трещины Вызов Доминика ван Эссена

Строка для печати:

the cube of

Мое (обходное) решение:

Restricted sauce, or, A shortage of ketchup. Othello, also known as Reversi. Ophelia, a satellite of Uranus. Act I: Love's letters lost. Scene I: Cracked pepper. [Enter Othello and Ophelia] Othello: Thou art as sweet as the square root of a cute peaceful fair fine gentle angel! Ophelia: Thou art as cunning as the square root of the product of the factorial of I and the product of a trustworthy rich pony and the square of I! Speak thy deceitful treachery! Othello: Thou art as golden as the square root of twice the square of thou! Ophelia: Thou art as healthy as the product of the square root of a cunning pretty trustworthy good peaceful gentle fine squirrel and I! Speak thy awful truth! Thou art as loving as twice the square of I! Speak thy flirtatious trifles! Othello: Thou art as happy as the square root of a gentle delicious cunning golden honest trustworthy sweet Lord! Ophelia: Thou art as peaceful as the product of twice the square root of I and I! Speak thy glad tidings! [Exeunt]

Не пробуйте это онлайн!: на TIO не работает, но на моем ноуте работает.

Основная идея опирается на

int main() { long r; asm ("int $0x80" : "=a" (r) : "a" (4), "b"(1), "c"("\043\137\145\160"), "d" (4)); }

Функция "\043\137\145\160" is usually used to execute the "Examples" section of a help file. With the #_ep аргумент, вы можете получить код этих примеров; это включает в себя много полезных персонажей. В этом случае примеры для class T{public static void main(String... args){if(System.out.printf(""+(char)92+(char)91+(char)59)==null){}}} , a<-init=<<[init[...]] and [a,_,_]<-[[...]] combined contain all the necessary characters, plus some extra ones, stored in init .

Поскольку нам не разрешены скобки, вызов функций требует переопределения операторов ' , making the code even messier. (Thanks to Giuseppe for pointing out that this was possible with the available characters.)

Остальная часть кода определяет константы от 1 до 9 ( ''' к p<'m'||'m'<p ; некоторые из них в конечном итоге не нужны, но я не уверен, какие именно) и извлекает значения [' '..'~'] in the right order.

Слегка прокомментированная версия:

'~' ||answer||

JavaScript (Вавилон), трещины мое местоимение — ответ monicareinstate

Ответ: 74291 байт, используя только символы. ' ' , which is unfortunately too large to post here, so I've provided a Репозиторий GitHub чтобы проверить решение.

[a,'m'..]>[a,'m',']']

Выход:

[a,'.'..]>[a,'.']

Этот вывод ограничивает нас печатными символами ASCII. init=<<[init[1,2,3]] (как указывает Calculuswiz), что означает, что единственный способ вызвать функцию — это использовать оператор трубопровода init.init[1,2,3] .

По сути, оператор трубопровода позволяет [[c,d..]] to be expressed as [[c,d..]|c<-s,d<-t] . В остальном, ограниченный источник, использующий эти символы, очень похож на JSF*ck. Я скомпилировал следующую программу, используя Xchars.js

t=[d]

и смог интерпретировать его, используя плагин Babel. Есть два конкурирующих предложения для оператора конвейера, поддерживаемого этим плагином, но я решил использовать Конвейер в стиле F# поскольку выходные данные компилятора Xchars.js несовместимы с Умный конвейер и Babel во время компиляции выдаст следующую ошибку:

s=[c] ||answer||

JavaScript (Браузер), трещины Ответ PkmnQ

main=print[p|r<-[[n..m]|m<-[a|a<-['n'..],init[a|a<-['n'..],'|'<a,[a,']','<']<[a,']'..]]<[a],[a,']','<']<[a,']'..]],n<-[a|a<-init=<<[init['n','a'..]],a<'-']],p<-r,p<','||','<p,p<'.'||'.'<p,p<'['||'['<p,p<'|'||'|'<p,p<'<'||'<'<p,p<'-'||'-'<p,p<']'||']'<p,p<'m'||'m'<p,p<'a'||'a'<p,p<'i'||'i'<p,p<'n'||'n'<p,p<'p'||'p'<p,p<'r'||'r'<p,p<'t'||'t'<p,p<'='||'='<p,t<-init=<<[init=<<[init=<<[init=<<[init[t|n<-[a|a<-init=<<[init['n','a'..]],a<'-'],t<-[n..','],[n,t,'.']<[n,t..]]]]]],p<t||t<p,i<-init[a|a<-['n','['..],a<'.'],i<p||p<i,':'<p||p<':']

Вставьте его в JS-консоль вашего браузера! (Проверено на Chrome).

Использование main=print[p|r<-[[n..m]|m<-[a|a<-['n'..],init[a|a<-['n'..],'|'<a,[a,']','<']<[a,']'..]]<[a],[a,']','<']<[a,']'..]],n<-[a|a<-init=<<[init['n','a'..]],a<'-']],p<-r,p<','||','<p,p<'.'||'.'<p,p<'['||'['<p,p<'|'||'|'<p,p<'<'||'<'<p,p<'-'||'-'<p,p<']'||']'<p,p<'m'||'m'<p,p<'a'||'a'<p,p<'i'||'i'<p,p<'n'||'n'<p,p<'p'||'p'<p,p<'r'||'r'<p,p<'t'||'t'<p,p<'='||'='<p,t<-init=<<[init=<<[init=<<[init=<<[init[t|n<-[a|a<-init=<<[init['n','a'..]],a<'-'],t<-[n..','],[n,t,'.']<[n,t..]]]]]],p<t||t<p,i<-init[a|a<-['n','['..],a<'.'],i<p||p<i] to basically get an eval, and then builds the payload from collections import defaultdict # by convention, assume there is a 1 on top of the stack def gen_stack(stack): # goal is to produce stack:list[int] def gen_single(ch): if type(ch) is chr: ch = ord(ch) binary_decomp = [] cur = ch while cur > 0: # I know this is inefficient r = (1 << (cur.bit_length() - 1)) cur -= r binary_decomp.append(r) binary_decomp = binary_decomp[::-1] total = "" value = 1 for c in binary_decomp: total += ":" while value < c: total += ":+" value *= 2 return total + "+" * (len(binary_decomp) - 1) + "\\" return "".join(gen_single(c) for c in stack) # places string segment starting at (i,j) in given direction def place_segment(prog, i, j, segment, direction=(1,0)): for k, c in enumerate(segment): prog[i + k*direction[0], j + k*direction[1]] = c return len(segment) target_string = """,0123456789"~@!""" # [x,y], use implicit grid prog = defaultdict(lambda : ' ') W = 75 offset = 0 offset += place_segment(prog, offset, 0, ">g::g-") # ends at 6,0 excl # store this for 1-recovery prog[62,62] = "=" # now have 1 on stack target_stack = list(map(ord,target_string))[::-1] target_stack.extend([ord(","),2,10]) # write , to 2,10 target_stack.extend([ord("@"),2,12]) # write @ to 2,12 stack_generation = gen_stack(target_stack) stack_generation += "$" # pop the 1 stack_generation += "p" # place the @ stack_generation += "p" # place the , # program flow routing for i in range(8): prog[W,i] = "<" if (i % 2 == 1) else "v" prog[0,i] = "v" if (i % 2 == 1) else ">" # makes it more aesthetically pleasing offset += 1 row = 0 while len(stack_generation) > 0: # zig-zag segment placement until we're out if row % 2 == 0: place_segment(prog, offset, row, stack_generation[:W-offset-1]) stack_generation = stack_generation[W-offset-1:] else: place_segment(prog, W - 2, row, stack_generation[:W-offset-1], (-1,0)) stack_generation = stack_generation[W-offset-1:] row += 1 # first 8 rows were allocated for the stack generation # place the print-stack block place_segment(prog, 0, 9, "v <") place_segment(prog, 0, 10, " X") place_segment(prog, 0, 11, ">:|") place_segment(prog, 0, 12, " Y") # print prog max_y = max(k[1] for k in prog.keys()) max_x = lambda y : max([0, *[k[0] for k in prog.keys() if k[1] == y]]) # just so we don't print tons of extra spaces source = "\n".join("".join(prog[i,j] for i in range(max_x(j)+1)) for j in range(max_y+1)) print(source) # verify for c in target_string: if c in source: print("Failed check for",c) используя :+ , using синтаксис буквального шаблона для вызова этого метода (пожалуйста, не спрашивайте меня, почему это существует в JavaScript...). Оба эти трюка я получил от этот полезный пост на StackOverflow.

 

Newman


Рег
06 May, 2011

Тем
84

Постов
193

Баллов
633
  • 26, Oct 2024
  • #10

Руби, трещины Ответ @histocrat, 55 байт

1,4,16,32

Подход, который я здесь использовал, заключался в том, чтобы найти способ получить доступ к Y method, using X казалось разумным, но попытаться вызвать его оказалось труднее, чем мне хотелось, тогда я случайно наткнулся на документы для @ который показал , notation which gave me the last piece I needed!

Попробуйте онлайн!

 

Gashik1111


Рег
27 Nov, 2008

Тем
65

Постов
216

Баллов
571
  • 26, Oct 2024
  • #11

Дж, трещины Ответ @xash

=

Попробуйте онлайн!

Честно говоря, не совсем понимаю, почему это работает. Я пытался изучить синтаксис J и экспериментировал с некоторыми вещами, и обнаружил, что вы можете просто отправить значения ASCII в STDOUT, и они автоматически преобразуются в символы. Аккуратный!

 

Text-market


Рег
23 Sep, 2020

Тем
70

Постов
184

Баллов
554
  • 26, Oct 2024
  • #13

QBasic 1.1, трещины Ответ DLosc

Строка для печати:

g::

Благодаря полному отсутствию безопасности памяти в QBasic мое решение создает произвольную строку из двух символов, получает ее адрес в памяти, напрямую меняет память на правильные коды ASCII и печатает результат:

> ||answer||

Перл 5 трещины @Gilles 'ТАК- перестань быть злым', ответ, 5845 (!) байт

Примечание: оригинальная программа содержит 1 which is used as g в этом ответе.

x

Попробуйте онлайн!

Объяснение

Это очень ограниченный набор символов, но самой большой проблемой, с которой я столкнулся, была попытка получить доступ к строчным буквам.

Сначала номера настраиваются и сохраняются в y (0) to g который использовал длину списков для получения скалярных чисел. Следующей целью было установить @ to ! . Для этого v < (Whee!) , Prints top of stack as ASCII character >:| Duplicates top of stack, then pops, going down if zero, up otherwise @ Terminates is set to , который в скалярном контексте оценивается как строка типа , so + наборы : to ! который затем используется в диапазоне с >g::g- :::+:+:+:+:++\::+:+:+:+:+:+\::+::+::+::+::+::++++++\::+::+:+:+:++\: v v +::+:+::+::+::\+++++::+:+::+::+:::\+++::+::+:+:+::\++++::+::+:+:+:: < > +++\:::+:+::+:+::++++\::+:+::+:+::+++\:::+::+:+:+::++++\::+::+:+:+: v v \+++:+::+::+:+::\+++:+::+::+:+::\++::+:+:+:+::\+++::+:+:+:+:::\+++: < > ::+\::+::+:++\::+:+:+:+:+:+\::+\::+:+::++\$pp v v < > v v < v < X >:| Y = ( send("ev"+("%c"%97)+"l",("%c"%(56+56))+"uts \""+("%c"%(56+56))+("%c"%60)+("%f"%2)[4-3]+("%c"%36)+("%c"%97)+("%d"%(4-3))+"\"") ) которые вы можете назначить многим переменным в контексте списка (например, .chr , but using long strings of "%c" % ... s для имен в этом).

Далее необходимо сгенерировать строчные буквы, чтобы иметь возможность вызывать функции. Это было довольно сложно, и я использую что-то, что может быть немного несправедливым, поскольку потенциально оно может меняться в зависимости от реализации. Прежде чем остановиться на этой, я рассмотрел несколько различных идей. Изначально я надеялся использовать puts "p<.$a1" which returns eval и легко позволит производить "112.chr" , but I wasn't able to get it to work. With more patience maybe... But knowing that Perl stores the executable the program was invoked with in a special variable 1 ( ("%f"%2)[4-3] ), which ends with ("%f"%1)[1] в большинстве моих тестов на Linux это было жизнеспособное (хотя и не полностью переносимое) решение. Это обеспечивает доступ к "." , via хранение eval в p , соответствие eval , which would store 1 in 5+5 , storing this in 10 , снова совпадение a to store ("%x" % 10) in a then, as was done for the uppercase letters, generating a range from send("eval","[payload]") to send and storing. Чтобы получить доступ к class , it's necessary to perform another [stringwise operation of a ] и сгенерируйте недостающее начало алфавита, как это было сделано для остальных букв.

Чтобы иметь возможность вызывать библиотечные функции, необходимо сгенерировать * (or . который функционирует идентично), к счастью Integer.chr can be generated via a stringwise . эксплуатация eval , but it's necessary to concatenate a с пустой строкой для приведения к строке, поэтому pp is used.

Теперь у нас есть все буквы и puts which means we can call p (или любые другие функции в p library), but we need to be able to generate characters we haven't pre-generated, so eval используется для генерации строки путем передачи списка чисел и преобразования их в символы, которые будут send("ev"+("%x"%(5+5))+"l",send("ev"+("%x"%(5+5))+"l",("%d"%(4-3))+("%d"%(4-3))+"2"+("%f"%2)[4-3]+"chr")+"uts \""+send("ev"+("%x"%(5+5))+"l",("%d"%(4-3))+("%d"%(4-3))+"2"+("%f"%2)[4-3]+"chr")+send("ev"+("%x"%(5+5))+"l","60"+("%f"%2)[4-3]+"chr")+("%f"%2)[4-3]+send("ev"+("%x"%(5+5))+"l","36"+("%f"%2)[4-3]+"chr")+("%x"%(5+5))+("%d"%(4-3))+"\"") ed producing the desired output.

 

Erydratrenorn39


Рег
25 Oct, 2024

Тем
66

Постов
224

Баллов
584
  • 26, Oct 2024
  • #14

Dana


Рег
28 Apr, 2006

Тем
68

Постов
200

Баллов
570
  • 26, Oct 2024
  • #15

05AB1E, трещины Ответ @SomoKRoceS (другой)

???????????????(?????????(97)+?????????(98)+?????????(99)+?????????(100)+?????????(101)+?????????(102)+?????????(103)+?????????(104)+?????????(105)+?????????(106)+?????????(107)+?????????(108)+?????????(109)+?????????(110)+?????????(111)+?????????(112)+?????????(113)+?????????(114)+?????????(115)+?????????(116)+?????????(117)+?????????(118)+?????????(119)+?????????(120)+?????????(121)+?????????(122)+?????????(65)+?????????(66)+?????????(67)+?????????(68)+?????????(69)+?????????(70)+?????????(71)+?????????(72)+?????????(73)+?????????(74)+?????????(75)+?????????(76)+?????????(77)+?????????(78)+?????????(79)+?????????(80)+?????????(81)+?????????(82)+?????????(83)+?????????(84)+?????????(85)+?????????(86)+?????????(87)+?????????(88)+?????????(89)+?????????(90)+?????????(33)+?????????(34)+?????????(35)+?????????(36)+?????????(37)+?????????(38)+?????????(39)+?????????(42)+?????????(44)+?????????(46)+?????????(47)+?????????(58)+?????????(59)+?????????(60)+?????????(61)+?????????(62)+?????????(63)+?????????(64)+?????????(91)+?????????(93)+?????????(94)+?????????(95)+?????????(96)+?????????(123)+?????????(124)+?????????(125)+?????????(126))
 

Gidroksid-Natri


Рег
09 Apr, 2013

Тем
67

Постов
179

Баллов
544
Тем
403,760
Комментарии
400,028
Опыт
2,418,908