Czy to podciąg sam w sobie?

21

Podany ciąg znaków zwraca, czy ciąg jest podciągiem kodu źródłowego programu.

Obowiązują standardowe zasady quine, co oznacza, że ​​nie możesz odczytać własnego kodu źródłowego. Gwarantowana długość wejścia jest mniejsza lub równa długości programu. Możesz zwrócić dowolne dwie różne wartości, niekoniecznie prawdziwe i fałszywe. Możesz również przesłać funkcję zamiast pełnego programu.

To jest więc wygrywa najkrótszy kod!

Przykład

Jeśli twój kod źródłowy to print(input() = False), powinien zwracać wartość True dla, nt(iale False dla tupn.

Cairney Coheringaahing
źródło
1
Powiązane
DJMcMayhem
2
@ totalniehuman, jak w przypadku większości wyzwań, tak.
caird coinheringaahing
1
Również powiązane .
AdmBorkBork,
10
@StanStrum Nie chodzi o wskazywanie duplikatów, ma na celu pokazanie powiązanych wyzwań, którymi ludzie mogą być zainteresowani, i pokazanie ich na pasku bocznym po prawej stronie.
całkowicieludzki
1
Czy dane wejściowe mogą być puste? (W rzeczywistości, czy kod może być pusty?)
Lynn

Odpowiedzi:

6

JavaScript , 25 bajtów

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

Wypróbuj online!

Osobiście nie jestem fanem tego, ale jest to dozwolone .

Alternatywne (nieprawidłowe?) Rozwiązanie, 19 bajtów

Pobiera to dane wejściowe jako wyrażenie regularne.

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

Wypróbuj online!

całkowicie ludzki
źródło
Czy to nie czyta się?
Adám
Jaki jest cel wyraźnego wspominania (Node.js)? Czy to też nie działa w przeglądarkach?
@ThePirateBay Działa zgodnie z oczekiwaniami w Chrome.
steenbergh
1
Myślicie naprzód, to tylko szablon TIO. : P
totalnie ludzki,
5

Java 8, 124 112 bajtów (funkcja)

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);}

Wypróbuj tutaj.


Oto pełny program (aby zobaczyć jeden z powodów, dla których funkcje są dozwolone w PPCG, ponieważ niektóre języki, takie jak Java, wymagają bardzo pełnego obowiązkowego kodu pełnego dla pełnych programów).

Java 8, 226 214 bajtów (pełny program)

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]));}}

Wypróbuj tutaj.


Wyjaśnienie:

  • String sZawiera kod źródłowy niesformatowany.
  • %ssłuży do wprowadzania tego ciągu do siebie za pomocą s.format(...).
  • %c, %1$ci 34służą do formatowania podwójnych cudzysłowów.
  • s.format(s,34,s) łączy to wszystko.

A następnie .contains(...)służy do sprawdzenia, czy ten kod źródłowy zawiera dane wejściowe.

Kevin Cruijssen
źródło
To daje mi prawdę dla wszystkich ciągów, gdy „Wypróbuj online”.
MichaelK
1
@MichaelKarnerfors nie dla mnie ... Czy na pewno nie dodajesz argumentów za każdym razem? Używany jest tylko jeden argument. Musisz uruchomić program zmieniając argument za każdym razem, gdy wykonujesz nowy test.
Olivier Grégoire,
@ OlivierGrégoire Masz rację, źle użyłem strony TIO. Dziękuję Ci. :)
MichaelK
3

Bash, 43 , 28 bajtów

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

spróbuj online

Nahuel Fouilleul
źródło
Nie znam Basha, ale czy można to pograć w golfa, usuwając spację?
caird coinheringaahing
@cairdcoinheringaahing Nie sądzę, typesetformatuje to w ten sposób AFAICT. Wypróbuj online!
Erik the Outgolfer
ale może zostać ulepszony może przy użyciu innej techniki
Nahuel Fouilleul
właśnie znalazłem inne rozwiązanie
Nahuel Fouilleul
Co ma $1zrobić?
caird coinheringaahing
2

Haskell , 92 bajty

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

Wypróbuj online! Oczywiste rozszerzenie standardowego quine. Pozbycie się importu byłoby przyjemne, ale wątpię, czy isInfixOfmożna go obliczyć w krótszej ilości bajtów.

Laikoni
źródło
2

QBIC , 28 bajtów

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

Wyświetla 0, jeśli dane wejściowe nie są podłańcuchem źródła, a X w przeciwnym razie gdzie X jest (pierwszym) indeksem podłańcucha.

Wyjaśnienie

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

#definiuje literał łańcucha w QBIC i przypisuje go do pierwszej dostępnej zmiennej łańcucha. To jest B$w tym programie, ponieważ A$jest już zajęty przez ;(przeczytaj ciąg z linii cmd). Następnie wszystko, aż do ogranicznika, jest wprowadzane do literału; ogranicznik jest znakiem wstecz - co sprawia, że ​​jest to jedyny znak ASCII, którego nie można włączyć w ciągach znaków. W tym przypadku QBIC nie potrzebuje znaku wstecz, ponieważ literał jest kończony na końcu kodu przez funkcję automatycznego zamykania QBIC. Aby uzyskać więcej informacji na temat literałów QBIC, zobacz wątek Prezentacja .

Steenbergh
źródło
Co jest Aw tym kontekście?
caird coinheringaahing
@cairdcoinheringaahing mały błąd po mojej stronie, powinien być Bi wyjaśnienie zostało dodane.
steenbergh
2

Galaretka , 10 bajtów

“;⁾vṾƓẇ”vṾ

Wypróbuj online!

Jak to działa

“;⁾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.
Dennis
źródło
1

Julia, 72 bajty

Teraz rozumiem, co ludzie mają na myśli, gdy mówią, że problemy z quine to tylko wariacje na temat klasycznego quine.

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

Wyjaśnienie

#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)
eaglgenes101
źródło
0

Perl 5, 60 + 2 (-pl) bajtów

$_=(sprintf$a=q($_=(sprintf$a=q(%s),$a)=~/\Q$_/),$a)=~/\Q$_/

spróbuj online

Nahuel Fouilleul
źródło
0

05AB1E , 17 bajtów

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

Modyfikacja domyślnego 0"D34çý"D34çý przez dodanie .

Wypróbuj online.

Wyjaśnienie:

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)
Kevin Cruijssen
źródło