เขียนโปรแกรมการระบุตนเองที่สั้นที่สุด (ชุดตัวเลือก quine)


57

เขียนโปรแกรมที่จะสร้างเอาต์พุต "true" ถ้า ifตรงกับซอร์สโค้ดของโปรแกรมและสร้างเอาต์พุต "false" ถ้า if อินพุตไม่ตรงกับซอร์สโค้ดของโปรแกรม

ปัญหานี้สามารถอธิบายได้ว่าเกี่ยวข้องกับ quines เนื่องจากโปรแกรมจะต้องสามารถคำนวณซอร์สโค้ดของตนเองในกระบวนการได้

นี่คือรหัสกอล์ฟ: ใช้กฎมาตรฐาน โปรแกรมของคุณจะต้องไม่เข้าถึงไฟล์พิเศษใด ๆ เช่นไฟล์ของซอร์สโค้ดของมันเอง

แก้ไข: หากคุณเลือกตัวเลือกจริง / เท็จสามารถถูกแทนที่ด้วยจริง / เท็จหรือ 1/0

ตัวอย่าง

หากซอร์สโค้ดของโปรแกรมของคุณคือbhiofvewoibh46948732));:/)4นี่คือสิ่งที่โปรแกรมของคุณต้องทำ:

อินพุต (Stdin)

bhiofvewoibh46948732));:/)4

เอาต์พุต (Stdout)

true

อินพุต

(Anything other than your source code)

เอาท์พุต

false

7
เป็นtrue/ falseส่งออกเป็นความต้องการที่แข็งแกร่งหรือมีรูปแบบ ( True/ False, 1/ 0) ได้รับการยอมรับเป็นอย่างดี?
Cristian Lupascu

มันเป็นปัญหาหรือไม่หากโปรแกรมส่งออกมากกว่า / จริงเล็กน้อย (ถ้ามันยังคงคลุมเครือและลงท้ายด้วยจริง / เท็จ)?
Denys Séguret


5
ดังนั้นคุณหมายถึงโปรแกรม Narcissist ใช่ไหม
PyRulez

คำตอบ:


33

จาวาสคริปต์: 26

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

ฉันไม่รู้ว่าไฟล์ JavaScript มีคุณสมบัติเป็น "โปรแกรม" จริงหรือไม่



สิ่งนี้สามารถทำให้สั้นลงได้โดยใช้ฟังก์ชั่นลูกศรf=s=>s=='f='+f
Jonathan

2
@ โจนาธานใช่ แต่ในปี 2013 มันไม่สามารถ ...
Denys Séguret

19

JavaScript ES6, 9 ตัวอักษร

นี่เป็นวิธีเดียวที่ (กอล์ฟ) ที่จะทำใน JS ES6 ทำให้มันใช้อักขระน้อยลงสุด ๆ

เรียกใช้สิ่งนี้ในเว็บคอนโซลของ Firefox ล่าสุด:

f=x=>f==x

ตัวอย่างการใช้งาน:

f("check") // returns false
f("x=>f==x") // returns true

1
@phinotpi - ฉันยังมีสิทธิ์ได้รับเลือกเป็นคำตอบหรือไม่
เครื่องมือเพิ่มประสิทธิภาพ

6
อาจเป็นที่ถกเถียงกันอยู่ว่าแหล่งที่มาในกรณีนี้คือf=x=>f==xและไม่ใช่x=>f==xในขณะที่รุ่นของ Denys Séguretตรวจสอบแหล่งที่มาทั้งหมด
Hankrecords

@Hankrecords ให้ JavaScript เป็นผู้ตัดสินเอง f=x=>f==x function f() f.toSource() "x=>f==x"(โดยทั่วไปประเมินโค้ดในคอนโซลแล้วประเมินf.toSource()ในเบราว์เซอร์ที่รองรับวิธีดังกล่าว
เครื่องมือเพิ่มประสิทธิภาพ

ไม่อนุญาตให้ใช้งานแบบไม่ระบุชื่อ (ย่อรหัสของคุณเป็นx=>f==x) แก้ไข: ไม่เป็นไร f ถูกอ้างอิงภายในฟังก์ชัน
MilkyWay90

9

Haskell, 72 ตัวอักษร

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

หมายเหตุ: ไม่มีอักขระสิ้นสุดบรรทัดที่ท้ายสคริปต์

$ runhaskell Self.hs < Self.hs
True

8

GolfScript 11 ตัวอักษร

{`".~"+=}.~

หากไม่มี=รหัสนี้จะเป็นควินที่สร้างรหัสต้นฉบับของตัวเองเป็นสตริง =ทำให้มันเปรียบเทียบสตริงนี้เพื่อเข้าและส่งออกของมัน1ถ้าพวกเขาจับคู่และ0ถ้าพวกเขาทำไม่ได้ โปรดทราบว่าการเปรียบเทียบนั้นถูกต้อง - โดยเฉพาะอย่างยิ่งการขึ้นบรรทัดใหม่ที่ส่วนท้ายของอินพุตจะทำให้การล้มเหลว

คำอธิบาย:

  • { } เป็นตัวบล็อกรหัสตัวอักษรใน GolfScript
  • .ทำซ้ำบล็อกรหัสนี้และ~ดำเนินการสำเนาที่สอง (ทิ้งแรกในกองซ้อน);
  • `stringizes บล็อกรหัสและ".~"+ ผนวก.~กับมัน;
  • ในที่สุด=เปรียบเทียบสตริงผลลัพธ์กับอินพุต (ซึ่งถูกพุชบนสแต็กเป็นสตริงโดยล่าม GolfScript ก่อนที่โปรแกรมจะเริ่มทำงาน) และส่งคืน1ถ้าจับคู่และ0หากไม่ตรงกัน

7

Perl, Infinity 41 38 ตัวละคร

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

อัปเดต:โปรแกรมจะไม่ลงท้ายด้วย newline อีกต่อไปซึ่งหมายความว่าโปรแกรมจะทำงานอย่างถูกต้องกับไฟล์หลายบรรทัด คุณต้องป้อนข้อมูลจาก STDIN โดยไม่ต้องกดปุ่ม Enter บน Windows ฉันสามารถทำได้โดยการอ่านจากไฟล์

ทางออกเดิม:

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(...

1
ทำได้ดีมาก! . . .
mob

ล้มเหลวสำหรับไฟล์ที่ขึ้นต้นด้วยรหัสเช่น(cat id.pl; echo foo)|perl id.pl
Geoff Reedy

@GeoffReedy ขอบคุณ; โปรแกรมไม่ได้จัดการอินพุตหลายบรรทัดมาก่อน ได้รับการแก้ไขแล้ว

Darn โบว์ลิ่งนี้เป็นรหัสหรือไม่
Matthew Roh

7

> <> , 68 ไบต์

ปลาชอบกินปลาเซ่อ ตอนนี้เรารู้แล้วว่าพวกเขาสามารถแยกแยะความแตกต่างจากเพื่อนของพวกเขาได้

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

คุณสามารถลองออนไลน์ได้ !


1
เอาต์พุตนี้1สำหรับส่วนนำหน้าของโค้ดเช่นกัน
Jo King

@ โจกิ้งมันแย่ที่สุดกว่าเพียงแค่คำนำหน้าของสคริปต์มันก็ยอมรับบรรทัดที่ถูกตัดทอนด้วย! ฉันแก้ไขแล้ว แต่ฉันผิดหวังที่ไม่ใช่สามัญเหมือนที่ฉันต้องการฉันต้องตรวจสอบเซลล์ที่เข้าถึงได้ในตอนท้ายของสคริปต์เพื่อให้แน่ใจว่ารหัสทั้งหมดตรงกัน สามารถปรับปรุงได้อย่างแน่นอน แต่ฉันไม่แน่ใจว่าฉันจะรบกวน
Aaron

6

Python 2, 55

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

การทดสอบ:

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

(anything else) -> False


3
ล้มเหลวในไฟล์ใด ๆ a='a=%r;print a%%a==raw_input()';print a%a==raw_input()ที่ขึ้นต้นด้วยบรรทัดแรกเท่ากับ
บูธโดย

True ไม่รองรับอินพุตหลายบรรทัด
flornquake

การแก้ไขเล็กน้อยจะแทนที่ด้วยraw_input() __import__('sys').stdin.read()
feersum

ฉันสับสนกับถ้อยคำท้าทาย (เพราะฉันไม่เก่งในด้านไวยากรณ์ภาษาอังกฤษ) สิ่งนี้ได้รับอนุญาตหรือไม่? print raw_input()==open(__file__).read()? มีขนาดเพียง 40 ไบต์ใช้raw_input()แนวทางของคุณแต่อ่านรหัส
Simon

1
@Simon ที่ไม่ได้รับอนุญาตมันเป็นหนึ่งในช่องโหว่มาตรฐานสำหรับความท้าทายเช่นนี้ และใช่นี่คือความหมายโดยYour program must not access any special files, such as the file of its own source code.
PunPun1000

6

JavaScript ES6, 16 14 ไบต์

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

ลบสองไบต์ด้วย Neil

31 ไบต์ถ้าเราต้องป้อนข้อมูลผ่านทางพรอมต์

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

38 ไบต์ถ้าเราต้องส่งออกผ่านการแจ้งเตือน

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

นี่เป็นวิธีที่เหมาะสมในการทำเช่นนี้เนื่องจากคำตอบของเครื่องมือเพิ่มประสิทธิภาพไม่ยอมรับซอร์สโค้ดทั้งหมด


1
ดี '$='+$แต่ฉันก็จะเขียน
Neil

โอ้จริง @Neil
Conor O'Brien

1
ฉันค่อนข้างมั่นใจว่าคุณต้องจบ;$()เพราะการเรียกใช้ฟังก์ชันเป็นส่วนหนึ่งของควินิน นอกจากนี้ยังหมายความว่าคุณจะต้องเปลี่ยนpromptไปใช้บัญชีสำหรับอินพุต
Mama Fun Roll

1
นั่นไม่ใช่ปัญหา การเรียกใช้ฟังก์ชันจำเป็นเนื่องจากเป็นส่วนหนึ่งของควินิน การอนุญาตให้ผู้ใช้เรียกมันว่าเป็นฟังก์ชั่นจะทำลายควินิน
Mama Fun Roll

1
ลอง$=_=>prompt()==`$=${$};$()`;$()
Mama Fun Roll

5

Node.js: 54

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

คุณทดสอบด้วยการบันทึกลงในไฟล์f.js(ชื่อที่แน่นอนไม่มีความสำคัญ) และการใช้

node f.js "test"

(ผลลัพธ์ใดเป็นเท็จ) หรือ

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

(ซึ่งเป็นผลจริง)

ฉันทำเวอร์ชันที่ต่างออกไปตาม eval:

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

ตอนนี้อยู่ที่ 72 ตัวอักษรฉันจะพยายามย่อให้สั้นลงเมื่อฉันมีเวลา


1
@ dan1111 ทำไม ไม่สามารถเข้าถึงไฟล์ใด ๆ ฉันแค่ชี้วิธีการเปิดตัวโปรแกรมให้กับคนที่ไม่คุ้นเคยกับ node.js ไม่อ่านไฟล์
Denys Séguret

1
โซลูชัน Javascript ทั้งหมดใช้ประโยชน์จากข้อเท็จจริงที่ว่าคุณสามารถเข้าถึงซอร์สโค้ดของคุณเองใน JS นั่นอาจไม่ใช่เทคนิค "เข้าถึงไฟล์ของซอร์สโค้ดของมันเอง" แต่มันก็ทำสิ่งเดียวกันได้สำเร็จ ฉันคิดว่าคำตอบของคุณถูกกฎหมายเพราะคำถามไม่ได้ห้ามเรื่องนี้โดยเฉพาะ

ดีคุณเข้าถึงแหล่งที่มาของฟังก์ชั่น (เฉพาะร่างกายที่จะแม่นยำ) ซึ่งเป็นส่วนหนึ่งของโปรแกรม นั่นเหมือนกับการใช้ mixin () ใน D แต่ฉันไม่คิดว่าคำตอบ JS อีกสองคำรวมถึงคำตอบเดียวจากฉันถือว่าเป็น "โปรแกรม" จริงๆ
Denys Séguret

@dystroy จริง ๆ แล้ว mixin ใน D นั้นเหมือนกับการใช้ eval มากกว่าแหล่งอ่าน
ratchet freak

@ ratchetfreak ใช่คุณพูดถูก แต่ฉันคิดว่าโปรแกรมของคุณใช้ toString ชนิด enum value ใช่ไหม และรหัสใด ๆ ที่ใช้ eval / mixin นั้นมีเคล็ดลับเท่ากันกว่าการใช้ซอร์สของฟังก์ชัน
Denys Séguret

5

สมอลล์ทอล์ค (ภาษา Pharo 2.0)

ใช้วิธีนี้41ตัวอักษรใน String (การจัดรูปแบบที่น่าเกลียดสำหรับ code-golf):

isItMe^self=thisContext method sourceCode

จากนั้นประเมินสิ่งนี้ในเวิร์กสเปซ (พิมพ์เป็นวิธี Smalltalk แบบดั้งเดิม)
อินพุตไม่ได้ถูกอ่านจาก stdin เป็นเพียงสตริงที่เราส่งข้อความ

'isItMe^self=thisContext method sourceCode' isItMe.

แต่เรากำลังโกงซอร์สโค้ดอ่านไฟล์ต้นฉบับบางส่วน ...
นี่คือตัวแปรที่มี51ตัวอักษรซึ่งไม่ได้:

isItMe
    ^ self = thisContext method decompileString

และทดสอบด้วย:

'isItMe
    ^ self = thisContext method decompileString' isItMe

หาก String ในพื้นที่ทำงานไม่ถือว่าเป็นอินพุตที่ถูกต้องลองมาดูวิธีใช้กล่องโต้ตอบบางกล่องใน116ตัวอักษร
เพียงแค่ประเมินประโยคนี้:

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

เนื่องจากรูปแบบการถอดรหัสรวมถึง CR และ TAB เราจึงเปลี่ยนด้วยตัวแยกที่บีบอัด
จากนั้นเราข้าม 7 ตัวอักษรแรกคือ 'doIt ^'

ในที่สุดตัวแปร105ตัวอักษรโดยใช้ stdin เพียงตีความประโยคนี้จากบรรทัดคำสั่งเพื่อให้รู้สึกถึงกระแสหลักมากขึ้น:

Pharo -headless Pharo-2.0.image eval "FileStream stdin nextLine = (thisContext method decompileString withSeparatorsCompacted allButFirst: 7)"

4

ดิ้น - 312 ตัวอักษร

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');

อาจทำให้สั้นลงได้ แต่ทำงานกับอินพุตหลายบรรทัด (จำเป็นเนื่องจากซอร์สโค้ดมีหลายบรรทัด) และแม้กระทั่งอินพุตที่มีโปรแกรมเป็นซับสตริง ดูเหมือนว่าหลายคำตอบจะล้มเหลวในหนึ่งหรือทั้งสองนี้

รวบรวมคำสั่ง: flex id.l && gcc -lfl lex.yy.c





3

Python 2, 47 ไบต์

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

ง่าย ๆ ด้วยการตรวจสอบเพิ่ม quine


มันใช้งานไม่ได้ printเป็นฟังก์ชั่นคือ Python 3 คุณจะต้องทำprint(_%%_==input())';print(_%_==input())หรือเปลี่ยนเป็น Python 2
Mego

3

CJam , 12 ไบต์

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

ลองออนไลน์!

คำอธิบาย

สิ่งนี้ใช้เฟรมเวิร์กของ CJam มาตรฐาน

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

บล็อกทำอะไร:

 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.

นี่เป็นทางออกที่ฉันมี
แยกผลไม้



2

Python ขนาด 187 ไบต์

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))

ระวังอย่าเพิ่มบรรทัดใหม่ในตอนท้าย คนที่มี Python-fuels ที่ดีกว่าอาจสามารถย่อให้สั้นลงได้


2
คุณสามารถใช้C=chrเพื่อวางหลายไบต์ codeนอกจากนี้ยังร่นชื่อตัวแปร
Zach Gates

2
เนื่องจากไม่มีใครพูดมานานกว่าหนึ่งปียินดีต้อนรับสู่ PPCG!
Erik the Outgolfer

2

Huskขนาด 11 ไบต์

=hS+s"=hS+s

ลองออนไลน์!

คำอธิบาย

คำอธิบายใช้¨เพื่อกำหนดเขตสตริง (เพื่อหลีกเลี่ยงการหลบหนีไม่สามารถอ่าน):

     "=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?

โดยการลบฟังก์ชั่น=คุณสามารถตรวจสอบว่ามันจะตรงกับแหล่งที่มาเท่านั้น


2

> <> , 24 ไบต์

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

ลองออนไลน์!

การตัดสตริงตามตัวอักษรตามด้วยการตรวจสอบว่าอินพุตเหมือนสแต็กหรือไม่โดยการตรวจสอบครั้งสุดท้ายว่าไม่มีอินพุตอีกต่อไป



2

05AB1E , 15 ไบต์

0"D34çýQ"D34çýQ

ปรับเปลี่ยนค่าเริ่มต้น 0"D34çý"D34çýโดยการเพิ่มQ(ตรวจสอบเพื่อความเท่าเทียมกันกับการป้อนข้อมูลโดยปริยาย)

ลองออนไลน์

คำอธิบาย:

0                # Push 0 to the stack
                 #  STACK: [0]
 "D34çýQ"        # Push the string 'D34çýQ' 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å']
              Q  # Check if it's equal to the (implicit) input
                 # (and output the top of the stack implicitly as result)

มีตัวเลือก15 ไบต์ให้บริการโดย@Grimy :

187745012D27BJQ

ลองออนไลน์

คำอธิบาย:

187745012        # Push integer 187745012 
                 #  STACK: [187745012]
         D       # Duplicate it
                 #  STACK: [187745012, 187745012]
          27     # Push integer 27
                 #  STACK: [187745012, 187745012, 27]
            B    # Convert 187745012 to base-27
                 #  STACK: [187745012, "D27BJQ"]
             J   # Join the values on the stack together
                 #  STACK: ["187745012D27BJQ"]
              Q  # Check if it's equal to the (implicit) input
                 # (and output the top of the stack implicitly as result)

3
187745012D27BJQเป็นเน็คไท
Grimmy

1

C - 186 176 ตัวอักษร

หนึ่งในสายการบิน:

 *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');}

ด้วยช่องว่าง (โปรดทราบว่านี่เป็นการแบ่งโปรแกรม):

*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');
}




1

Runicขนาด 11 ไบต์

"3X4+kSqi=@

ลองออนไลน์!

TIO ได้รับการอัปเดตแล้วและไม่มีปัญหาในการอ่านอินพุตอีกต่อไป (และไม่ต้องการช่องว่างต่อท้ายอีกต่อไป)

คำอธิบาย

>                 Implicit entry
 "                Begin reading as string
  3X4+kSqi=@      Pushed to the stack as a string, loop around
 "                End reading as string
  3X4+            Push 3*10 and 4 to the stack, add them together
      k           Convert to character (")
       S          Swap the top two items on the stack
        q         Concatenate. This leaves only "3X4+kSqi=@ on the stack
         i        Read input
          =       Compare using .Equals, push 1 if equal, else 0
           @      Print and terminate

โซลูชันของ JoKing:

"'<~qi=@|

คำอธิบาย

  <              Entry
 '               Read character (loop around)
"                Push "
         |       Mirror
"                Begin reading string (loop around)
 '<~ri=@|        Push the string '<~qi=@| (loop around)
"                End reading string
 '<~             Push the character < and then discard it
    q            Concatenate, stack contains only "'<~qi=@|
      i          Read input
       =         Compare
        @        Print and terminate


@ โจกิ้งฉลาดมาก
Draco18s

อันที่จริงแล้ว9 ไบต์หลีกเลี่ยงข้อrโต้แย้ง
โจคิง

@JoKing ฉันอาจจะได้รับสามารถที่จะมาถึงที่ (จากการแก้ปัญหา 10 ไบต์) ตัวเอง แต่ฉันไม่ได้มีของฉันcawfeeเลย ฉันได้ออกกำลังไปเมื่อวานนี้ว่าการมี"ทางด้านซ้ายเป็นที่เดียวที่สามารถไปได้จริง ๆ (แต่ตอนนี้ฉันต้องทำงานในดีบักเกอร์ของฉันเพื่อดูว่ามันทำอะไรอยู่ ... )
Draco18s

1

R , 54 ไบต์

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

ลองออนไลน์!

bodyได้รับร่างกายของฟังก์ชัน (แยกมันเล็กน้อยเพื่อให้body(f)[3]เป็นทุกอย่างจากpaste0เป็นต้นไป) ที่น่าสนใจคือทำการbodyฟอร์แมตโค้ดเพิ่มช่องว่างหลังเครื่องหมายจุลภาค ฯลฯ นี่จึงเป็นกรณีที่หายากของคำตอบ R golf ที่มีช่องว่างหลังเครื่องหมายจุลภาค

ใช้งานได้เนื่องจากbody(f)เป็นวัตถุประเภทlanguageและมีas.characterวิธีการสำหรับประเภทนี้อยู่ ในทางตรงกันข้ามfและargs(f)เป็นประเภทclosureและไม่สามารถแปลงเป็นประเภทตัวละครเท่าที่ฉันสามารถบอกได้ โปรดอย่าถามฉันว่าประเภทภาษานี้สำหรับ ...


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.