71
\$\begingroup\$

Write a program that will generate a "true" output iff the input matches the source code of the program, and which generates a "false" output iff the input does not match the source code of the program.

This problem can be described as being related to quines, as the program must be able to somehow compute its own source code in the process.

This is code golf: standard rules apply. Your program must not access any special files, such as the file of its own source code.

Edit: If you so choose, true/false can be replaced with True/False or 1/0.

Example

If the source code of your program is bhiofvewoibh46948732));:/)4, then here is what your program must do:

Input (Stdin)

bhiofvewoibh46948732));:/)4

Output (Stdout)

true

Input

(Anything other than your source code)

Output

false
DJMcMayhem
60.1k18 gold badges203 silver badges352 bronze badges
asked Apr 17, 2013 at 14:29
\$\endgroup\$
5
  • 7
    \$\begingroup\$ Is the true/false output a strong requirement, or are variations (True/False, 1/0) acceptable as well? \$\endgroup\$ Commented Apr 17, 2013 at 14:54
  • \$\begingroup\$ Is it a problem if the program outputs a little more than true/false (if it keeps being unambiguous and ends with true/false) ? \$\endgroup\$ Commented Apr 19, 2013 at 11:31
  • 1
    \$\begingroup\$ Related: Interpret your lang, but not yourself? \$\endgroup\$ Commented Jan 11, 2014 at 5:28
  • 7
    \$\begingroup\$ So you mean a Narcissist program? \$\endgroup\$ Commented Jul 15, 2017 at 5:57
  • \$\begingroup\$ Very much related \$\endgroup\$ Commented Jan 20, 2020 at 7:37

49 Answers 49

1
2
38
\$\begingroup\$

JavaScript : 26

function f(s){return s==f}

I don't know if a JavaScript file really qualifies as a "program".

answered Apr 17, 2013 at 17:17
\$\endgroup\$
3
  • 8
    \$\begingroup\$ +1 This works because all objects have a .toString() method in JavaScript. \$\endgroup\$ Commented Dec 19, 2013 at 1:33
  • 1
    \$\begingroup\$ This can be shortened using an arrow function f=s=>s=='f='+f \$\endgroup\$ Commented Oct 3, 2018 at 16:03
  • 8
    \$\begingroup\$ @Jonathan yes. But in 2013 it couldn't... \$\endgroup\$ Commented Oct 3, 2018 at 16:21
10
\$\begingroup\$

Haskell, 72 characters

main=interact$show.(==s++show s);s="main=interact$show.(==s++show s);s="

Note: there is no end-of-line character at the end of the script.

$ runhaskell Self.hs < Self.hs
True
answered Apr 18, 2013 at 7:33
\$\endgroup\$
9
\$\begingroup\$

Perl, (削除) Infinity (削除ここまで) (削除) 41 (削除ここまで) 38 Characters

$_=q(print<>eq"\$_=q($_);eval"|0);eval

Update: The program no longer ends with a newline, which means it will work correctly on multi-line files. You have to enter input from STDIN without hitting enter. On Windows I was only able to do this by reading from a file.

Original solution:

print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(...
answered Apr 19, 2013 at 9:22
\$\endgroup\$
4
  • 1
    \$\begingroup\$ Nicely done! . . . \$\endgroup\$ Commented Apr 19, 2013 at 16:19
  • \$\begingroup\$ Fails for a file that begins with the code, e.g. (cat id.pl; echo foo)|perl id.pl \$\endgroup\$ Commented Apr 20, 2013 at 5:27
  • \$\begingroup\$ @GeoffReedy, thanks; the program did not handle multi-line input before. It is corrected now. \$\endgroup\$ Commented Apr 20, 2013 at 7:56
  • \$\begingroup\$ Darn, is this code bowling? \$\endgroup\$ Commented Jul 26, 2017 at 14:08
9
\$\begingroup\$

><>, 68 bytes

Fishes love eating fish poop. Now we know they can distinguish theirs from their friends'.

00v 0+1~$^?)0~\;n0\
 >:@@:@gi:0(?\:a=?/=?!/1ドル+
 0n;n*=f$=2~~/

You can try it online !

answered Jan 12, 2016 at 14:10
\$\endgroup\$
2
  • 1
    \$\begingroup\$ This outputs 1 for any prefix of the code as well \$\endgroup\$ Commented Sep 30, 2018 at 3:12
  • \$\begingroup\$ @JoKing it was worst than just prefixes of the script, it accepted truncated lines too ! I've fixed it, but I'm disappointed it's not as generic as I wanted it to be, I had to check the reached cell at the end of the script to make sure the whole code was matched. It can certainly be improved, but I'm not sure I will bother. \$\endgroup\$ Commented Oct 3, 2018 at 15:09
9
\$\begingroup\$

GolfScript, 11 chars

{`".~"+=}.~

Without the =, this code would be a quine that generates its own source code as a string. The = makes it compare this string to its input and output 1 if they match and 0 if they don't. Note that the comparison is exact — in particular, a trailing newline at the end of the input will cause it to fail.

Explanation:

  • { } is a code block literal in GolfScript;
  • . duplicates this code block, and ~ executes the second copy (leaving the first on the stack);
  • ` stringifies the code block, and ".~"+ appends .~ to it;
  • finally, = compares the resulting string with the input (which is pushed on the stack as a string by the GolfScript interpreter before the program starts) and returns 1 if they match and 0 if they don't.
caird coinheringaahing
50.9k11 gold badges133 silver badges364 bronze badges
answered Jan 11, 2014 at 5:38
\$\endgroup\$
8
\$\begingroup\$

JavaScript ES6, (削除) 16 (削除ここまで) 14 bytes

$=_=>_==`$=`+$

Minus two bytes thanks to Neil.

31 bytes if we must take input via prompt.

$=_=>prompt()==`$=${$};$()`;$()

38 bytes if we must output via alert.

$=_=>alert(prompt()==`$=${$};$()`);$()

This is the proper way to do it, as Optimizer's answer does not accept the entire source code.

answered Apr 4, 2016 at 22:26
\$\endgroup\$
7
  • 1
    \$\begingroup\$ Nice, although I would just write '$='+$. \$\endgroup\$ Commented Apr 4, 2016 at 22:53
  • \$\begingroup\$ Oh, true. @Neil \$\endgroup\$ Commented Apr 4, 2016 at 22:55
  • 1
    \$\begingroup\$ I'm pretty sure you need the ending ;$() because the function call is part of the quine. This also means that you'll need to switch to prompt to account for input. \$\endgroup\$ Commented Apr 5, 2016 at 5:14
  • 1
    \$\begingroup\$ That's not the problem. The function call is necessary because it's a part of the quine. Allowing the user to call it as a function would ruin the quine. \$\endgroup\$ Commented Apr 5, 2016 at 13:32
  • 1
    \$\begingroup\$ try $=_=>prompt()==`$=${$};$()`;$() \$\endgroup\$ Commented Apr 5, 2016 at 16:28
7
\$\begingroup\$

Python 2, 55

a='a=%r;print a%%a==raw_input()';print a%a==raw_input()

Tested:

a='a=%r;print a%%a==raw_input()';print a%a==raw_input() -> True

(anything else) -> False

answered Apr 17, 2013 at 15:14
\$\endgroup\$
5
  • 3
    \$\begingroup\$ Fails on any file that begins with the first line equal to a='a=%r;print a%%a==raw_input()';print a%a==raw_input(). \$\endgroup\$ Commented Apr 17, 2013 at 18:56
  • \$\begingroup\$ True, multi-line input is not supported. \$\endgroup\$ Commented Apr 17, 2013 at 20:06
  • \$\begingroup\$ A trivial fix would be to replace raw_input() with __import__('sys').stdin.read(). \$\endgroup\$ Commented Feb 5, 2015 at 22:53
  • \$\begingroup\$ I am confused by the challenge wording ('cause I am not good with english grammar). Is this allowed? print raw_input()==open(__file__).read() ? It is only 40 bytes, uses your raw_input() approach, but reads it's code. \$\endgroup\$ Commented Jan 29, 2018 at 14:12
  • 1
    \$\begingroup\$ @Simon That is not allowed, it is one of the standard loopholes for challenges like this. And yes, this is what it means by Your program must not access any special files, such as the file of its own source code. \$\endgroup\$ Commented Feb 23, 2018 at 18:28
6
\$\begingroup\$

Node.js : 54

function f(){console.log(f+'f()'==process.argv[2])}f()

You test it by saving it into a file f.js (the exact name has no importance) and using

node f.js "test"

(which outputs false) or

node f.js "$(< f.js)"

(which outputs true)

I also made a different version based on eval :

eval(f="console.log('eval(f='+JSON.stringify(f)+')'==process.argv[2])")

It's now at 72 chars, I'll try to shorten that when I have time.

answered Apr 17, 2013 at 17:40
\$\endgroup\$
6
  • 1
    \$\begingroup\$ @dan1111 Why ? It doesn't access any file. I was just pointing how to launch the program to people not used to node.js. It doesn't read the file. \$\endgroup\$ Commented Apr 18, 2013 at 6:49
  • 1
    \$\begingroup\$ All of the Javascript solutions take advantage of the fact that you can access your own source code in JS. That may not be technically "accessing the file of its own source code", but it accomplishes the exact same thing. I suppose your answer is legal, though, as the question didn't specifically forbid this. \$\endgroup\$ Commented Apr 19, 2013 at 9:32
  • \$\begingroup\$ Well, you access the source of a function (only the body to be precise) which is part of the program. That's like using mixin() in D. But I don't think the two other JS answers, including one from me, really qualify as "programs", though. \$\endgroup\$ Commented Apr 19, 2013 at 9:36
  • \$\begingroup\$ @dystroy actually mixin in D is more like using eval than reading source \$\endgroup\$ Commented Apr 19, 2013 at 9:51
  • \$\begingroup\$ @ratchetfreak yes, you're right. But I think your program uses a kind of toString of the enum value, right ? And any code using eval/mixin is about the same trick than using the source of the function. \$\endgroup\$ Commented Apr 19, 2013 at 9:54
5
\$\begingroup\$

Smalltalk (Pharo 2.0 dialect), 41 bytes

Implement this 41 chars method in String (ugly formatting for code-golf):

isItMe^self=thisContext method sourceCode

Then evaluate this in a Workspace (printIt the traditional Smalltalk way)
The input is not read from stdin, it's just a String to which we send the message (what else a program could be in Smalltalk?):

'isItMe^self=thisContext method sourceCode' isItMe.

But we are cheating, sourceCode reads some source file...
Here is a variant with 51 chars which does not:

isItMe
 ^ self = thisContext method decompileString

And test with:

'isItMe
 ^ self = thisContext method decompileString' isItMe

If a String in a Workspace is not considered a valid input, then let's see how to use some Dialog Box in 116 chars
Just evaluate this sentence:

(UIManager default request: 'type me') = (thisContext method decompileString withSeparatorsCompacted allButFirst: 7)

Since decompile format includes CR and TAB, we change that withSeparatorsCompacted.
Then we skip the first 7 chars are 'doIt ^ '

Finally a 105 chars variant using stdin, just interpret this sentence from command line, just to feel more mainstream:

Pharo -headless Pharo-2.0.image eval "FileStream stdin nextLine = (thisContext method decompileString withSeparatorsCompacted allButFirst: 7)"
answered Apr 20, 2013 at 1:23
\$\endgroup\$
4
\$\begingroup\$

flex - 312 chars

Q \"
N \n
S " "
B \\
P "Q{S}{B}{Q}{N}N{S}{B}n{N}S{S}{Q}{S}{Q}{N}B{S}{B}{B}{N}P{S}{Q}{P}{Q}{N}M{S}{Q}{M}{Q}{N}%%{N}{P}{N}{M}{N} putchar('1');"
M "(.|{N})* putchar('0');"
%%
Q{S}{B}{Q}{N}N{S}{B}n{N}S{S}{Q}{S}{Q}{N}B{S}{B}{B}{N}P{S}{Q}{P}{Q}{N}M{S}{Q}{M}{Q}{N}%%{N}{P}{N}{M}{N} putchar('1');
(.|{N})* putchar('0');

Can probably be made shorter, but it works with multi-line input (necessary since the source code is multiple lines) and even for inputs that contain the program as a substring. It seems many of the answers so far fail on one or both of these.

Compile command: flex id.l && gcc -lfl lex.yy.c

answered Apr 20, 2013 at 5:18
\$\endgroup\$
3
\$\begingroup\$

D (133 chars)

enum c=q{import std.stdio;import std.algorithm;void main(){auto i=readln();writeln(equal("auto c=q{"~c~"};mixin(c);",i));}};mixin(c);
answered Apr 18, 2013 at 0:59
\$\endgroup\$
3
\$\begingroup\$

JavaScript (V8), 35

function i(){alert(prompt()==i+[])}

call i() and it will prompt for input

answered Apr 18, 2013 at 12:13
\$\endgroup\$
1
  • \$\begingroup\$ The +[] should be optional as JS will auto-type-cast it \$\endgroup\$ Commented Jan 18, 2016 at 18:10
3
\$\begingroup\$

GolfScript - 26

":@;[34]@+2*=":@;[34]@+2*=

Inspired from http://esolangs.org/wiki/GolfScript#Examples

Another version:

"[34].@@;+2*="[34].@@;+2*=

Too bad that \ is both swap and escape...

answered Jan 10, 2014 at 20:39
\$\endgroup\$
3
\$\begingroup\$

Python 2, 47 bytes

_='_=%r;print _%%_==input()';print _%_==input()

A simple quine with the added check.

answered May 14, 2016 at 15:14
\$\endgroup\$
1
  • \$\begingroup\$ This doesn't work. print is a function is Python 3. You'd need to do print(_%%_==input())';print(_%_==input()) or change it to Python 2. \$\endgroup\$ Commented Jul 22, 2016 at 5:52
3
\$\begingroup\$

CJam, 12 bytes

{s"_~"+q=}_~

Try it online!

Explanation

This just uses the standard CJam quine framework.

{s"_~"+q=} e# Push this block (function literal).
 _~ e# Copy and run it.

What the block does:

 s e# Stringify the top element (this block itself).
 "_~"+ e# Append "_~". Now the source code is on the stack.
 q e# Read the input.
 = e# Check if it equals the source code.
answered Jul 14, 2017 at 19:59
\$\endgroup\$
1
  • \$\begingroup\$ This is exactly the solution I had ._. \$\endgroup\$ Commented Mar 27, 2018 at 7:45
3
\$\begingroup\$

Python, 187 bytes

import sys;code="import sys;code=!X!;print(sys.stdin.read()==code.replace(chr(33),chr(34)).replace(!X!,code,1))";print(sys.stdin.read()==code.replace(chr(33),chr(34)).replace("X",code,1))

Careful not to add newline at the end. Someone with better Python-fu might be able to shorten it.

totallyhuman
17.4k3 gold badges34 silver badges89 bronze badges
answered Sep 19, 2015 at 0:36
\$\endgroup\$
2
  • 2
    \$\begingroup\$ You can use C=chr to drop several bytes. Also, shorten the variable name code. \$\endgroup\$ Commented Sep 19, 2015 at 3:06
  • 2
    \$\begingroup\$ Since nobody said it for over a year, Welcome to PPCG! \$\endgroup\$ Commented Oct 16, 2016 at 14:41
2
\$\begingroup\$

Tcl, 111 chars

set c {set c {$c};puts [expr {[read stdin] eq [subst -noc \$c]}]};puts [expr {[read stdin] eq [subst -noc $c]}]
answered Apr 17, 2013 at 15:18
\$\endgroup\$
2
\$\begingroup\$

Perl, 52 char

$_='$/=$\;$_="\$_=47円$_47円;eval";print<>eq$_|0';eval
answered Apr 17, 2013 at 19:35
\$\endgroup\$
2
\$\begingroup\$

Husk, 11 bytes

=hS+s"=hS+s

Try it online!

Explanation

The explanation uses ̈ to delimit strings (to avoid unreadable escaping):

 "=hS+s -- string literal: ̈=hS+s ̈
 S+ -- join itself with
 s -- | itself "showed": ̈"=hS+s" ̈
 -- : ̈=hS+s"=hS+s" ̈
 h -- init: ̈=hS+s"=hS+s ̈
= -- is the input equal?

By removing the function = you can verify that it will indeed only match the source itself.

answered Jan 29, 2018 at 15:00
\$\endgroup\$
2
\$\begingroup\$

Python 2, 40 bytes

s="print's=%r;exec s'%s==input()";exec s

Try it online!

answered Mar 22, 2018 at 22:09
\$\endgroup\$
2
\$\begingroup\$

><>, 24 bytes

'1rd3*i={*}50l3-?.~i)*n;

Try it online!

Wrapping string literal followed by checking whether the input is identical to the stack, with a final check that there is no more input.

answered Mar 23, 2018 at 3:20
\$\endgroup\$
2
\$\begingroup\$

Jelly, 10 bytes

"Ṿ;$="Ṿ;$=

Try it online!

"Ṿ;$="Ṿ;$=
"Ṿ;$=" String literal: 'Ṿ;$='
 $ Next two links act on the string literal
 Ṿ Uneval: '"Ṿ;$="'
 ; Append string: '"Ṿ;$="Ṿ;$=' (source code)
 = Is the string above equal to the input?
answered May 2, 2018 at 18:52
\$\endgroup\$
2
\$\begingroup\$

Zsh, 33 bytes

f () {
	[ "`type -f f`" = 1ドル ]
}

Try it online!

The extra spaces, tab, and newlines are required. type -f f does not print the original source, but the function formatted in a particular way, with indentation and a trailing newline.

answered Sep 9, 2019 at 10:27
\$\endgroup\$
2
\$\begingroup\$

R, 54 bytes

f=function(s)s==paste0("f=function(s)s==", body(f)[3])

Try it online!

body gets the body of the function (splitting it a bit, so that body(f)[3] is everything from paste0 onwards). Interestingly, body reformats the code, adding spaces after commas, etc. This is thus a rare case of an R golf answer with a space after a comma.

This works because body(f) is an object of type language, and there exists an as.character method for this type. On the other hand, f and args(f) are of type closure, and cannot be converted to character type as far as I can tell. Please don't ask me what the language type is for...

answered Sep 9, 2019 at 13:10
\$\endgroup\$
3
  • \$\begingroup\$ As we've noted before, R's code-reformatting is quite version-dependent. My old R version 3.2.1 let's me use f=function(x)x==paste0('f=',capture.output(f)) successfully for only 46 bytes, but the later version in TIO fills it up with annoying spaces & newlines... \$\endgroup\$ Commented Jan 3, 2021 at 11:59
  • \$\begingroup\$ @DominicvanEssen Good find! capture.output works as you would want on my later version of R (3.6.3), but it adds a bytecode at the end. The output is thus a vector of 2 logicals: the first one corresponds to what you want, the second tests equality with the bytecode. I believe this is acceptable: in R, a vector of two logicals is truthy iff the first logical is TRUE (per the definition along the lines of "how would if handle it?). You should post this separately! \$\endgroup\$ Commented Jan 3, 2021 at 15:35
  • \$\begingroup\$ Thanks very much for checking that! It seems that only specific R versions don't work (annoyingly including the one at TIO) - I now tested version 4 and it works Ok, too. So I've posted a separate version-dependent R answer now. \$\endgroup\$ Commented Jan 4, 2021 at 13:59
2
\$\begingroup\$

R (version-dependent), 46 bytes

f=function(x)x==paste0('f=',capture.output(f))

capture.output - as the function name suggests - retrieves the text string that results from entering the function name f directly to R, which should output the body of the function. We manually prepend this with f= so that it exactly* matches the program code, and check whether the function argument x is the same as this.
*See below

There are a couple of caveats, though, that depend on the R version used:

  1. Early versions of R (like my own version 3.2.1) return the originally-defined function body as-is when the function name is entered to R. However, later versions add additional formatting, like inserting spaces and newlines, which breaks this code: this unfortunately includes the installation (3.5.2) on 'Try it online'. Later still, much newer R versions (I tested 4.0.3) return to the as-is output formatting and everything is Ok again... except...
  2. The most recent versions of R compile functions at the first run, and thereafter append a 'byte code' specific for the compiled function to the outputted function body. This means that capture.output returns two strings, beginning at the second time the function is run. Luckily, the function body is still the first one (the byte code is the second one), so the result of supplying the program code as input is TRUE FALSE, which evaluates to 'truthy' in R and so counts as a 'true' output for this challenge.

Special thanks to Robin Ryder for helping to uncover the version-dependence of R's function outputting.

answered Jan 4, 2021 at 12:52
\$\endgroup\$
2
\$\begingroup\$

Vyxal, 12 bytes

`:q$+=`:q$+=

Try it Online!

I finished making this, and then realized that it is almost identical to the Vyxal quine that @Lyxal wrote, but with the addition of = to check if the input is equal.

Explanation:

 # Implicit input
`:q$+=` # Push the string ':q$+='
 : # Duplicate the string
 q # Quotify; put backticks around the topmost string
 $ # Swap the top two values on the stack
 + # Concatenate the two strings
 = # Check if the input is equal to the string
 # Implicit output
answered May 19, 2021 at 20:49
\$\endgroup\$
1
\$\begingroup\$

C - (削除) 186 (削除ここまで) 176 characters

One liner:

 *a="*a=%c%s%c,b[999],c[999];main(){sprintf(b,a,34,a,34);gets(c);putchar(strcmp(b,c)?'0':'1');}",b[999],c[999];main(){sprintf(b,a,34,a,34);gets(c);putchar(strcmp(b,c)?'0':'1');}

With whitespace (note that this breaks the program):

*a="*a=%c%s%c,b[999],c[999];main(){sprintf(b,a,34,a,34);gets(c);putchar(strcmp(b,c)?'0':'1');}",b[999],c[999];
main() {
 sprintf(b,a,34,a,34);
 gets(c);
 putchar(strcmp(b,c)?'0':'1');
}
answered Jan 11, 2014 at 1:17
\$\endgroup\$
1
\$\begingroup\$

Stax, 26 bytes

"34bLN26)s:f="34bLN26)s:f=

Run and debug it

answered Mar 27, 2018 at 4:32
\$\endgroup\$
1
\$\begingroup\$

JavaScript ES6, 14 bytes

Like the other javascript answer but includes it's entire source code and not just the function

a=q=>'a='+a==q

Example usage:

a("q=>'a='+a==q") // returns false
a("a=q=>'a='+a==q") // returns true
answered May 2, 2018 at 18:11
\$\endgroup\$
1
\$\begingroup\$

q, 8 bytes

{x~.z.s}

Return boolean on input matching the self-referential .z.s

answered Sep 30, 2018 at 2:18
\$\endgroup\$
1
2

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.