자체의 하위 문자열입니까?


21

문자열이 주어지면 문자열이 프로그램 소스 코드의 하위 문자열인지 여부를 반환합니다.

표준 소멸 규칙이 적용됩니다. 즉, 자체 소스 코드를 읽을 수 없습니다. 입력 길이는 프로그램 길이보다 작거나 같아야합니다. 반드시 진실과 거짓 값이 아닌 두 가지 고유 한 값을 반환 할 수 있습니다. 전체 프로그램이 아닌 기능을 제출할 수도 있습니다.

이것은 이므로 가장 짧은 코드가 승리합니다!

소스 코드가 print(input() = False)인 경우 True에 nt(i대해서는 False에 대해 반환해야 합니다 tupn.



2
대부분의 도전과 마찬가지로 @totallyhuman입니다.
caird coinheringaahing


10
@StanStrum 중복을 지적하는 것이 아니라 사람들이 관심을 가질만한 관련 문제를 보여주고 오른쪽에있는 사이드 바에 표시하는 것입니다.
완전히 인간적인

1
입력을 비울 수 있습니까? (실제로 코드 가 비어있을 수 있습니까?)
Lynn

답변:



6

자바 스크립트 , 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, 124112 바이트 (기능)

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

여기에서 시도하십시오.


여기에 전체 프로그램이 있습니다 (Java와 같은 일부 언어는 전체 프로그램에 대해 매우 상세한 필수 상용구 코드가 필요하기 때문에 PPCG에서 함수가 허용되는 이유 중 하나를 참조하십시오).

Java 8, 226214 바이트 (전체 프로그램)

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
@MichaelKarnerfors for not me ... 매번 인수를 추가하지 않습니까? 하나의 인수 만 사용됩니다. 새로운 테스트를 할 때마다 인수를 변경하는 프로그램을 실행해야합니다.
Olivier Grégoire

@ OlivierGrégoire 당신은 맞습니다, 나는 TIO 페이지를 잘못 사용했습니다. 고맙습니다. :)
MichaelK

3

배쉬, 43 , 28 바이트

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

온라인으로 사용해보십시오


Bash를 모르지만 공백을 많이 제거하여 더 골프를 칠 수 있습니까?
caird coinheringaahing

@cairdcoinheringaahing 그렇게 생각하지 않습니다 typeset.이 AFAICT와 같은 형식입니다. 온라인으로 사용해보십시오!
Outgolfer Erik

그러나 다른 기술을 사용하여 개선 될 수도 있습니다
Nahuel Fouilleul

방금 다른 해결책을 찾았습니다
Nahuel Fouilleul

무엇을 $1합니까?
caird coinheringaahing



2

QBIC , 28 바이트

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

입력이 소스의 서브 스트링이 아닌 경우 0을 인쇄하고, 그렇지 않으면 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를 라인에서 문자열을 읽기). 그런 다음 구분 기호까지 모든 것이 리터럴에 제공됩니다. 분리 문자는 백틱 (backtick)입니다. 또한 문자열 리터럴에서 포함 할 수없는 유일한 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)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.