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


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çý шляхом додавання Iå.

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

Пояснення:

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.