Обратные кавычки-Куайн


29

Перспектива этой проблемы:

  • Если ваша программа работает нормально, весь код в речевых метках ( "- двойные кавычки) должен быть напечатан.
  • Если ваша программа заключена в двойные кавычки (в свою очередь, инвертирует речевые метки), код, который обычно не в кавычках, должен быть напечатан.

Например:

Допустим, у вас есть следующий код:

fancyStuff("myCode"); "I like".isGreat();

Если бы я запустил его, я бы ожидал вывод:

myCode
I like

Однако, если бы я обернул это в кавычки, я получил бы:

"fancyStuff("myCode"); "I like".isGreat();"

Когда этот код выполняется, ожидаемый результат будет:

fancyStuff(
); 
.isGreat();

Очевидно, что приведенный выше пример не является функциональным ответом ни на одном языке. Ваша задача - написать код, который работает таким образом.

правила

  • Применяются стандартные лазейки.
  • Напечатанные значения, как в кавычках, так и в кавычках, должны быть непустыми или состоять исключительно из пробелов. Это также означает, что все программы должны включать хотя бы один набор цитат.
  • Однако, пробел / предшествующий пробел разрешен.
  • Не смотрите на свой собственный код, необходимые имена файлов и т. Д.
  • Несовпадающие цитаты запрещены
  • Если есть несколько строк, они могут быть напечатаны как новые строки (как в примере), или в некоторых других удобочитаемых человеком способом, - без массивов или объектов
  • Это , поэтому выигрывает самый короткий ответ в байтах.

Допускаются ли несопоставимые кавычки, и если да, то как с ними обращаться?
отрицательное семь

3
@GezaKerecsenyi Итак, требуется ли разделитель, или мы можем просто объединить строки?
Эрик Outgolfer

9
Как массив не читаемый человеком формат?
Пшеничный волшебник

4
Должны ли строки выводиться в том же порядке, в каком они появляются в нашем коде?
лохматый

1
Я думаю, что это было бы немного сложнее, если бы вам пришлось печатать то, чего не было в кавычках
Джо Кинг,

Ответы:


28

Python 2 , 20 байт

print";print'print'"

-7 байт благодаря тш

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


Старый ответ:

Python 2 , 27 байт

'';print";print 2*"'';print

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

Ход мыслей за этим ответом:

Начните с простой печати, потому что нам нужно что-то напечатать .

print"a"

Нам также нужно что-то напечатать в перевернутом кейсе, т.е. есть печать внутри кавычек.

print"print"

Неинвертированный случай довольно хорош в этой точке. Давайте сосредоточимся на перевернутом случае. Теперь мы начнем со строки print, за которой не может сразу следовать оператор print. Давайте исправим это с помощью точки с запятой.

print";print"

Хорошая вещь. За исключением того, что инвертированный код на самом деле ничего не печатает. Нам нужно будет печатать printв начале, потому что он заканчивается в кавычках, но также печатать все, что идет после второй кавычки, потому что он тоже заканчивается в кавычках. Очевидный способ обойти это - добавить printи умножить последнюю строку на 2.

print";print 2*"print

Теперь инвертированный код работает нормально, хотя мы должны с осторожностью относиться к тому, что раздел перед первой цитатой и раздел после второй цитаты должны оставаться неизменными в течение будущих изменений. Что касается неинвертированного кода, он генерирует синтаксическую ошибку - еще раз, мы должны ввести точку с запятой для разделения выражений.

;print";print 2*";print

Python на самом деле не нравится внешний вид этой одиночной точки с запятой, поэтому мы должны утолить голод змеи двумя одинаковыми выражениями no-op, вставленными перед первой и последней точкой с запятой. Большинство выражений будет работать нормально в первом случае, но во втором случае оно должно следовать print";print 2*"в неинвертированном коде, ничего не нарушая. Мы можем использовать '', который просто объединяется с предыдущей строкой.

'';print";print 2*"'';print

5
print(";print('print()');")также 27 байтов, а также Python 3.
Tsh

2
@tsh Этот код демонстрирует 20-байтовое решение Python 2, которое должно было быть задним числом, очень приятно!
отрицательное семь

19

CSS, 66 байт

body:after{content:"{}body:after{content:'body:after{content:}'}"}

"body:after{content:"{}body:after{content:'body:after{content:}'}"}"

CSS решает не так много вопросов ...


Кажется, что body:afterтакже работает на некоторых реализациях?
Шиеру Асакото

@ShieruAsakoto Вы правы. :afterдоступно в большинстве браузеров по причине обратной совместимости
tsh

@ Shaggy Но трудно определить, как «обернуть ваш исходный код в кавычки» работает, когда предоставляются HTML и CSS.
Чт

@tsh Все хорошо - я не указал в правилах несколько файлов, так как не ожидал такого уникального ответа!
Геза Кереценый

10

HQ9 + [см. Примечания ниже] , 1016 байт

"Привет, мир""""""""""""""""""""""""""""""""""""""""""""""" «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «»»«» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «»»«» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «»»«» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «»»«» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «»»«» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «»»«» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» """"""""""""""""""""""""""""""""""""""Привет, мир«» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» """""""""""""""""""""""""""""""""""Привет, мир«» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» """""""""""""""""""""""""""""""""""Привет, мир«» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» """"""""""""""""""""""""""""Привет, мир«» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» """"""""""""""""""""""""""""Привет, мир«» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» """""""""""""""Привет, мир«» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» """""""""""""""Привет, мир«» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» """"""""""""""""""""""""""""""""""""""Привет, мир«» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» """"""""""""""""""""""""""""""""""""""Привет, мир"""""""""""""""""""""""""""""""""""Привет, мир"""""""""""""""""""""""""""""""""""Привет, мир

Используйте реализацию на https://esolangs.org/w/index.php?title=HQ9%2B&oldid=59995 и скомпилируйте интерпретатор с MinGW GCC 5.3.0 для Windows. Я не уверен, работает ли он с другой версией компилятора, так как для завершения программы требуется неопределенное поведение C. Длина буфера составляет 1000 байт. И исходный код больше 1000 байтов делает свое дело. Я не уверен, как это случилось.


7
Возможно, это самый длинный ответ HQ9 + на этом сайте. (?)
TSH

1
«неопределенное поведение C требуется для завершения программы» неопределенное поведение не определено : оно может делать все что угодно.
Соломон Уцко

В соответствии со страницей 4 стандарта C18 : «Возможное неопределенное поведение варьируется от полного игнорирования ситуации с непредсказуемыми результатами до поведения во время перевода или выполнения программы документированным образом, характерным для среды (с выдачей диагностического сообщения или без него). ), чтобы прекратить перевод или выполнение (с выдачей диагностического сообщения). "
Соломон Уцко

@SolomonUcko Но мы определяем язык его компилятором / интерпретатором на этом сайте. И ответ хороший, если хотя бы один компилятор / интерпретатор может дать правильный результат.
TSH

9

05AB1E , 4 байта

"A"§

Выходы объединены без разделителя.

Попробуйте онлайн или попробуйте онлайн с окружающими цитатами .

Объяснение:

        # Program without surrounding quotes will output string "A"
"A"     # Push "A" to the stack
   §    # Cast it to a string
        # (output the top of the stack implicitly as result)

        # Program with surrounding quotes will output string "§"
""      # Push an empty string to the stack
  A     # Push the alphabet to the stack: "abcdefghijklmnopqrstuvwxyz"
   "§"  # Push "§" to the stack
        # (output the top of the stack implicitly as result)

К сожалению, это нарушает правило № 2. Хотя в вашем коде может быть несколько пустых кавычек, должна быть хотя бы одна непустая в окруженных и необоснованных формах.
Геза Кереценый

@GezaKerecsenyi К сожалению, прочитайте часть " в кавычках и в кавычках ". Должно быть исправлено сейчас.
Кевин Круйссен

6

Japt , 4 байта

"P"s

Попробуйте это без кавычек или цитаты

Pпеременная Japt для пустой строки, и sметод разрезает строку - без каких-либо аргументов он ничего не делает.


Или немного менее тривиально:

"+"u

Попробуйте это без кавычек или цитаты

Первый в верхнем регистре, +а второй u- в пустой строке.


3
Обратите внимание, что 4 является минимальной оценкой для этого вопроса, так как любое меньшее нарушает ограничения.
Джо Кинг

5

C # (интерактивный компилятор Visual C #) , 113 112 107 70 64 байта

Write(".f();static void f(this string s){Write(s+')'+';');}//");

Сохранено 5 байт благодаря @negative seven

Не цитируется и цитируется

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

Когда заключено в кавычки, Write(передается метод расширения, который печатает его вместе с );.


Split()-> Trim()и var a->_
минус семь

1
@negativeseven Спасибо, я бы никогда не подумал об использовании сброса!
Воплощение невежества

1
@negativeseven На самом деле, мое решение даже не должно было быть таким сложным, посмотрите на мою новейшую редакцию
Вариант невежества»

64 байта с использованием метода расширения. Очень удивлен, что это сработало так хорошо!
отрицательное семь

1
@negativeseven Спасибо! И вы дали мне идею для второй части задачи: я захватывал внешнюю переменную, а затем использовал Removeи использовал Insertее, теперь я могу просто использовать метод расширения!
Воплощение Невежества

4

Perl 6 , 11 байт

say ".say~"

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

Печать .say~с завершающим переводом строки. Кажется, слишком просто. Я что-то пропустил?

При заключении в кавычки выдает sayпробел и завершающий перевод строки.


2
Я так не думаю. Просто p6, скажем (ха), скажем, $ foo и $ foo.say, что делает это намного проще.
user0721090601

4

« Хм… Foo - это язык с высокой степенью адаптации ». Для тех, кто не знает Foo: все, что находится в двойных кавычках, выводится, а все остальное (за исключением нескольких других встроенных символов) не допускается. « Идеальный язык для работы » - это преуменьшение. ;)
Кевин Круйссен

2
Так что, в принципе, просто оторви любое решение этой проблемы ?!
Мохнатый

@ Shaggy Язык Фу. Почти все, по крайней мере, с парой кавычек и с обоими ожидаемыми выходными непустыми значениями, работает в Foo в этом испытании. Так "a"b 1"2"же работает в Foo. Единственный ответ в этой задаче, который пока не является полиглотом Foo, находится в HQ9 +, потому что интерпретатор Foo также имеет проблему переполнения.
jimmy23013

4

> <> , 18 9 байт

"|o<"r>o|

-9 байт благодаря Джо Кингу

Попробуйте онлайн! ( цитируется )

объяснение

"|o<"r>o|
"|o<"     Pushes the quoted characters onto the stack
     r    Reverses the stack
      >o| Outputs all characters on stack & errors
""|o<"r>o|"
""          No-op
  |         Reverses the IP direction
     "r>o|" Pushes the quoted characters onto the stack (backwards)
  |o<       Outputs all characters on stack & errors

5
Добро пожаловать в Code Golf!
Стивен

@ Стефан Спасибо!
tjjfvi


2

Рунические чары , 9 байт

"!""$;"$;

Попробуйте онлайн! а также""!""$;"$;"

От Кевина Круйссена, который по сути исправил мою первую попытку, используя то, что я сделал во вторую.

Спускаясь "у грибов никогда не бывает непревзойденных кавычек" изгибание правил ", есть что-то в этом, что не должно быть в порядке", на что ссылается мой собственный комментарий:

7 байт

0".""$;

Попробуйте онлайн! а также"0".""$;"

При нормальных обстоятельствах эта программа выполняется как 0".""$;0".""$;нажатие целого числа 0, затем строка ., объединяет $;0, NOP, объединяет пустую строку, печатает верхнюю часть стека (строку .$;0) и завершается. Заключение в кавычки приводит к "0".""$;"выталкиванию строки 0, NOP, объединению пустой строки, печати верхней части стека и завершению (рендеринг ранее непечатного целого числа 0в строковой форме). Последний "остается неисполненным (и в любом случае не является частью исходной программы).

У грибов нет строковых литералов, у них есть команда, которая переключает режим «чтение собственного источника в виде строки», и некоторая форма правила «указатель инструкции достиг границы источника» (обычно ребро-перенос), поэтому тот же исходный код -positional-byte действует как инструкция «начало строки» и «конец строки», создавая строковый литерал всей строки / столбца (исключая "саму себя).


Супер быстрый ответ! Мне просто интересно, неправильно ли я что-то понял в вашем представлении, но для меня оно не печатает $;в конце в цитируемой версии.
Геза Кереценый

Я понял , что на перечитывание и пытаюсь разобраться , если руническим может когда - либо выполнить этот бит. Начинаем исследовать «непарные» цитаты сейчас; например, "$;и ""$;"(Рунические кавычки в паре с самим собой).
Draco18s

@GezaKerecsenyi Дайте мне знать, если моя обновленная программа нарушает какие-либо правила.
Draco18s

Ммм .. Как это действует? Ваша программа без вывода кавычек !.(что правильно), но не должна ли ваша программа выводить кавычки 0$;? PS: я вообще не знаю Runic Enchantments, но потенциальное исправление, основанное на вашем текущем макете, которое, я думаю, будет правильным 0"!""$;"$;(которое выводит!$; как есть или выводит,0$; если заключено в кавычки). РЕДАКТИРОВАТЬ: На самом деле, я думаю, вы можете отбросить 0и вывод !$;и $;.
Кевин Круйссен

1
@KevinCruijssen $- это «печать вершины стека» и ;заканчивается. Но вы, по сути, получили правильный ответ.
Draco18s





0

Japt , 4 байта

"P"u

Без кавычек это преобразовывает строку Pв верхний регистр. Цитируется, это печатает u.

Попытайся

Japt , 4 байта

"P"w

Без кавычек, он переворачивает строку P. Цитируется, это печатает w.

Попытайся



@Shaggy Наши решения немного отличаются, есть много разных решений этой проблемы
Воплощение невежества

Используйте Qвместо P, это больше мета! ;)
Лохматый

0

R, 16 байт

 ";print(";");" 

Обратите внимание, что приведенный выше код не заключен в дополнительные кавычки и имеет как начальные, так и конечные пробелы.

Попробуй (версия без упаковки)


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

Я также добавил бы примечание о ведущих и конечных пробелах. Трудно заметить их иначе.
mbomb007

Отредактировано, спасибо за предложения!
Джеймс Отто

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.