Це сама підрядка?


21

Задавши рядок, поверніть, чи є рядок підрядкою вихідного коду програми.

Застосовуються стандартні правила квоти, тобто ви не можете прочитати власний вихідний код. Гарантована довжина введення буде меншою або рівною довжині програми. Ви можете повернути будь-які два різних значення, не обов'язково значення truthy та falsey. Ви також можете подати функцію, а не повну програму.

Це тому найкоротший виграш коду!

Приклад

Якщо ваш вихідний код є print(input() = False), він повинен повернути True для, nt(iале False for tupn.



2
@totallyhuman, як і в більшості викликів, так.
caird coinheringaahing


10
@StanStrum Це не вказувати на дублікати, це показати пов'язані проблеми, які можуть зацікавити людей, і показати їх на бічній панелі праворуч.
повністюлюдський

1
Чи може вхід бути порожнім? (Насправді, чи може код бути порожнім?)
Лінн

Відповіді:



6

JavaScript , 25 байт

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

Спробуйте в Інтернеті!

Я особисто не фанат цього, але це дозволено .

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

Це сприймає введення як регулярний вираз.

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

Спробуйте в Інтернеті!


Чи не читає вона сама?
Adám


Яка мета явного згадування (Node.js)? Це також не працює в браузерах?

@ThePirateBay працює як очікується в Chrome.
steenbergh

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"* ]]

спробуйте в Інтернеті


Я не знаю Баша, але чи можна це займатись гольфом, видаляючи багато пробілів?
caird coinheringaahing

@cairdcoinheringaahing Я не думаю, typesetщо це форматується так, як цей НАЗАД. Спробуйте в Інтернеті!
Erik the Outgolfer

але, можливо, буде вдосконалено, можливо, використовуючи іншу техніку
Nahuel Fouilleul

щойно знайшли інше рішення
Nahuel Fouilleul

Що робить $1?
caird coinheringaahing

2

Хаскелл , 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 coinheringaahing

@cairdcoinheringaahing невелика помилка з мого боку, повинна була бути, Bі пояснення додано.
steenbergh

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.