Narcissist: Difference between revisions

From Rosetta Code
Content added Content deleted
(J)
Line 21: Line 21:
Based upon the quine. Reads until EOF or newline from stdin, and writes "1" or "0" to stdout.
Based upon the quine. Reads until EOF or newline from stdin, and writes "1" or "0" to stdout.
<lang c>extern void*stdin;main(){ char*p = "extern void*stdin;main(){ char*p = %c%s%c,a[300],b[300];sprintf(a,p,34,p,34);fgets(b,300,stdin);putchar(48+!strcmp(a,b)); }",a[300],b[300];sprintf(a,p,34,p,34);fgets(b,300,stdin);putchar(48+!strcmp(a,b)); }</lang>
<lang c>extern void*stdin;main(){ char*p = "extern void*stdin;main(){ char*p = %c%s%c,a[300],b[300];sprintf(a,p,34,p,34);fgets(b,300,stdin);putchar(48+!strcmp(a,b)); }",a[300],b[300];sprintf(a,p,34,p,34);fgets(b,300,stdin);putchar(48+!strcmp(a,b)); }</lang>
=={{header|J}}==
<lang j>#!/j602/bin/jconsole
main=:3 : 0
self=: '#!/j602/bin/jconsole',LF,'main=:',(5!:5<'main'),LF,'main''''',LF
echo self -: stdin''
)
main''</lang>

Example use:

<lang>$ ./narcissist.ijs <narcissist.ijs
1
</lang>

Note that this assumes a suitable os command line.


=={{header|JavaScript}}==
=={{header|JavaScript}}==

Revision as of 16:03, 24 September 2010

Narcissist is a programming puzzle. It lays out a problem which Rosetta Code users are encouraged to solve, using languages and techniques they know. Multiple approaches are not discouraged, so long as the puzzle guidelines are followed. For other Puzzles, see Category:Puzzles.

Quoting from the Esolangs wiki page:

A narcissist (or Narcissus program) is the decision-problem version of a quine.

A quine, when run, takes no input, but produces a copy of its own source code at its output. In contrast, a narcissist reads a string of symbols from its input, and produces no output except a "1" or "accept" if that string matches its own source code, or a "0" or "reject" if it does not.

For concreteness, in this task we shall assume that symbol = character. The narcissist should be able to cope with any finite input, whatever its length. Any form of output is allowed, as long as the program always halts, and "accept", "reject" and "not yet finished" are distinguishable.

ALGOL 68

Works with: ALGOL 68 version Revision 1 - no extensions to language used
Works with: ALGOL 68G version Any - tested with release 1.18.0-9h.tiny

<lang algol68>STRINGs="STRINGs="";print(readstring=2*s[:9]+2*s[9:])";print(readstring=2*s[:9]+2*s[9:])</lang> Output: T or F depending on input.

C

Based upon the quine. Reads until EOF or newline from stdin, and writes "1" or "0" to stdout. <lang c>extern void*stdin;main(){ char*p = "extern void*stdin;main(){ char*p = %c%s%c,a[300],b[300];sprintf(a,p,34,p,34);fgets(b,300,stdin);putchar(48+!strcmp(a,b)); }",a[300],b[300];sprintf(a,p,34,p,34);fgets(b,300,stdin);putchar(48+!strcmp(a,b)); }</lang>

J

<lang j>#!/j602/bin/jconsole main=:3 : 0

 self=: '#!/j602/bin/jconsole',LF,'main=:',(5!:5<'main'),LF,'main,LF
 echo  self -: stdin

) main</lang>

Example use:

<lang>$ ./narcissist.ijs <narcissist.ijs 1

  </lang>

Note that this assumes a suitable os command line.

JavaScript

Works with: SpiderMonkey version 1.7.0

Based upon one of the quines. Outputs 'true' if source is equal to inputted line (newline terminated), 'false' otherwise. <lang javascript>var code='var q=String.fromCharCode(39);print("var code=" + q + code + q + "; eval(code)" == readline())'; eval(code)</lang>

Tcl

With the use of explicit reflexive introspection: <lang tcl>apply {{} {puts [expr {[gets stdin] eq [info level 0]}]}}</lang> Without such commands, using pure generation of strings and lists: <lang tcl>apply {s {puts [expr {[gets stdin]eq[list {*}$s $s]}]}} {apply {s {puts [expr {[gets stdin]eq[list {*}$s $s]}]}}}</lang>