2 Cats in Quine


30

ท้าทาย

สร้างสองโปรแกรมคือ A และ B ซึ่งเป็นทั้งโปรแกรม cat ในภาษาเดียวกัน เมื่อต่อกัน AB (ในภาษาเดียวกัน) ควรเป็น quine

ตัวอย่างเช่นสมมติว่าhelloและworldมีทั้งโปรแกรมแมวในภาษา XYZ หากhelloworldเป็นควินในภาษาดังกล่าวแสดงว่าการแก้ปัญหาของคุณถูกต้อง

สำหรับผู้ที่คุณไม่คุ้นเคยกับแมวและควินินโปรแกรมแมวเป็นโปรแกรมที่พิมพ์สิ่งที่ได้รับจาก stdin และ quine เป็นโปรแกรมที่พิมพ์ซอร์สโค้ดของมันเอง

เกณฑ์การให้คะแนนและกฎ

  • จำนวนไบต์ทั้งหมดของโปรแกรมเชื่อมต่อ AB คือคะแนนของคุณ เช่นนี้เป็นรหัสกอล์ฟคะแนนต่ำสุดชนะ
  • ช่องโหว่มาตรฐานเป็นสิ่งต้องห้าม
  • อินพุตต้องถูกนำมาจาก stdin และเอาต์พุตต้องไปที่ stdout
  • โปรแกรม cat ไม่จำเป็นต้องทำการโต้แย้ง พวกเขาเพียงต้องการคัดลอก stdin ไปยัง stdout
  • ควินินควรทำงานเมื่อโปรแกรมไม่ได้รับอินพุต แต่ไม่ต้องทำงานอย่างถูกต้อง (แต่อาจ) สำหรับอินพุตอื่น
  • ควินินไม่จำเป็นต้องยกเลิกหากมันพิมพ์รหัสแหล่งที่มาเพียงครั้งเดียวไม่มีอะไรเพิ่มเติม
  • ควินินต้องมีความยาวอย่างน้อยหนึ่งไบต์
  • A และ B สามารถเป็นโปรแกรมเดียวกันได้
  • BA ไม่จำเป็นต้องเป็น quine หรือแม้แต่โปรแกรมที่ถูกต้อง

ฉันไม่คิดว่าคุณควรมี A และ B สามารถเป็นกฎโปรแกรมเดียวกัน
Muhammad Salman

2
@MuhammadSalman ความคิดดั้งเดิมของฉันคือการมีโปรแกรมแมวสองเท่าที่จะกลายเป็นควินิน ฉันแค่ต้องการเปิดประตูเพื่อแก้ปัญหาที่ง่ายขึ้นเพราะฉันไม่แน่ใจว่ามันเป็นไปได้ทั้งหมด ดูเหมือนว่าฉันผิดทั้งสองนับ แต่ฉันไม่เป็นไร
Beefster

3
คุณควรเพิ่มที่ABไม่ว่างเปล่าเนื่องจากภาษาจำนวนมากมีแมวขนาด 0 ไบต์ที่อนุญาตให้มีขนาด 0 ไบต์
DJMcMayhem

9
@DJMcMayhem quine 0 ไบต์จะไม่เป็น quine ที่ถูกต้อง
Nissa

4
โปรแกรมแมวคืออะไร
เปโดร A

คำตอบ:


32

V , 2 + 2 == 4 ไบต์

2i2i

ลองควินิน!

ลองแมว!

Aคือ2i

Bยังเป็น2i

มันทำงานยังไง?

ก่อนอื่นคำอธิบายบางอย่างเกี่ยวกับวิธีการทำงานของ V สิ่งหนึ่งที่น่าสังเกตที่ทำให้คำตอบนี้เป็นไปได้คือใน V โปรแกรมที่ว่างเปล่าคือโปรแกรม cat นี่ไม่ใช่กรณีพิเศษ แต่เป็นไปตามวิธีการทำงานของ V เมื่อเริ่มต้นอินพุตทั้งหมดจะถูกโหลดลงใน "บัฟเฟอร์" แต่ละคำสั่งจะปรับเปลี่ยนบัฟเฟอร์ในบางครั้งจากนั้นเมื่อโปรแกรมเสร็จสิ้นบัฟเฟอร์จะถูกพิมพ์โดยปริยาย ซึ่งหมายความว่าสตริงของ NOP ใด ๆ ก็เป็นโปรแกรม cat

iคำสั่งวิธีการใส่แทรกโหมดซึ่งหมายความว่าต่อไปนี้ตัวละครทุกiจะถูกเพิ่มลงในบัฟเฟอร์ ด้วยตัวเลขที่อยู่ข้างหน้าข้อความนั้นจะถูกทำซ้ำnครั้ง

ซึ่งหมายความว่าสำหรับโปรแกรม cat จะไม่มีการเพิ่มสิ่งใดลงในบัฟเฟอร์และจะถูกพิมพ์ตามที่อ่าน ในคำอื่น ๆ :

        " (Implicitly) Load all input
2       " 2 times,
 i      " Insert the following text into the buffer...
        " (nothing)
        " (Implicitly) Print the buffer

แต่สำหรับควินินมีข้อความหลังจากi:

2       " 2 times,
 i      " Insert the following text into the buffer...
  2i    "   "2i"
        " (Implicitly) Print the buffer

Cheeky ไม่ใช่คำตอบ

V , 0 ไบต์

ลองออนไลน์!

Aเป็นโปรแกรมเปล่า

Bเป็นโปรแกรมที่ว่างเปล่า

: P


21
ภาษาอื่น ๆ ทุกภาษา: Oy เราตายไปแล้ว! . V: * โพสต์ควินมาตรฐาน *
Erik the Outgolfer

13

Ruby, 71 ไบต์

2;puts (<<2*2+?2)[/.+2/m]||$<.read
2;puts (<<2*2+?2)[/.+2/m]||$<.read
2

สามารถแบ่งออกเป็นแมวดังนี้:

2;puts (<<2*2+?2)[/.+2/m]||$<.read
2

และ

;puts (<<2*2+?2)[/.+2/m]||$<.read
2

แมวสองตัวนั้นเหมือนกันยกเว้นตัวที่ 2 ชั้นนำซึ่งเป็นตัวเลือกที่ไม่มีในโปรแกรมทั้งสาม The <<2herestring หมายถึงทุกสิ่งทุกอย่างที่เริ่มต้นในบรรทัดถัดไปจนกระทั่ง 2 สิ้นสุดในบรรทัดของมันคือสตริงซึ่งเราเชื่อมต่อกับตัวเอง ( *2) และผนวกท้าย 2 ในแมว herestring นั้นมีรูปแบบที่ดี แต่ว่างเปล่า ดังนั้นการแสดงออกปกติจะไม่ตรงกับมันและเราจะผ่านการ$<.readแสดงออกและการส่งออก STDOUT เมื่อเราต่อแมวเข้าด้วยกันสตริงจะไม่หยุดจนกว่าบรรทัดที่สามดังนั้น regex จะจับคู่กันและเราลัดวงจรและออกควินิน


11

Pyth, 29 ไบต์ (5 + 24) 27 ไบต์ (5 + 22)

pz=T0?TzjN*2]"pz=T0?TzjN*2]     # Quine
pz=T0                           # Cat A
     ?TzjN*2]"pz=T0?TzjN*2]     # Cat B

นั้นน่าสนุก.
ลองควินที่นี่
ลองแมวตัวแรกที่นี่
ลองแมวตัวที่สองที่นี่

คำอธิบาย

Cat A
pz=T0
pz       Print the input.
  =T0    (Irrelevant for cat)

Cat B
?TzjN*2]"pz=T0?TzjN*2]
?Tz                      If T (10) is truthy, output the input.
   jN*2]"pz=T0?TzjN*2]   (Irrelevant for cat)

Quine
pz=T0?TzjN*2]"pz=T0?TzjN*2]
pz                            Print the (empty) input (without a newline).
  =T0                         Set T to 0.
     ?Tz                      If T (0) is truthy, output the input.
             "pz=T0?TzjN*2]   Otherwise, get this string...
          *2]                 ... take two copies...
        jN                    ... and join them with a quote.

11

C # (คอมไพเลอร์ Visual C #) , 551 ไบต์

A: 95 ไบต์

class A{public static int i=2;static void Main(string[]args){System.Console.Write(args[0]);}}//

ลองออนไลน์!

B: 438 + 18 ไบต์

class A{public static int i=0;}
class B{static void Main(string[]args){if(A.i<1){System.Console.Write(args[0]);return;}var a=@"class A{{public static int i=2;static void Main(string[]args){{System.Console.Write(args[0]);}}}}//class A{{public static int i=0;}}
class B{{static void Main(string[]args){{if(A.i<1){{System.Console.Write(args[0]);return;}}var a=@{0}{1}{0};System.Console.Write(a,'{0}',a);}}}}";System.Console.Write(a,'"',a);}}

ลองออนไลน์!

A + B: 533 + 18 ไบต์

class A{public static int i=2;static void Main(string[]args){System.Console.Write(args[0]);}}//class A{public static int i=0;}
class B{static void Main(string[]args){if(A.i<1){System.Console.Write(args[0]);return;}var a=@"class A{{public static int i=2;static void Main(string[]args){{System.Console.Write(args[0]);}}}}//class A{{public static int i=0;}}
class B{{static void Main(string[]args){{if(A.i<1){{System.Console.Write(args[0]);return;}}var a=@{0}{1}{0};System.Console.Write(a,'{0}',a);}}}}";System.Console.Write(a,'"',a);}}

ลองออนไลน์!

A และ B รับอินพุตเป็นอาร์กิวเมนต์บรรทัดคำสั่ง A + B จะละเว้นอินพุตใด ๆ 18 ไบต์บน B และ A + B จะถูกเพิ่มสำหรับ/p:StartupObject=Bตัวเลือกที่ส่งไปยัง MSBuild มันจำเป็นอย่างยิ่งสำหรับ A + B เท่านั้น แต่ดูเหมือนว่าการโกงไม่มีใน B ด้วยวิธีนี้แฟล็กคอมไพเลอร์สำหรับ A + B คือแฟล็กคอมไพเลอร์สำหรับ A (none) บวกกับคอมไพเลอร์แฟล็กสำหรับ B

คำอธิบาย

โปรแกรม A ตรงไปตรงมา คลาส A มีตัวแปรแบบคงที่ (ไม่ได้ใช้) iเริ่มต้น2และพิมพ์อาร์กิวเมนต์แรกเมื่อเรียกใช้ //ที่สิ้นสุดเป็นสิ่งสำคัญสำหรับรหัส A + B แต่ไม่ทำอะไรเลยในตัวเอง

โปรแกรม B นั้นแปลกแยกกัน แต่โดยพื้นฐานแล้วจะเหมือนกัน มันสร้างคลาส A ที่มีตัวแปรสแตติกiเริ่มต้น0แล้วและเรียกใช้วิธีการหลักของ Class B ซึ่งทำเช่นเดียวกับโปรแกรม A เพราะA.iน้อยกว่า 1 และส่งกลับก่อนสิ่งแปลก ๆ ไม่จำเป็นต้องขึ้นบรรทัดใหม่ที่นี่ แต่มีความสำคัญสำหรับ A + B

เมื่อรวมกันแล้ว//โปรแกรมจากความคิดเห็นจะประกาศคลาส A จากโปรแกรม B แต่เนื่องจากบรรทัดใหม่ของคลาส B นั้นใช้ได้การอนุญาตให้A.iอ้างถึง2ค่าจากโปรแกรม A แทน ธงคอมไพเลอร์ทำให้โปรแกรมรัน B.Main () เนื่องจาก A.Main () ก็มีอยู่เช่นกัน ผลลัพธ์ก็คือโปรแกรม A + B จะไม่เอาท์พุทอาร์กิวเมนต์ แต่ไปที่เซ็กเมนต์ต่อไปนี้ของ B.Main () ซึ่งโดยพื้นฐานแล้วเป็นเพียงC # quineมาตรฐาน


1
"โปรแกรม cat ... ต้องคัดลอก stdin ไปยัง stdout"
Jakob

9

Haskell , 116 + 20 = 187 175 174 136 ไบต์

จำนวนไบต์ที่บันทึกไว้ตั้งแต่Ørjan Johansen แสดงให้ฉันเห็น interact

แมว 1

g=";main|idmain<-(++\"g=\"++show g++g)=interact idmain|1>0=interact id";main|idmain<-(++"g="++show g++g)=interact id

ลองออนไลน์!

แมว 2

main|1>0=interact id

ลองออนไลน์!

ควิน

g=";main|idmain<-(++\"g=\"++show g++g)=interact idmain|1>0=interact id";main|idmain<-(++"g="++show g++g)=interact idmain|1>0=interact id

ลองออนไลน์!


หลักการพื้นฐานที่ทำงานที่นี่ก็คือว่าเมื่อเราเพิ่มแมวที่สองไปที่แรกที่เราเปลี่ยนชื่อของฟังก์ชั่นที่เรากำลังมีปฏิสัมพันธ์กับผู้จากไปa idmainเนื่องจากinteract idเป็นแมวที่เราต้องการidmainให้ฉันฟังก์ชั่นที่ส่งกลับควินิน วิธีแก้ปัญหาที่ชัดเจนคือการใช้constอย่างไรก็ตามเนื่องจากเราสามารถสมมติว่าอินพุตเป็น(++)งานที่ว่างเปล่าเช่นกัน จากที่นี่เราพบซอร์สโค้ดด้วยวิธีมาตรฐานที่สวยงามเรามีตัวแปรgที่เข้ารหัสซอร์สและเราใช้ wrapper พิเศษเพื่อพิมพ์ในรูปแบบสตริงและรูปแบบโค้ด interact idมีข้อยกเว้นเล็กน้อยที่เราจะต้องใส่เข้ารหัสของเราที่ด้านหน้าเพราะเราต้องแล้วที่จะจบลงด้วยการเป็น ซึ่งหมายความว่าพิเศษg=ไม่ได้เข้ารหัสและจะต้องจัดการด้วยตนเอง แมวตัวต่อไปของเรานั้นค่อนข้างมาตรฐานยกเว้นว่าเราต้องทำให้มันเป็นรหัสที่ถูกต้องเมื่อถูกจับไปที่ส่วนท้ายของแมวตัวอื่นดังนั้นเราจึงต้องการให้แมวทั้งคู่เป็นตัวอย่างของลวดลายยาม

กลยุทธ์ทางเลือก, 43 + 105 = 186 148

แมว 1

g="";main|idmain<-(++g++show g)=interact id

ลองออนไลน์!

แมว 2

main|1>0=interact id where g="g=\"\";main|idmain<-(++g++show g)=interact idmain|1>0=interact id where g="

ลองออนไลน์!

ควิน

g="";main|idmain<-(++g++show g)=interact idmain|1>0=interact id where g="g=\"\";main|idmain<-(++g++show g)=interact idmain|1>0=interact id where g="

ลองออนไลน์!


1
คุณสามารถย่นที่ค่อนข้างบิตโดยการแทนที่getContents+ กับputStr ลองออนไลน์! (ควินินไม่ทำงานกับอินพุตที่ไม่ว่างอีกต่อไปซึ่งอนุญาตให้ใช้ส่วนสำหรับ.)interact id(++ ...)idmain
Ørjan Johansen

@ ØrjanJohansenขอบคุณ! ฉันไม่ทราบinteractฉันเดาว่าเป็นเพราะฉันไม่ค่อยทำสิ่ง IO กับ Haskell ฉันแก้ไขโพสต์แล้ว
ข้าวสาลี Wizard

8

Python 3, 286 ไบต์

Python Golf ตัวแรกของฉัน ไม่หรูหรามาก แต่ใช้งานได้

โปรแกรม A (238 ไบต์)

from atexit import*;s="from atexit import*;s=%r;register(lambda:print(end='b'in globals()and s%%s or open(0).read()));b=0\nif's'not in vars():print(end=open(0).read())";register(lambda:print(end='b'in globals()and s%s or open(0).read()));

(ไม่ขึ้นบรรทัดใหม่)

โปรแกรม B (48 ไบต์)

b=0
if's'not in vars():print(end=open(0).read())

(ไม่ขึ้นบรรทัดใหม่)

ลองใช้ออนไลน์

กิตติกรรมประกาศ

  • -24 ไบต์ขอบคุณ Jo King
  • -82 ไบต์ขอบคุณ Jo King

คุณสามารถทำได้end=open...และใช้%rแทน%sการไม่ต้องขึ้นบรรทัดใหม่และคำพูด
Jo King

เจ๋งฉันเปลี่ยนไป%rเป็น ไม่แน่ใจว่าคุณหมายถึงอะไรขึ้นบรรทัดใหม่
Jakob

1
แทนที่จะจัด%sรูปแบบบรรทัดใหม่คุณสามารถทำตามตัวอักษร\nได้ นอกจากนี้คุณยังสามารถใช้;เพื่อแยกคำสั่งแทน\n(ยกเว้นifความต้องการที่จะอยู่ในบรรทัดของตัวเอง) สามารถหนีออกมาในสายด้วยการทำ% %%อาร์กิวเมนต์เดียวที่จำเป็นในการจัดรูปแบบสตริงคือสตริงตัวเองทุกสิ่งสามารถเป็นลายได้
Jo King

1
โปรแกรม B (และตัวอักษร) สามารถใช้locals()เพื่อบันทึก 2 ไบต์
Jonathan Allan

6

C ++ (เสียงดังกราว) , 313 + 102 = 415 ไบต์

โปรแกรม A (สิ้นสุดในบรรทัดใหม่):

#include<cstdio>
#define Q(x,y)#x,B=#y;x
int c;auto I="#include<cstdio>",A=Q(int main(){if(c)printf("%s\n#define Q(x,y)#x\",\"#y;x\nint c;auto I=\"%s\",A=Q(%s,)\n#ifdef Q\nint n=++c;\n#else\n%s\n%s\n#endif",I,I,A,I,B);else while((c=getchar())>=0)putchar(c);},int c;int main(){while((c=getchar())>=0)putchar(c);})

โปรแกรม B (ไม่สิ้นสุดในการขึ้นบรรทัดใหม่):

#ifdef Q
int n=++c;
#else
#include<cstdio>
int c;int main(){while((c=getchar())>=0)putchar(c);}
#endif

ไม่ส่อเสียดอย่างมหันต์และตามปกติ C ++ ไม่ดีสำหรับการ quining ฉันจะไม่แปลกใจหากมีวิธีการโกนไบต์ที่นี่และมีแนวคิดเดียวกัน สิ่งหนึ่งที่จับได้เล็กน้อยคือการเปลี่ยนพฤติกรรมของบางสิ่งบางอย่างหลังจากที่มันถูกกำหนดและเครื่องมือเริ่มต้นตัวแปรแบบไดนามิกที่มีผลข้างเคียงจะทำเคล็ดลับ (สิ่งนี้สามารถทำได้ใน C โดยไม่มีส่วนขยายคอมไพเลอร์หรือไม่)

ลองใช้งานออนไลน์: A , B , AB

(ข้อกังวลเกี่ยวกับการพกพาเพียงอย่างเดียวที่ฉันทราบคือโปรแกรมสันนิษฐานว่าให้<cstdio>ชื่อทั้งในเนมสเปซส่วนกลางและในstd)


5

Befunge-98 (FBBI) , 8 + 15 = 23 ไบต์

A + B: (ใช้งานได้โดยไม่มีสัญญาณเข้าเท่านั้น)

+9*5~,#@#@~,9j>:#,_:@#"

ลองออนไลน์!

A:

+9*5~,#@

ลองออนไลน์!

B:

#@~,9j>:#,_:@#"

ลองออนไลน์!


ฉันสงสัยว่ามีใครบางคนจัดการคำตอบที่รวดเร็ว มันแย่มากที่อันนี้ไม่ใช่ 2D: - /
Beefster

@Beefster ใช่ ปัญหาคือมันค่อนข้างยากที่จะทำ 2d Quine บางทีฉันอาจจะทำงานในบางสิ่งบางอย่าง
MildlyMilquetoast

5

Python 3 , 100 + 37 = 137 ไบต์

โปรแกรม A:

s='s=%r;print(end=open(0).read())#print(end=open(0).read())\nprint(s%%s)';print(end=open(0).read())#

ลองออนไลน์!

โปรแกรม B:

print(end=open(0).read())
print(s%s)

ลองออนไลน์!

ทำ Quine AB

s='s=%r;print(end=open(0).read())#print(end=open(0).read())\nprint(s%%s)';print(end=open(0).read())#print(end=open(0).read())
print(s%s)

ลองออนไลน์!

ใช้งานได้เฉพาะเมื่ออินพุตว่างมิฉะนั้นจะใส่อินพุตล่วงหน้าไปยังเอาต์พุต


เครื่องหมายคำพูดคู่ควรเป็นคำเดี่ยว
Jonathan Allan

อนุญาตให้ใช้แรงกระแทกได้หรือไม่
Jakob

@Jakob คำถามไม่ได้บอกว่าไม่อนุญาตให้ใช้การขัดข้องและโดยทั่วไปแล้วจะส่งออกไปยัง STDERR
Jo King

ตกลงยุติธรรมพอ ทางลัดที่ฉลาด!
Jakob

4

ทูต , 15 + 126 = 141 bytes

A:

AllInput[]|Echo

ลองออนไลน์!

B:

@{If[_,s.="AllInput[]|Echo@{If[_,s.=%s;;Printf[s,Repr!s],AllInput[]|Echo]es}|Call";;Printf[s,Repr!s],AllInput[]|Echo]es}|Call

ลองออนไลน์!

A + B:

AllInput[]|Echo@{If[_,s.="AllInput[]|Echo@{If[_,s.=%s;;Printf[s,Repr!s],AllInput[]|Echo]es}|Call";;Printf[s,Repr!s],AllInput[]|Echo]es}|Call

ลองออนไลน์!

คำอธิบาย

โปรแกรม cat แต่ละโปรแกรมเข้ารหัสAllInput[]|Echoซึ่งเป็นโปรแกรม cat แบบง่าย Bเป็นช่วง quine หลัก เพียงอย่างเดียวมันเป็นฟังก์ชั่น vectorized (ผ่าน unary @) เรียกว่าไม่มีอินพุต (ถูกเรียกว่าเป็น|Call) ดังนั้นเงื่อนไขแรกที่If[_,A,B]รันซึ่งเป็นเพียงBAllInput[]|Echo

เมื่อA + Bถูกดำเนินการ unary @จะกลายเป็นไบนารี@เนื่องจากการEchoรวมกับแลมบ์ดา:

AllInput[]|Echo@{If[_, ...

ตอนนี้ที่นี้หมายถึงว่าแลมบ์ดาที่จะดำเนินการก่อนที่จะEchoมี กลับไปที่เงื่อนไขตอนนี้ฟังก์ชั่นนี้มี STDIN ทั้งหมดเป็นอาร์กิวเมนต์ ดังนั้นจึงIf[_,A,B]ดำเนินการAซึ่งเป็นกรอบมาตรฐาน quine


3

Stax , 16 + 12 = 28 bytes

แมว 1:

"yi|d|ca34b4lr"y

เรียกใช้และแก้ไขข้อบกพร่อง

"yi|d|ca34b4lr"y Full program, implicit input
"yi|d|ca34b4lr"  Push the string
               y Push raw input
                 Implicit output of top item

แมว 2:

i|d|ca34b4lr

เรียกใช้และแก้ไขข้อบกพร่อง

i|d|ca34b4lr Full program, implicit input
i            Don't parse input (prefix directive)
 |d          Push main stack depth, always zero
   |c        Cancel because top item is falsy, and implicitly print
     a34b4lr Never executed

ควิน:

"yi|d|ca34b4lr"yi|d|ca34b4lr

เรียกใช้และแก้ไขข้อบกพร่อง

"yi|d|ca34b4lr"yi|d|ca34b4lr Full program
"yi|d|ca34b4lr"              Push the string
               y             Push input
                i            No-op
                 |d          Push main stack depth, i.e. 2
                   |c        Do nothing because top is truthy
                     a       Get the string to the top
                      34     Push 34 (charcode of ")
                        b    Copy both
                         4l  Listify top 4
                           r Reverse
                             Implicit output

3

แมว 1:

Lua , 41 ไบต์

a=io.read;while a(0)do io.write(a(1))end;

ลองออนไลน์!


แมว 2:

Lua , 70 ไบต์

if a then io.input(arg[0])end;a=io.read;while a(0)do io.write(a(1))end

ลองออนไลน์!


ควิน:

Lua , 111 ไบต์

a=io.read;while a(0)do io.write(a(1))end
if a then io.input(arg[0])end;a=io.read;while a(0)do io.write(a(1))end

ลองออนไลน์!

io.input(arg[0]) ใน Cat 2 ตั้งค่าไฟล์ปัจจุบันเป็นอินพุตมาตรฐานและด้วยเหตุนี้ cat จะพิมพ์ซอร์สโค้ด


1
ยินดีต้อนรับสู่ PPCG
Muhammad Salman

คุณสามารถบันทึกหนึ่งไบต์ใน cat 1 โดยการลบเซมิโคลอนสุดท้ายหรือไม่
มูฮัมหมัดซาลมาน

1
น่าเสียดายที่การอ่านไฟล์ปัจจุบันเป็นช่องโหว่มาตรฐาน แต่ก็ลองดีอยู่ดี
Beefster


0

JavaScript (Node.js) , 199 ไบต์


a=()=>console.log(require('fs').readFileSync(0)+'');a();var a=a||0;b=()=>console.log(require('fs').readFileSync(0)+'');!a?b():c=()=>console.log(`a=${a};a();var a=a||0;b=${b};!a?b():c=${c},c()`),c()

ลองออนไลน์!

Cat A, 57 ไบต์


a=()=>console.log(require('fs').readFileSync(0)+'');a();

ลองออนไลน์!

Cat B, 142 ไบต์

var a=a||0;b=()=>console.log(require('fs').readFileSync(0)+'');!a?b():c=()=>console.log(`a=${a};a();var a=a||0;b=${b};!a?b():c=${c},c()`),c()

ลองออนไลน์!

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