它是它本身的子串吗?


21

给定一个字符串,返回该字符串是否是程序源代码的子字符串。

应用标准的quine规则,这意味着您无法阅读自己的源代码。确保输入的长度小于或等于程序的长度。您可以返回任何两个不同的值,不一定返回true和false值。您也可以提交功能而不是完整程序。

这是一个所以最短的代码胜出!

一个例子

如果你的源代码print(input() = False),它应该返回True为nt(i,但假的tupn



2
@totallyhuman和大多数挑战一样,是的。
caird coinheringaahing


10
@StanStrum并不是要指出重复项,而是要显示人们可能感兴趣的相关挑战,并在右侧的侧边栏中显示它们。
完全人类

1
输入可以为空吗?(实际上,代码可以为空吗?)
Lynn

Answers:



6

JavaScript,25个字节

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

在线尝试!

我个人不喜欢这个,但是允许的

替代(无效?)解决方案,19字节

这将输入作为正则表达式。

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

在线尝试!


它不是自己读吗?
亚当

1
@Adámcodegolf.meta.stackexchange.com/ a
totallyhuman'17

明确提及的目的是(Node.js)什么?在浏览器中也不行吗?

@ThePirateBay可以在Chrome中正常运行。
steenbergh

1
你们正在思考,这只是从TIO模板开始的。:P
totallyhuman

5

爪哇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)要求完整程序的详细冗长的必填样板代码)。

爪哇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用于将String本身输入s.format(...)
  • %c%1$c以及34用于格式化双引号。
  • s.format(s,34,s) 全部放在一起。

然后.contains(...)用于检查此源代码是否包含给定的输入。


当我“在线尝试”时,这对所有字符串都是正确的。
MichaelK

1
@MichaelKarnerfors不适合我...您确定每次都不添加参数吗?仅使用一个参数。每次进行新测试时,都必须运行更改参数的程序。
OlivierGrégoire17年

@OlivierGrégoire是的,我使用的TIO页面错误。谢谢。:)
MichaelK

3

Bash,43、28字节

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

在线尝试


我不了解Bash,但是可以通过删除很多空白来进一步解决问题吗?
Caird coinheringaahing

@cairdcoinheringaahing我不这样认为,将其typeset格式化为这种AFAICT。在线尝试!
暴民埃里克(Erik the Outgolfer)

但可能会使用其他技术加以改进
Nahuel Fouilleul

刚刚找到了另一个解决方案
Nahuel Fouilleul

怎么$1办?
caird coinheringaahing

2

Haskell,92个字节

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

在线尝试!标准quine的明显扩展。摆脱导入会很好,但是我怀疑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)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.