13
\$\begingroup\$

This challenge is pretty simple. As input, you take in a regular expression.

Then, you output a truthy/falsey of whether or not your source code matches the regular expression. It's that simple! Just two more things:

  • No quine builtins; you may, however, access the code's source code by file IO, etc.
  • This is , so shortest code in bytes wins!

Example

If your source code was say, abc, an input of a\wc would return true and an input of a\dc would return false.

asked Jan 12, 2016 at 2:26
\$\endgroup\$
12
  • \$\begingroup\$ Example please? \$\endgroup\$ Commented Jan 12, 2016 at 2:29
  • 1
    \$\begingroup\$ @CᴏɴᴏʀO'Bʀɪᴇɴ no, that's fine. \$\endgroup\$ Commented Jan 12, 2016 at 2:31
  • 2
    \$\begingroup\$ 1. I don't think just a BRE with simple character classes is specific enough. What BRE features have to be supported? 2. \d is not special in BRE; it matches the character d. 3. Choosing a specific regex flavor restricts your challenge to languages that support it, and few languages support BRE. Is that intentional? \$\endgroup\$ Commented Jan 12, 2016 at 2:33
  • 2
    \$\begingroup\$ I'd recommend leaving it up to the answerer. If language x uses regex flavor y by default, let it use that flavor in this challenge. \$\endgroup\$ Commented Jan 12, 2016 at 2:36
  • 6
    \$\begingroup\$ @Maltysen Why don't you add a substring example to the question body? \$\endgroup\$ Commented Jan 12, 2016 at 3:10

9 Answers 9

14
\$\begingroup\$

Z shell, 12 bytes

grep "$@"<0ドル

Zsh conditionals understand only exit codes, and the scripts exits with 0 or 1 accordingly.

In addition, this prints a non-empty string (the source code) for a match and an empty one for a mismatch, which could be as truthy/falsy values in combination with test/[.

The program reads its own file, but according to this comment by the OP, this is allowed.

answered Jan 12, 2016 at 2:42
\$\endgroup\$
6
  • 3
    \$\begingroup\$ Aaand Dennis won. ¯\_(ツ)_/¯ \$\endgroup\$ Commented Jan 12, 2016 at 2:43
  • \$\begingroup\$ This doesn't work. It breaks on patterns with spaces in them. \$\endgroup\$ Commented Jan 12, 2016 at 2:51
  • \$\begingroup\$ @feersum Whoops! Thanks for pointing that out. I have edited my answer. \$\endgroup\$ Commented Jan 12, 2016 at 2:53
  • 2
    \$\begingroup\$ Now it breaks if it is written to a file with spaces in the name. Or a file called -v. Or... \$\endgroup\$ Commented Jan 12, 2016 at 15:08
  • \$\begingroup\$ @BenMillwood I'd normally say don't save it with such a file name, but switching to zsh makes it bullet proof without incrementing the byte count. \$\endgroup\$ Commented Jan 12, 2016 at 15:24
10
\$\begingroup\$

JavaScript (ES6), 39

(f=_=>!!`(f=${f})()`.match(prompt()))()
answered Jan 12, 2016 at 2:57
\$\endgroup\$
2
  • \$\begingroup\$ Just about to post this, but you beat me to it. Great job! \$\endgroup\$ Commented Jan 12, 2016 at 3:29
  • 12
    \$\begingroup\$ The beginning of your code looks like me when trying to understand this : (f=_=) \$\endgroup\$ Commented Jan 12, 2016 at 9:35
8
\$\begingroup\$

Python 3, 119 bytes

This just looks cooler, IMO (and it doesn't read the file).

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

Python 3, 67 bytes

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

Added after reading this comment.

answered Jan 12, 2016 at 2:37
\$\endgroup\$
1
  • \$\begingroup\$ int is shorter than bool. \$\endgroup\$ Commented Mar 10, 2016 at 22:42
7
\$\begingroup\$

Julia, (削除) 64 (削除ここまで) 54 bytes

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

Julia regular expressions use PCRE. While reading the source code of the file is a standard loophole for quines, in this case it has been explicitly allowed. Takes input with no trailing newline.

answered Jan 12, 2016 at 2:37
\$\endgroup\$
0
3
\$\begingroup\$

Japt, 22 bytes

"+Q 3sAJ fU"+Q 3sAJ fU

Standard quine framework with a few bytes added to fit this challenge. Truthy = match(es), falsy = null. Try it online!

 // Implicit: U = input string, A = 10, J = -1, Q = quotation mark
"..."+Q // Take this string and concatenate a quotation mark.
3 // Repeat three times.
sAJ // Slice off the first 10 and last 1 chars.
fU // Match U to the result.
answered Jan 12, 2016 at 3:35
\$\endgroup\$
0
3
\$\begingroup\$

Perl, 21 bytes

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

17 bytes plus 4 bytes for -pl0. Run like this:

echo open | perl -pl0 quinean

The source file must contain only the code above (no shebang, no trailing newline). Outputs 1 if the regex matches and the empty string if it doesn't (the empty string is falsey in Perl).


Four bytes can be saved if the input is guaranteed not to end in a newline:

open 0;say<0>=~<>

Run like this:

echo -n open | perl -M5.010 quinean

say requires Perl 5.10+ and must be enabled with -M5.010. According to Meta, "the -M5.010, when needed, is free," giving a score of 17 bytes.

How it works

This is a simple variation on the standard "cheating" quine:

open 0;print<0>

This opens the file named in 0ドル and reads the contents with <0>.

$_=<0>=~$_ reads one line from the source file, does a regex match against the contents of $_ (which were read by the -p flag), and assigns the result to $_. -p prints $_ automatically at the end.

answered Jan 12, 2016 at 19:50
\$\endgroup\$
2
\$\begingroup\$

Mathematica, 63 bytes

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

Note the trailing space. Uses the standard Mma quine mechanism, and tests if it matches the regex.

answered Jan 12, 2016 at 11:25
\$\endgroup\$
2
\$\begingroup\$

Jolf, (削除) 18 (削除ここまで) 15 bytes

Supports the JS flavour of RegEx, I hope that's okay. Try it here!.

 h$code.value#i

Commented:

 $code.value# the document's element "code" (the program container)
_h i and output if it has (matches) the input string (i.e. regex)
answered Jan 12, 2016 at 2:35
\$\endgroup\$
5
  • \$\begingroup\$ In which browser does this work? Both Chrome and Firefox complain that x.step is not a function. \$\endgroup\$ Commented Jan 12, 2016 at 14:27
  • \$\begingroup\$ @Dennis Huh. I must have broken the interpreter last night. What else is wrong? I currently am unable to debug, am at school. \$\endgroup\$ Commented Jan 12, 2016 at 15:02
  • \$\begingroup\$ Good. Now add a shortcut to the document's element "code" so we can make it shorter. \$\endgroup\$ Commented Jan 12, 2016 at 15:26
  • \$\begingroup\$ @CᴏɴᴏʀO'Bʀɪᴇɴ It also gives a reference error for math. \$\endgroup\$ Commented Jan 12, 2016 at 15:26
  • \$\begingroup\$ @Dennis Ah, that's why. I forgot to update the HTML, I added math.js. I will revise when I arrive home, if that's not too late. (In about 4 ish hours) \$\endgroup\$ Commented Jan 12, 2016 at 15:51
1
\$\begingroup\$

ESMin, 14 chars / 26 bytes (non-competitive)

⟮!!(CX222+ᶈ0)đï

Try it here (Firefox only).

Using a version with bug fixes written after the challenge.

Explanation

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

NOTE: Copy blocks are NOT quine operators. They are meant to be more versatile alternatives to variable declarations.

answered Jan 12, 2016 at 5:38
\$\endgroup\$
1
  • 1
    \$\begingroup\$ I think you can save a byte by changing X to 10. \$\endgroup\$ Commented Jan 12, 2016 at 5:59

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.