โปรแกรมที่สร้างเวอร์ชั่นที่ใหญ่กว่าของตัวเอง (ตัวแปรย่อย)


109

คุณต้องเขียนโปรแกรมที่จะส่งออกซอร์สโค้ดนั่นคือ

  1. ใหญ่กว่าโปรแกรมดั้งเดิม (ฉลาดกว่าตัวละคร)
  2. จะพิมพ์โปรแกรมอื่นที่ใหญ่กว่าของตัวเองเมื่อเรียกใช้ (เช่นโปรแกรมใหม่เป็นคำตอบที่ถูกต้องสำหรับความท้าทายนี้)

นี่คือรหัสกอล์ฟคำตอบที่สั้นที่สุดจึงชนะ


4
@Kevin คำจำกัดความซ้ำ เอาต์พุตควรเป็นโปรแกรมที่เอาต์พุตใหญ่กว่าของตัวเองและเป็นคำตอบสำหรับคำถามนี้ ดังนั้นเอาท์พุทของเอาท์พุทควรมีขนาดใหญ่กว่าเอาท์พุทและเอาท์พุทเอาท์พุทของเอาท์พุทควรจะมีขนาดใหญ่ขึ้น ฯลฯ
ugoren

8
ฉันคิดว่าคุณควรชี้แจงกฎของคุณ ในอีกด้านหนึ่งเอาท์พุทโค้ดเพิ่มเติมใด ๆจากโปรแกรมดังกล่าวคือ "ไร้ประโยชน์อย่างเห็นได้ชัด"; ในทางกลับกันรหัสเพิ่มเติมทั้งหมดในผลลัพธ์คือ "มีประโยชน์" ซึ่งจะทำให้เป้าหมายของการตอบคำถามนี้ท้าทาย
Jason C

5
ขออภัยที่ทำลายความท้าทายของคุณ :^)
Justin

2
ฉันคิดว่าความท้าทายนี้จะดีกว่าการประกวดความนิยมมากกว่า code golf มันจะช่วยให้มีความคิดสร้างสรรค์มากขึ้น!
corsiKa

30
โดยธรรมชาติโปรแกรมดังกล่าวควรเป็นควินิน
Jonathan Van Matre

คำตอบ:


89

GS2 (8636bd8e) , 0 ไบต์



พิมพ์บรรทัดใหม่ที่เดียวซึ่งพิมพ์สองบรรทัดใหม่ซึ่งพิมพ์สามบรรทัดใหม่และอื่น ๆ

ลองออนไลน์!


3
นี่ไม่ใช่เทคนิคที่ไม่ใช่การแข่งขันเนื่องจาก gs2 ใหม่กว่าความท้าทายหรือไม่
DJMcMayhem

24
ความมุ่งมั่นนี้มาก่อนการท้าทายภายในหนึ่งเดือนครึ่ง ฉันเพิ่งทดสอบและใช้งานได้ตามที่ตั้งใจไว้
เดนนิส

1
นี่เป็นช่องโหว่อย่างไร ???
Mama Fun Roll

14
@MamaFunRoll ทำไมถึงเป็นเช่นนั้น สิ่งนี้ไม่แตกต่างจากการพิมพ์โปรแกรม Retina ที่ว่างเปล่า1การพิมพ์โปรแกรม Jelly ที่ว่างเปล่า0หรือโปรแกรม Stuck ที่ว่างเปล่าสวัสดีโลก! .
เดนนิส

2
@Cyoce มันเพิ่งเกิดขึ้นที่ขึ้นบรรทัดใหม่ออกบรรทัดใหม่ใน GS2
ผลไม้แยกแยะ

299

H9 + : 1 ถ่าน

9

ถูกตัอง. ตัวละครตัวหนึ่ง ส่งออกเนื้อเพลงไปยังขวดเบียร์ 99 ขวดซึ่งเป็นโปรแกรมที่ถูกต้อง ข้อมูลภายนอกทั้งหมดไม่นับ แต่มีจำนวนมาก9ในนั้น

ผลลัพธ์ของโปรแกรมเอาท์พุทเป็นเนื้อเพลงถึง 99 ขวดเบียร์ 59 ครั้ง

ฟังก์ชั่นนี้ให้จำนวนครั้งที่เอาท์พุทเนื้อเพลงถ้าคุณรันโปรแกรมnครั้ง (ถ้าการคำนวณของฉันถูกต้อง)

f(n) = 59n-1

32
โปรแกรม 0 ถ่านในภาษาที่กำหนดเนื่องจากมันถูกต้องมีแนวโน้มที่จะออก 0 ตัวอักษร และตั้งแต่ 0 * x = 0 สำหรับค่า จำกัด ใด ๆ x, ฉันสามารถอ้างได้ว่าโปรแกรมเอาท์พุทของฉันคือ 9999999999999999 คูณด้วยรหัสต้นฉบับที่ใหญ่กว่า
nitro2k01

39
@JohannesH สำหรับปัญหาทั้งหมด (แก้ไขได้) มีภาษาการเขียนโปรแกรมที่แก้ปัญหาใน 0 ตัวอักษร
Cruncher

15
ฉันยังคงย้ายที่เราตั้งชื่อว่า "ทฤษฎีบทของ Cruncher" เว้นแต่ว่ามันถูกค้นพบแล้ว
Erty Seidohl

22
หนึ่งในคุณสมบัติที่น่าสนใจคือมันจะมี2*59^n-2อินสแตนซ์ของ "Hello, world!" เนื่องจาก "h" ใน "the"
AJMansfield

8
ดูเหมือนว่าคุณจะถูกตี
PyRulez

118

GolfScript 9 ตัวอักษร

{.'.~'}.~

รหัสนี้แสดงผล:

{.'.~'}{.'.~'}.~

ผลลัพธ์ใด:

{.'.~'}{.'.~'}{.'.~'}.~

ผลลัพธ์ใด:

{.'.~'}{.'.~'}{.'.~'}{.'.~'}.~

และอื่น ๆ

ฉันเชื่อว่านี่เป็นคำตอบที่สั้นที่สุดในภาษาโปรแกรมทัวริงที่สมบูรณ์แบบ

คำอธิบาย:

โดยพื้นฐานแล้วรหัสดั้งเดิมข้างต้นคือ "quine-layer": มันจะส่งผลให้ quine ปกติตามด้วยตัวมันเอง

ใน GolfScript โค้ดบล็อกใด ๆ (เช่น{foo}) หากปล่อยทิ้งไว้โดยไม่ถูกรบกวนบนสแต็ก ดังนั้นในตัวของมันเอง{.'.~'}ก็แค่เอาท์พุทตัวเองเช่นเดียวกับการบล็อกรหัสอื่น ๆ จะ

.~ในตอนท้ายของรหัสที่จะใช้เวลาการป้องกันรหัสล่าสุดเมื่อกองซ้ำมันและดำเนินการคัดลอก เมื่อดำเนินการรหัส.'.~'ภายในการป้องกันรหัสซ้ำรายการที่สูงสุดในกอง (เช่นสำเนาของตัวเอง) .~และผนวกสตริง

ในตอนท้ายของโปรแกรมที่ GolfScript stringifies ล่ามและผลทุกอย่างในกองซึ่งในกรณีนี้ประกอบด้วยอีกหนึ่งบล็อกกว่าในการป้อนข้อมูลบวกสตริง{.'.~'}.~

โบนัส:

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

{].'.~'}.~

เอาท์พุท:

{].'.~'}{].'.~'}.~

ผลลัพธ์ใด:

{].'.~'}{].'.~'}{].'.~'}{].'.~'}.~

ผลลัพธ์ใด:

{].'.~'}{].'.~'}{].'.~'}{].'.~'}{].'.~'}{].'.~'}{].'.~'}{].'.~'}.~

และอื่น ๆ


196
{].'.~'}.~︵ ┻━┻
nitro2k01


2
@ nitro2k01 ความคิดแรกของฉัน: D
Songo

1
"ของจริง" ในเครื่องหมายคำพูดเนื่องจาก HQ9 + ไม่ใช่ของจริงหรือเพราะ GolfScript ไม่ใช่ของจริงหรือทั้งสองอย่าง?
Roger Pate

1
@thepiercingarrow ซอร์สโค้ดคล้ายนี้
Rod

108

Java 7: 0 ตัวอักษร



Blank.javaบันทึกเป็นไฟล์ หากคุณบันทึกเป็นไฟล์อื่นให้แทนที่อินสแตนซ์ของBlankด้วยชื่อไฟล์ที่เหมาะสม

จากนั้นเรียกใช้ในบรรทัดคำสั่งผ่านการคอมไพล์ครั้งแรกจากนั้นเรียกใช้ หากการรวบรวมล้มเหลวให้หยุด

ฉันแสดงรายการนี้เป็นJava 7เพราะอาจแตกต่างกันสำหรับ Java เวอร์ชันที่แตกต่างกัน

ผลลัพธ์สองสามตัวแรก (เอาท์พุทเป็น stderr):

Error: Could not find or load main class Blank
Blank.java:1: error: class, interface, or enum expected
Error: Could not find or load main class Blank
^
Blank.java:1: error: reached end of file while parsing
Error: Could not find or load main class Blank
                                              ^
2 errors
Blank.java:1: error: class, interface, or enum expected
Blank.java:1: error: class, interface, or enum expected
^
Blank.java:1: error:  expected
Blank.java:1: error: class, interface, or enum expected
                          ^
Blank.java:1: error:  expected
Blank.java:1: error: class, interface, or enum expected
                                     ^
Blank.java:1: error: as of release 5, 'enum' is a keyword, and may not be used as an identifier
Blank.java:1: error: class, interface, or enum expected
                                          ^
  (use -source 1.4 or lower to use 'enum' as an identifier)
Blank.java:1: error: = expected
Blank.java:1: error: class, interface, or enum expected
                                               ^
Blank.java:2: error:  expected
Error: Could not find or load main class Blank
     ^
Blank.java:2: error: ';' expected
Error: Could not find or load main class Blank
      ^
Blank.java:2: error: = expected
Error: Could not find or load main class Blank
                      ^
Blank.java:2: error: = expected
Error: Could not find or load main class Blank
                                   ^
Blank.java:2: error:  expected
Error: Could not find or load main class Blank
                                              ^
Blank.java:3: error: = expected
^
^
Blank.java:3: error: ';' expected
^
 ^
Blank.java:4: error: illegal start of type
Blank.java:1: error: reached end of file while parsing
     ^
Blank.java:4: error: = expected
Blank.java:1: error: reached end of file while parsing
          ^
Blank.java:4: error: illegal start of type
Blank.java:1: error: reached end of file while parsing
           ^
Blank.java:4: error:  expected
Blank.java:1: error: reached end of file while parsing
            ^
Blank.java:4: error: = expected
Blank.java:1: error: reached end of file while parsing
          ^
Blank.java:4: error: illegal start of type
Blank.java:1: error: reached end of file while parsing
           ^
Blank.java:4: error:  expected
Blank.java:1: error: reached end of file while parsing
            ^
Blank.java:4: error: = expected
Blank.java:1: error: reached end of file while parsing
              ^
Blank.java:4: error: ';' expected
Blank.java:1: error: reached end of file while parsing
                   ^
Blank.java:4: error: = expected
Blank.java:1: error: reached end of file while parsing
                                 ^
Blank.java:4: error:  expected
Blank.java:1: error: reached end of file while parsing
                                        ^
Blank.java:4: error: = expected
Blank.java:1: error: reached end of file while parsing
                                         ^
Blank.java:4: error: ';' expected
Blank.java:1: error: reached end of file while parsing
                                              ^
Blank.java:5: error:  expected
Error: Could not find or load main class Blank
     ^
Blank.java:5: error: ';' expected
Error: Could not find or load main class Blank
      ^
Blank.java:5: error: = expected
Error: Could not find or load main class Blank
                      ^
Blank.java:5: error: = expected
Error: Could not find or load main class Blank
                                   ^
Blank.java:5: error:  expected
Error: Could not find or load main class Blank
                                              ^
Blank.java:6: error: = expected
                                              ^
                                              ^
Blank.java:6: error: ';' expected
                                              ^
                                               ^
Blank.java:7: error: reached end of file while parsing
2 errors
        ^
30 errors

23
"คุณต้องเขียนโปรแกรมที่จะส่งออกซอร์สโค้ดนั่นคือ" ผลลัพธ์นั้นไม่ใช่ซอร์สโค้ด และยิ่งไปกว่านั้นขึ้นอยู่กับความละเอียดของการส่งออก (ไม่ว่าการส่งออกจะต้องมาจากเฉพาะstdout) ไม่มีอะไรที่เป็นจริงเอาท์พุท
nitro2k01

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

15
@PyRulez ถูกต้อง ฉันใช้ประโยชน์จากกฎของคุณ คุณไม่จำเป็นต้องยอมรับคำตอบนี้ เมื่อฉันโพสต์สิ่งนี้ฉันรู้ว่าการโต้เถียงจะตามมาพร้อมกับการโหวตขึ้น ๆ ลง ๆ ฉันตัดสินใจว่ามันจะคุ้มค่า
Justin

29
คุณแน่ใจหรือไม่ว่าโปรแกรมนั้นพิมพ์ผลลัพธ์ออกมา? นั่นแปลว่าคอมไพเลอร์เท่านั้นไม่ใช่เหรอ? โปรแกรมไม่ได้รับการคอมไพล์และไม่มีการตีความหรือดำเนินการเองดังนั้นจึงไม่สามารถสร้างผลลัพธ์ใด ๆ ได้
VX

12
@ blabla999 ฉันไม่เห็นด้วย - ผู้คนไม่ลองความท้าทายเหล่านี้เพราะคนอื่นทำสิ่งที่บ้า เราแค่ท้าทายตัวเองให้ทำอย่างอื่น ดังที่มาร์ครอสวอเตอร์กล่าวว่า "ข้อ จำกัด ก่อให้เกิดความคิดสร้างสรรค์"
corsiKa

79

HQ9 +, HQ9 ++ และ similars, 2 ตัวอักษร

QQ

นี่คือผลลัพธ์:

QQQQ

36
ฉันเห็นสิ่งนี้และคิดว่า "ไม่เลยไม่มีอะไรสามารถเอาชนะได้" ฉันเริ่มพยายามหาอะไรซักอย่างแล้วมันก็มาหาฉัน ดังนั้นฉันโพสต์คำตอบ
Justin

1
@Quincunx Bravo เพิ่มคำตอบของคุณ
Victor Stafusa

4
@ ควินนันซ์ไม่ฉันคิดว่ามันเป็น2^2^nที่ที่โปรแกรมเริ่มต้นคือการสร้าง 0 ความยาวเกิดm -> m^2ขึ้นอีก
Vortico

3
@Vortico จุดดี แม้ว่าฉันจะบอกว่ามันผิดฉันหมายถึงรหัสที่มีความยาวเอาท์พุทจะกลายเป็นn n^nอย่างไรก็ตามนั่นเป็นเท็จ เมื่อความยาวโค้ดคือความยาวnของเอาต์พุตคือn^2
Justin

2
มันเป็นเรื่องตลก แต่เพราะซ้ำสองครั้งแรกก็เป็นไปได้สำหรับคำถามนี้
PyRulez

29

ทับทิม 27

เวอร์ชันที่แก้ไขเล็กน้อยนี้ ( ผ่าน ):

puts <<3*3,3
puts <<3*3,3
3

จำนวนครั้งที่puts-line ถูกพิมพ์เพิ่มขึ้นแบบทวีคูณ

$ ruby quine.rb | ruby | ruby
puts <<3*3,3
puts <<3*3,3
puts <<3*3,3
puts <<3*3,3
puts <<3*3,3
puts <<3*3,3
puts <<3*3,3
puts <<3*3,3
puts <<3*3,3
puts <<3*3,3
puts <<3*3,3
puts <<3*3,3
puts <<3*3,3
puts <<3*3,3
puts <<3*3,3
3

$ ruby quine.rb | ruby | ruby | ruby | ruby | ruby | ruby | ruby | wc -l
    3283

17
คำตอบที่ได้รับแรงบันดาลใจจาก Kaiser Chiefs
Ben Jackson

25

แลมบ์ดาแคลคูลัส - 29

คำแลมบ์ดาที่เรียบง่าย

(λu.(u u)(u u))(λu.(u u)(u u))

การลดคำศัพท์นี้ด้วยการลดเบต้าหนึ่งครั้ง

((λu.(u u)(u u))(λu.(u u)(u u)))((λu.(u u)(u u))(λu.(u u)(u u)))

และอื่น ๆ เป็นต้น มันเป็นตัวแปรที่เรียบง่ายในคลาสสิก(λu.u u)(λu.u u)ซึ่งเป็นควินินในแลมบ์ดาแคลคูลัสการประยุกต์ใช้ตัวเองสองครั้งที่นี่หมายความว่าเราได้รับผลลัพธ์เป็นสองเท่า


7
ฉันขอยืนยันว่าในแคลคูลัสแลมบ์ดา "การรัน" คำแลมบ์ดาหมายถึงการคำนวณรูปแบบปกติไม่ใช่การลดเบต้าเพียงครั้งเดียว นอกจากนี้คำที่สามารถมีหลาย redexes ดังนั้น "ลด redex เดียว" เป็นการดำเนินการที่ไม่ชัดเจน
Petr Pudlák

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

3
ข้อตกลงที่ไม่มีรูปแบบปกติสอดคล้องกับโปรแกรมที่ไม่สิ้นสุด และปัญหาของredex ระดับบนสุดคือเทอมหนึ่งสามารถมี redexes สองอันไม่ว่าจะเป็นเทอมย่อยของอีกอัน คุณสามารถเลือกเกณฑ์ที่จะลดลงได้บ้าง แต่ฉันจะบอกว่าตอนนี้คุณอยู่ไกลจากแคลคูลัสแลมบ์ดามาตรฐาน (อย่างไรก็ตามฉันขอขอบคุณความคิดใหม่ ๆ ของคุณ)
Petr Pudlák

2
(λx.xxx) (λx.xxx): 20
Fabio F.

2
(λx. xx) (λx. xxx) ลดลงในขั้นตอนเดียว
Ben Millwood

23

SH script, 9

cat $0 $0

เติบโตในอัตราที่ชี้แจง

เรียกใช้sh whatever.shหรือตั้งค่าเป็นปฏิบัติการ

รุ่น Windows เป็นที่นี่


2
ตอนที่ฉันเขียนความคิดเห็นหน้า Quine Wiki บอกว่าการอ่านจากระบบไฟล์กำลังโกง
Lord Ratte

3
@ LordRatte ในทางกลับกันความท้าทายไม่ได้เขียนอะไรเลย
Jason C

20

dc 11

ค่อนข้างง่าย:

6579792
dfP

บรรทัดแรกจะถูกทำซ้ำทุกครั้ง:

$ dc growing_quine.dc
6579792
6579792
dfP

$ dc growing_quine.dc | dc | dc 
6579792
6579792
6579792
6579792
dfP

บรรทัดสุดท้ายประกอบด้วยคำแนะนำต่อไปนี้: dทำซ้ำค่าสุดท้ายที่วางไว้บนสแต็ก (6579792) (เพื่อให้เราได้รับหนึ่งสำเนาเพิ่มเติมทุกครั้งที่เราเรียกใช้) fพิมพ์สแต็กทั้งหมด (ซึ่งเป็นพวงของหมายเลขเดียวกัน) และPพิมพ์ตัวเลข (6579792) ออกมาเป็นกระแส byte dfPซึ่งจะแสดงเป็น


16

redcode (โซลูชันแบบเรียกซ้ำ)

นี่คือรหัสของนักรบที่เขียนได้ง่ายที่สุดในredcode , Imp ที่มีชื่อเสียง:

MOV 0, 1

เมื่อประมวลผลโค้ดจะเขียนสำเนาของคำสั่งเดียวที่อยู่ถัดไปในหน่วยความจำ จากนั้นเรียกใช้งานมันเป็นต้น


15

Python 3 - 55

print(open(__file__).read())
f=lambda:print('f()')
f()

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

print(open(__file__).read())
f=lambda:print('f()')
f()
f()

3
นี่ไม่ใช่ควิน ดูความหมาย
Petr Pudlák

14
@ PetrPudlák Nor เป็นโปรแกรมใด ๆ ในคำถามนี้ นี่เป็นปัญหาที่แตกต่างของ quine ไม่ใช่การทดสอบอย่างเข้มงวด
AJMansfield

6

สมอลล์ทอล์ค, 125 61 57

เวอร์ชันของกอล์ฟดูไม่สามารถอ่านได้เกือบดังนั้นฉันจะอธิบายก่อน (และใช้ตัวระบุจริง)

นี่คือตัวแปรของวิธีการแก้ไขตัวเองด้วยตนเอง

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

เพื่อปกป้องตัวเองจากการหลบหนีทันทีผู้ใช้สามารถยืนยันได้ในแต่ละรอบ

รวบรวมในวัตถุ:

eatMe_alice
   |msg mySource|

   mySource := thisContext method source.

   '**** Hello Alice' printCR.
   '  ---- my current code is:' printCR.
   mySource printCR.
   '  ---------------' printCR.

   (UserConfirmation confirm:'Again? ') ifTrue:[
       Object compile:
            (mySource
                copyReplaceString:'Hello ','Alice'
                withString:'Hello ','Alice !').
       self eatMe_alice
   ]

เริ่มการแสดงโดยส่ง "eatMe_alice" ไปยังวัตถุใด ๆ ไม่มีจะทำ:

nil eatMe_alice

ตัวแปรที่ดีคือการไม่เรียกรหัสใหม่ซ้ำ ๆ แต่เป็นการทำซ้ำ ๆ โดยลดการเรียก stack และป้อนเข้าไปในวิธีการใหม่ นี่คือข้อดีของการไม่นำไปสู่ข้อยกเว้นการเรียกซ้ำ ในการทำเช่นนี้ให้แทนที่การเรียกซ้ำ ("self eatMe_alice") โดย:

thisContext resend

กอล์ฟ:

เห็นได้ชัดว่าการพิมพ์และการโทรด้วยตนเองไม่ได้ถูกขอดังนั้นสิ่งที่สั้นที่สุด (สำหรับการเล่นกอล์ฟ) คือการต่อท้ายความคิดเห็นไปยังแหล่งข้อมูลของฉันและส่งคืน ในฐานะที่เป็นผลข้างเคียงก็ยังได้รับการติดตั้งสำหรับการโทรครั้งต่อไป ...

x|s|Object compile:(s:=thisContext method source,'""').^s

5

SH script, 12 8 7

จัดเก็บไฟล์ด้วย

sed p *

ในไดเรกทอรีว่างเปล่าของตัวเองและเรียกใช้จากไดเรกทอรีนี้โดยใช้sh [file]หรือตั้งค่าปฏิบัติการ


ทางเลือกเก่าที่มี8 ตัวอักษรแต่ไม่ต้องการไดเรกทอรีของตัวเอง จัดเก็บไฟล์ด้วย

sed p $0

และรันโดยใช้sh [file]หรือตั้งค่าปฏิบัติการ

ทางเลือกเก่าที่มี12 ตัวอักษร :

sed -i- p $0

สิ่งนี้จะส่งออกไปยังไฟล์โปรแกรมเอง แต่ไม่ได้ระบุตำแหน่งที่จะส่งออก จำลองตัวเองด้วยอัตราเลขยกกำลัง


1
คุณยังอาจจะมีโอกาสใช้edไม่อยากที่จะมองผ่านหน้าคนของ ...
Jens Erat

4

JavaScript, 41 , 40 ตัวอักษร

function f(){console.log(f+"f(f())")}f()

ครั้งแรกที่คุณเรียกใช้มันจะเอาท์พุทตัวเองพร้อมกับที่อื่น;f()ในตอนท้าย การเรียกใช้ผลลัพธ์ผลลัพธ์ที่ตามมาในแต่ละแหล่ง "อินพุต" ที่พิมพ์สองครั้ง

alertจะสั้นกว่าconsole.logแต่ฉันไม่พิจารณากล่องโต้ตอบการแจ้งเตือนหลายรายการว่าจะเป็น "ผลลัพธ์" ในขณะที่การเรียกหลายบรรทัดในคอนโซลเป็นผลลัพธ์


คุณสามารถบันทึกหนึ่งไบต์ด้วย"f(f())"แทน"f();f()"
Hedi

นี้ไม่ได้ดูเหมือนจะทำงานสำหรับฉัน ...
ทำลายมะนาว

4

J , 1 ไบต์

'

ลองออนไลน์!

คำพูดเปิดให้ชัดข้อผิดพลาดอ้างเปิด:

|open quote
|   '
|   ^
|[-1] /home/runner/.code.tio

โปรดทราบว่าโดยธรรมชาติของ J interpreter ข้อผิดพลาดจะถูกพิมพ์ไปยัง STDOUTไม่ใช่ STDERR

เมื่อโค้ดด้านบนเรียกใช้เป็นรหัสจะพิมพ์:

|open quote
|   |   '
|       ^
|[-2] /home/runner/.code.tio

แล้วก็

|open quote
|   |   |   '
|           ^
|[-2] /home/runner/.code.tio

และอื่น ๆ ทุกครั้งที่มีการเรียกใช้รหัสบรรทัดที่สองจะถูกเสริมด้วยสี่ไบต์|   ตามความต้องการของการท้าทายนี้

Jตัวแปร quine ที่เหมาะสม 25 ไบต์

echo,~'echo,:~(,quote)'''

ลองออนไลน์!

เอาท์พุท

echo,:~(,quote)'echo,:~(,quote)'

จากนั้นมันจะแสดงผลตัวเองสองครั้งโดยแยกบรรทัด:

echo,:~(,quote)'echo,:~(,quote)'
echo,:~(,quote)'echo,:~(,quote)'

แล้วก็

echo,:~(,quote)'echo,:~(,quote)'
echo,:~(,quote)'echo,:~(,quote)'
echo,:~(,quote)'echo,:~(,quote)'
echo,:~(,quote)'echo,:~(,quote)'

และอื่น ๆ

เอาต์พุตแรกเป็นชุดตัวเลือกมาตรฐาน J quine แบบง่าย การรวมที่เพิ่มเข้าด้วย,:~กันนั้นจะอยู่ในแนวตั้งโดยที่อาร์เรย์ 2 มิติที่เป็นผลลัพธ์จะถูกพิมพ์เป็นสองแถวของสตริงเดียวกัน



3

ไขว้กันเหมือนแห 11 ไบต์ noncompeting

"'34'coo1o;

นี่คือกรอบมาตรฐาน quine ยกเว้นมีการ1พิมพ์พิเศษหลังจากการทำซ้ำแต่ละครั้ง ลองออนไลน์!

ผลลัพธ์สองสามตัวแรก:

"'34'coo1o;
"'34'coo1o;1
"'34'coo1o;11
"'34'coo1o;111

3

Microscript II, 6 ไบต์

ไม่ใช่การแข่งขันภาษาโพสต์ความท้าทาย

"qp"qp

การวนซ้ำครั้งแรกจะเพิ่มส่วนเพิ่มเติมqpไปยังจุดสิ้นสุดและการวนซ้ำแบบต่อเนื่องแต่ละครั้งจะเพิ่มสำเนาพิเศษของโปรแกรมต้นฉบับนี้ไปยังจุดเริ่มต้น


3

Runic Enchantmentsขนาด 6 ไบต์

"'<S@>

ลองออนไลน์!

อันนี้แปลก ทั้งหมดที่ฉันต้องทำคือเอา~จากควินเดิมพบโดยโจกษัตริย์

การวิ่งเพิ่มเติมทุกครั้ง<จะต่อท้ายอีกเช่น:

"'<S@><<<<<<<<<

ทั้งหมดนี้ไม่ทำอะไรเลย


2

EcmaScript 6 (51 ไบต์):

(_=x=>'(_='+_+Array(x++).join(','+_)+')('+x+')')(2)

มันสร้างเวอร์ชั่นที่ยาวกว่าของตัวมันเองซึ่งสามารถสร้างเวอร์ชั่นที่ยาวกว่าของตัวมันเองซึ่งสามารถสร้างเวอร์ชั่นที่ยาวกว่าของตัวเองได้ ฯลฯ ...


2

PHP, 38

<?echo fgets(fopen(__FILE__,'r')).';';

มันจะเพิ่มเซมิโคลอนในการวิ่งแต่ละครั้ง


เครื่องหมายอัฒภาคไม่มีประโยชน์หรือไม่
Justin

3
@Quincunx พวกคุณพูดถูก อย่างไรก็ตามสิ่งที่คุณจะพิจารณารหัสที่มีประโยชน์
ComFreek

';'บางทีคุณอาจจะใส่ในใน จากนั้นคุณจะได้ผลลัพธ์ที่ยาวขึ้น
Justin

1
ทำไมไม่<?=fgets(fopen(__FILE__,'r')).';';?
Ismael Miguel

1
;<?echo fgets(fopen(__FILE__,'r'));
jimmy23013

2

ECMAScript 6 (38 ตัวอักษร)

(f=_=>'(f='+f+')();(f='+f+')();')();

ผลลัพธ์ใด:

(f=_=>'(f='+f+')();(f='+f+')();')();(f=_=>'(f='+f+')();(f='+f+')();')();

แก้ไข

คุณสามารถทำได้ (28 ตัวอักษร):

(f=_=>'(f='+f+')();'+f())();

อย่างไรก็ตามมันจะคืนค่าไม่สิ้นสุดและไม่เคยส่งคืนสิ่งใด ... แต่สิ่งนี้สามารถแก้ไขได้ด้วยการทำสิ่งนี้ (42 ตัวอักษร):

(f=_=>_?'(f='+f+')('+_+');'+f(_-1):'')(3);

ซึ่งจะส่งออก:

(f=_=>_?'(f='+f+')('+_+');'+f(_-1):'')(3);(f=_=>_?'(f='+f+')('+_+');'+f(_-1):'')(2);(f=_=>_?'(f='+f+')('+_+');'+f(_-1):'')(1);

3
+_+ =_=+1 สำหรับอีโมติคอน
TuxCrafting

2

Common Lisp, 16 ตัวอักษร

(print `(or ,-))

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

สิ่งที่จะน่าสนใจจริงๆคือสิ่งที่ระเบิดเร็วที่สุด บางทีสิ่งที่ชอบ

(print `(progn ,@(loop repeat (length -) collect -)))


+1 สำหรับเสียงกระเพื่อมสามัญ ดูเหมือนว่าผมชอบคุณสามารถข้าม`และ,?
daniero

@daniero หากไม่มีใบเสนอราคาก็แค่พิมพ์โปรแกรมต้นฉบับไม่เติบโต ณ จุดนี้คุณอาจละเว้นorเช่นกัน:(print -)
Stuart Olsen

2

Julia, 66 ตัวอักษร

x="print(\"x=\$(repr(x))\\n\$x;\"^2)";print("x=$(repr(x))\n$x;"^2)

เอาต์พุต (134 อักขระ):

x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);

ผลลัพธ์ของการดำเนินการผลลัพธ์ (268 chars):

x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);

ผลลัพธ์ถัดไป (536 ตัวอักษร):

x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);

ผลลัพธ์ถัดไป (1,072 ตัวอักษร):

x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);

ฉันหวังว่านี้เป็นไปตามกฎ

มันสร้างผลลัพธ์ที่มีขนาดใหญ่กว่าและตัวมันเองก็เป็นรหัสที่ถูกต้องที่จะสร้างผลลัพธ์ที่มีขนาดใหญ่ขึ้นอีกครั้ง


เอาต์พุตเมื่อรันจะสร้างรายการที่ถูกต้องหรือไม่?
PyRulez

ในตัวอย่างแรกผลลัพธ์คือรหัสที่ถูกต้อง มันคือสตริงตัวอักษรที่มี 5 คาบ ในตัวอย่างที่สองการป้อน julia prompt จะไม่ทำอะไรเลย ฉันแค่คิดว่าการให้ตัวละครใหม่ขึ้นบรรทัดใหม่โดยการกดปุ่ม enter จะสร้างเอาต์พุตที่ยาวกว่าอินพุต
ML

"..... " จะสร้างเวอร์ชั่นที่ใหญ่ขึ้นหรือไม่
PyRulez

อ่าตอนนี้ฉันเข้าใจแล้ว ฉันเพิ่งสังเกตเห็นว่ามันจะต้องเกิดซ้ำ ... ถึงเวลาที่จะแก้ไขปัญหาของฉัน ขอบคุณสำหรับคำใบ้
ML

1
ฉันเดารหัสเป็นไปตามกฎตอนนี้
ML

2

05AB1E, 15 ไบต์, ไม่ใช่การเข้ารหัส

0"DÐ34çý"DÐ34çý

ลองออนไลน์!

พิมพ์0"DÐ34çý"DÐ34çý"DÐ34çý"DÐ34çý,
ซึ่งพิมพ์0"DÐ34çý"DÐ34çý"DÐ34çý"DÐ34çý"DÐ34çý"DÐ34çý"DÐ34çý"DÐ34çý,
ฯลฯ


ทั้งสองกรณีจะถูกแทนที่ด้วยDD Ð
Emigna

1
ทำไมไม่ใช่การแข่งขัน
MD XF

2

Evoloop, 9 × 9 สี่เหลี่ยมผืนผ้า (81 เซลล์)

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

สิ่งที่กล่าวมาข้างต้นใช้กับหุ่นยนต์เซลลูล่าร์ "Langton's Loops" ที่โด่งดังและ Evoloop แต่ Evoloop มีความแตกต่างที่น่าสนใจซึ่งเป็นเรื่องง่ายที่จะสร้างรูปแบบที่เติบโตในแต่ละรุ่นที่ต่อเนื่องกัน

( ในความคิดของฉันน่าสนใจกว่านั้นคือความจริงที่ว่า Evoloop เป็นหุ่นยนต์เซลลูล่าร์ง่าย ๆ ที่มีรูปแบบที่ทำซ้ำตัวเองและวิวัฒนาการในลักษณะเหมือนชีวิตจริง ๆ ! ฉันคิดว่าออโตมาร์เซลลูล่าร์ตัวเดียวเท่านั้น อย่างไรก็ตามข้อบกพร่องของ Evoloop คือมีจีโนมที่“ ดีที่สุด” หนึ่งโดยเฉพาะในที่สุดวิวัฒนาการมักจะมาบรรจบกับจีโนมนี้เสมอ)

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

หากไม่มีความกังวลใจเพิ่มเติมรูปแบบคือ:

022222220
270170172
212222202
202000212
272000272
212000202
202222212
271041032
022222250

นี่คือรูปแบบอีกครั้งในรูปแบบที่สามารถคัดลอกและวางลงใน Golly:

x = 9, y = 9, rule = Evoloop
.7B$BG.AG.AGB$BA5B.B$B.B3.BAB$BGB3.BGB$BAB3.B.B$B.5BAB$BGA.DA.CB$.6BE
!

โอเค แต่มันมีลักษณะอย่างไร ดูเหมือนว่านี้:

รูปแบบในหุ่นยนต์เซลลูลาร์ซึ่งสร้างสำเนาของตัวเองที่มีขนาดใหญ่ขึ้นเรื่อย ๆ

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


1

รุ่นที่ 26

วางรหัสนี้ในไฟล์. bat ใด ๆ และมันจะดำเนินการต่อไป (ในวงวนไม่สิ้นสุด) และไฟล์ก็จะเติบโตขึ้นเช่นกัน

echo echo %0 ^>^> %0 >> %0

สิ่งนี้ใช้งานไม่ได้%0เป็นคำสั่งที่ใช้เรียกสคริปต์ซึ่งอาจไม่มี.BATส่วนขยาย คุณสามารถใช้%~nx0เพื่อรับชื่อไฟล์แบบเต็มของไฟล์แบตช์
Jason C

@JasonC AFAIK ไม่จำเป็นต้อง.batดำเนินการ ถ้าชื่อไฟล์คือexecute.batคุณสามารถป้อนอย่างใดอย่างหนึ่งหรือexecute execute.batทั้งสองจะทำงาน
ub3rst4r

ไฟล์ที่ตัวเองจะต้องมี.batการขยายการดำเนินการ แต่คุณสามารถออกจากการขยายออกเมื่อคุณรันมัน (เมื่อคุณพิมพ์คำสั่งที่มีนามสกุลไม่มี Windows พยายาม.com, .exeแล้ว.batตามลำดับ) หากชื่อไฟล์hello.batนั้น>> %0จะเขียนชื่อไฟล์helloซึ่งไม่ใช่ต้นฉบับhello.bat(และไม่สามารถเรียกใช้งานได้)
Jason C

1

PYG (6)

P(Q,Q)

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

P(Q,Q)
P(Q,Q)

และอื่น ๆ


1

OIL , 83 ไบต์

0
0
1
1
1
4
1
11
4
1
11
1
2
2
1
12
18
10
18
1
32
22
1
18
26
4
26
8
18
11
6
17
4
26

มันพิมพ์สองบรรทัดแรกโดยมีศูนย์ในพวกเขาแล้วเปรียบเทียบแต่ละบรรทัดกับบรรทัดที่ 1 หากพวกเขาเท่ากัน (ซึ่งเป็นกรณีเมื่อไฟล์หมด) เราพิมพ์สิ่งที่อยู่ในเซลล์ 26 ผลลัพธ์ที่ได้จะออกมาดู เหมือนกันยกเว้นการเพิ่ม33ซึ่งไม่ได้ทำอะไรเลย ครั้งต่อไปจะมีการเพิ่มบรรทัดอื่นและอื่น ๆ


1

ช่วยเหลือ WarDoq! 1 ไบต์

H

Hello, World!พิมพ์

อักขระอื่นที่ไม่ใช่ H เป็นซอร์สโค้ดที่ถูกต้อง (และปลอดภัย) (ซึ่งพิมพ์ตัวแปรอื่น ๆ ของ Hello World)


ใช้ได้กับ (รุ่นต่างๆ) HQ9 +
CalculatorFeline

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