Это подстрока сама по себе?


21

Получив строку, верните, является ли строка подстрокой исходного кода программы.

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

Это поэтому выигрывает самый короткий код!

Пример

Если ваш исходный код есть print(input() = False), он должен вернуть True для, nt(iно False для tupn.



2
@totallyhuman как с большинством проблем, да.
Caird Coneheringaahing


10
@StanStrum Не для того, чтобы указывать на дубликаты, а для того, чтобы показать связанные проблемы, которые могут заинтересовать людей, и показать их на боковой панели справа.
полностью человек

1
Может ли вход быть пустым? (На самом деле, может ли код быть пустым?)
Линн

Ответы:



6

JavaScript , 25 байт

f=s=>('f='+f).includes(s)

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

Я лично не фанат этого, но это разрешено .

Альтернативное (недействительное?) Решение, 19 байт

Это принимает входные данные в качестве регулярного выражения.

f=s=>s.test('f='+f)

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


Разве это не читается само по себе?
Адам


Какова цель явного упоминания (Node.js)? Разве это не работает в браузерах тоже?

@ThePirateBay Работает как положено в Chrome.
Стинберг

1
Вы, ребята, думаете далеко вперед, это просто из шаблона TIO. : P
полностью человек

5

Java 8, 124 112 байт (функция)

p->{String s="p->{String s=%c%s%1$c;return s.format(s,34,s).contains(p);}";return s.format(s,34,s).contains(p);}

Попробуй это здесь.


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

Java 8, 226 214 байт (полная программа)

interface M{static void main(String[]a){String s="interface M{static void main(String[]a){String s=%c%s%1$c;System.out.print(s.format(s,34,s).contains(a[0]));}}";System.out.print(s.format(s,34,s).contains(a[0]));}}

Попробуй это здесь.


Объяснение:

  • String sСодержит исходный код отформатирован.
  • %sиспользуется для ввода этой строки в себя с помощью s.format(...).
  • %c, %1$cИ 34используются для форматирования двойных кавычек.
  • s.format(s,34,s) складывает все это вместе.

И затем .contains(...)используется, чтобы проверить, содержит ли этот исходный код заданный вход.


Это дает мне истину для всех строк, когда я "Попробуй онлайн".
MichaelK

1
@MichaelKarner не для меня ... Вы уверены, что не добавляете аргументы каждый раз? Используется только один аргумент. Вы должны запускать программу, меняя аргумент каждый раз, когда вы делаете новый тест.
Оливье Грегуар

@ OlivierGrégoire Вы правы, я неправильно использовал страницу TIO. Спасибо. :)
MichaelK

3

Баш, 43 , 28 байт

[[ $BASH_COMMAND = *"$1"* ]]

попробуйте это онлайн


Я не знаю Bash, но можно ли это сделать дальше, удалив много пустого пространства?
Кэрд coinheringaahing

@cairdcoinheringaahing Я так не думаю, typesetформатирует это как AFAICT. Попробуйте онлайн!
Эрик Outgolfer

но может быть улучшено, может быть, с использованием другой техники
Науэль Фуйе

только что нашел другое решение
Науэль Фуйе

Что делает $1?
Caird Coneheringaahing

2

Haskell , 92 байта

import Data.List;f s=isInfixOf s$(++)<*>show$"import Data.List;f s=isInfixOf s$(++)<*>show$"

Попробуйте онлайн! Очевидное расширение стандартной квин. Было бы неплохо избавиться от импорта, но я сомневаюсь, что isInfixOfего можно вычислить в меньшем количестве байтов.



2

QBIC , 28 байт

?instr(B+B,;)#?instr(B+B,;)#

Это печатает 0, если входные данные не являются подстрокой источника, и X иначе, где X - (первый) индекс подстроки.

объяснение

Latter part:
#?instr(B+B,;)#   Define a string literal B$ with a copy of the source

First part:
?                 PRINT
 instr(   , )     the index of
           ;          the cmd line parameter A$
       B+B            in B$ concatenated with itself

#определяет строковый литерал в QBIC и присваивает его первой доступной строковой переменной. Это B$в этой программе, потому что A$уже занято ;(читать строку из строки cmd). Затем все до разделителя подается в буквальное; разделитель является обратным тэгом - что также делает его единственным символом ASCII, не включаемым в список строк. В этом случае QBIC не нуждается в обратном кавычке, потому что литерал завершается в конце кода функцией автоматического закрытия QBIC. Для получения дополнительной информации о литералах QBIC см. Поток Showcase .


Что Aв этом контексте?
Caird Coneheringaahing

@cairdcoinheringaahing небольшая ошибка на моей стороне, должно было быть, Bи объяснение добавлено.
Стинберг

2

Желе , 10 байт

“;⁾vṾƓẇ”vṾ

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

Как это устроено

“;⁾vṾƓẇ”vṾ  Main link. No arguments.

“;⁾vṾƓẇ”    Set the left argument and the return value to ';⁾vṾƓẇ'.
         Ṿ  Uneval; yield '“;⁾vṾƓẇ”'.
        v   Dyadic eval; eval ';⁾vṾƓẇ' with argument '“;⁾vṾƓẇ”'.

  ⁾vṾ       Yield 'vṾ'.
 ;          Append it to '“;⁾vṾƓẇ”', yielding the source code.
     Ɠ      Read a string from STDIN.
      ẇ     Check if it's a substring of the source code.

1

Юлия, 72 байта

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

x="~y=contains\"x=\$(repr(x));\$x\",y)";~y=contains("x=$(repr(x));$x",y)

объяснение

#Defines x to be the next line of the source, with the help of escaping characters
x="~y=contains\"x=\$(repr(x));\$x\",y)"; 
#Interpolates together a comparison string, including repr(x), the re-escaped from of x, and x itself, for comparison. 
~y=contains("x=$(repr(x));$x",y)


0

05AB1E , 17 байт

0"D34çýIå"D34çýIå

Модификация 0"D34çý"D34çý по умолчанию путем добавления .

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

Объяснение:

0                    # Push 0 to the stack
                     #  STACK: [0]
 "D34çýIå"           # Push the string 'D34çýIå' to the stack
                     #  STACK: [0, 'D34çýIå']
          D          # Duplicate this string
                     #  STACK: [0, 'D34çýIå', 'D34çýIå']
           34ç       # Push '"' to the stack
                     #  STACK: [0, 'D34çýIå', 'D34çýIå', '"']
              ý      # Join the stack by this '"' delimiter
                     #  STACK: ['0"D34çýIå"D34çýIå']
               I     # Take the input
                     #  STACK: ['0"D34çýIå"D34çýIå', 'Iå"D']
                å    # Check if it's a substring of the source code
                     #  STACK [1]
                     # (Output the top of the stack implicitly)
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.