Quinean Regex测试仪


13

这个挑战非常简单。输入一个正则表达式作为输入。

然后,输出您的源代码是否与正则表达式匹配的真假信息。就这么简单!还有两件事:

  • 没有内置的奎因;但是,您可以通过文件IO等访问代码的源代码。
  • 这是,因此以字节为单位的最短代码胜出!

如果您的源代码是abc,则输入a\wc会返回true,而输入a\dc会返回false。


请举个例子吗?
Mama Fun Roll

1
@CᴏɴᴏʀO'Bʀɪᴇɴ不,很好。
Maltysen

2
1.我认为仅仅具有简单字符类的BRE不够具体。必须支持哪些BRE功能?2. \d在BRE中不特殊;它与字符匹配d。3.选择特定的regex风格会将您的挑战限制在支持它的语言上,并且很少有语言支持BRE。那是故意的吗?
丹尼斯

2
我建议您将其留给回答者。如果语言x默认情况下使用regex风味y,则让它在此挑战中使用该风味。
丹尼斯

6
@Maltysen为什么不在问题正文中添加子字符串示例?
feersum'1

Answers:


14

Z Shell,12个字节

grep "$@"<$0

Zsh条件句仅理解退出代码,因此脚本以0或1退出。

另外,这会打印一个非空字符串(源代码)进行匹配,并输出一个空字符串以进行匹配,这可以与test/ 组合为真/假值[

程序读取自己的文件,但是根据OP的注释,这是允许的。


3
亚恩·丹尼斯(Aaand Dennis)获胜 ¯\ _(ツ)_ /¯
康纳奥布莱恩

这行不通。它破坏了带有空格的图案。
feersum

@feersum糟糕!感谢您指出了这一点。我已经编辑了答案。
丹尼斯

2
现在,如果将其写入名称中带有空格的文件,它将中断。或名为的文件-v。还是……
本·米尔伍德

@BenMillwood我通常会说不要使用这样的文件名来保存它,但是切换到zsh使其成为防弹项目,而不会增加字节数。
丹尼斯


9

Python 3,119个字节

IMO,这看上去更酷(它不读取文件)。

(lambda i:print(bool(__import__('re').search(input(),i))))("(lambda i:print(bool(__import__('re').search(input(),i))))")

Python 3,67个字节

print(bool(__import__('re').search(input(),open(__file__).read())))

阅读此评论后添加。


int比短bool

7

朱莉娅,64 54字节

r=readline;show(ismatch(Regex(r()),open(r,@__FILE__)))

Julia正则表达式使用PCRE。虽然读取文件的源代码是木马的标准漏洞,但在这种情况下,已明确允许这样做。接受输入,没有尾随换行符。


3

Japt,22个字节

"+Q ³sAJ fU"+Q ³sAJ fU

标准quine框架添加了一些字节以适应此挑战。Truthy =匹配,falsy = null。在线尝试!

         // Implicit: U = input string, A = 10, J = -1, Q = quotation mark
"..."+Q  // Take this string and concatenate a quotation mark.
³        // Repeat three times.
sAJ      // Slice off the first 10 and last 1 chars.
fU       // Match U to the result.

2

Mathematica,63个字节

StringMatchQ[ToString[#0, InputForm], RegularExpression[#1]] & 

注意尾随空格。使用标准的Mma quine机制,并测试它是否与正则表达式匹配。


2

Perl,21个字节

open 0;$_=<0>=~$_

17个字节加4个字节-pl0。像这样运行:

echo open | perl -pl0 quinean

源文件必须仅包含上面的代码(没有shebang,没有尾随换行符)。1如果正则表达式匹配则输出,如果不匹配则输出空字符串(在Perl中,空字符串为false)。


如果保证输入不以换行符结尾,则可以保存四个字节:

open 0;say<0>=~<>

像这样运行:

echo -n open | perl -M5.010 quinean

say需要Perl 5.10+,并且必须启用-M5.010。根据Meta的说法,“ the -M5.010,当需要时,是免费的”,得分为17字节。

怎么运行的

这是标准“作弊”奎因的简单变体:

open 0;print<0>

这将打开名为的文件,$0并使用读取内容<0>

$_=<0>=~$_从源文件读取一行,对regex的内容进行正则表达式匹配$_(已由该-p标志读取),并将结果分配给$_。最后自动-p打印$_


2

Jolf,18个 15字节

支持RegEx的JS风格,我希望可以。在这里尝试!

 h$code.value#i

评论:

  $code.value#      the document's element "code" (the program container)
_h            i     and output if it has (matches) the input string (i.e. regex)

在哪种浏览器中可以使用?Chrome和Firefox都抱怨这x.step不是一个功能。
丹尼斯

@Dennis Huh。昨天晚上我一定打断了翻译。还有什么问题吗?我目前在学校无法调试。
科纳·奥布莱恩

好。现在,为文档的元素“代码”添加快捷方式,以便我们将其缩短。
user48538

@CᴏɴᴏʀO'Bʀɪᴇɴ它还为提供了参考错误math
丹尼斯

@丹尼斯啊,这就是为什么。我忘了更新HTML,添加了math.js。如果还不晚,我会在我回到家时进行修改。(在约4 ISH小时)
康纳奥布莱恩

1

𝔼𝕊𝕄𝕚𝕟,14个字符/ 26个字节(非竞争性)

⟮‼(ⒸⅩ222+ᶈ0)đï

Try it here (Firefox only).

挑战后使用带有错误修复的版本。

说明

⟮‼(ⒸⅩ222+ᶈ0)đï // implicit: ï=input
⟮               // copy block: copy following code for later use
 (ⒸⅩ222+ᶈ0)   // take convert 10222 to char, add stuff inside copy block
‼           đï // check if input matches resulting string
               // implicit output

注意:复制块不是quine运算符。它们旨在成为变量声明的更多用途。


1
我认为您可以通过更改为10 来保存一个字节
。– lirtosiast
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.