คุณต้องเขียนโปรแกรมที่จะส่งออกซอร์สโค้ดนั่นคือ
- ใหญ่กว่าโปรแกรมดั้งเดิม (ฉลาดกว่าตัวละคร)
- จะพิมพ์โปรแกรมอื่นที่ใหญ่กว่าของตัวเองเมื่อเรียกใช้ (เช่นโปรแกรมใหม่เป็นคำตอบที่ถูกต้องสำหรับความท้าทายนี้)
นี่คือรหัสกอล์ฟคำตอบที่สั้นที่สุดจึงชนะ
:^)
คุณต้องเขียนโปรแกรมที่จะส่งออกซอร์สโค้ดนั่นคือ
นี่คือรหัสกอล์ฟคำตอบที่สั้นที่สุดจึงชนะ
:^)
คำตอบ:
พิมพ์บรรทัดใหม่ที่เดียวซึ่งพิมพ์สองบรรทัดใหม่ซึ่งพิมพ์สามบรรทัดใหม่และอื่น ๆ
9
ถูกตัอง. ตัวละครตัวหนึ่ง ส่งออกเนื้อเพลงไปยังขวดเบียร์ 99 ขวดซึ่งเป็นโปรแกรมที่ถูกต้อง ข้อมูลภายนอกทั้งหมดไม่นับ แต่มีจำนวนมาก9
ในนั้น
ผลลัพธ์ของโปรแกรมเอาท์พุทเป็นเนื้อเพลงถึง 99 ขวดเบียร์ 59 ครั้ง
ฟังก์ชั่นนี้ให้จำนวนครั้งที่เอาท์พุทเนื้อเพลงถ้าคุณรันโปรแกรมn
ครั้ง (ถ้าการคำนวณของฉันถูกต้อง)
f(n) = 59n-1
2*59^n-2
อินสแตนซ์ของ "Hello, world!" เนื่องจาก "h" ใน "the"
{.'.~'}.~
รหัสนี้แสดงผล:
{.'.~'}{.'.~'}.~
ผลลัพธ์ใด:
{.'.~'}{.'.~'}{.'.~'}.~
ผลลัพธ์ใด:
{.'.~'}{.'.~'}{.'.~'}{.'.~'}.~
และอื่น ๆ
ฉันเชื่อว่านี่เป็นคำตอบที่สั้นที่สุดในภาษาโปรแกรมทัวริงที่สมบูรณ์แบบ
โดยพื้นฐานแล้วรหัสดั้งเดิมข้างต้นคือ "quine-layer": มันจะส่งผลให้ quine ปกติตามด้วยตัวมันเอง
ใน GolfScript โค้ดบล็อกใด ๆ (เช่น{foo}
) หากปล่อยทิ้งไว้โดยไม่ถูกรบกวนบนสแต็ก ดังนั้นในตัวของมันเอง{.'.~'}
ก็แค่เอาท์พุทตัวเองเช่นเดียวกับการบล็อกรหัสอื่น ๆ จะ
.~
ในตอนท้ายของรหัสที่จะใช้เวลาการป้องกันรหัสล่าสุดเมื่อกองซ้ำมันและดำเนินการคัดลอก เมื่อดำเนินการรหัส.'.~'
ภายในการป้องกันรหัสซ้ำรายการที่สูงสุดในกอง (เช่นสำเนาของตัวเอง) .~
และผนวกสตริง
ในตอนท้ายของโปรแกรมที่ GolfScript stringifies ล่ามและผลทุกอย่างในกองซึ่งในกรณีนี้ประกอบด้วยอีกหนึ่งบล็อกกว่าในการป้อนข้อมูลบวกสตริง{.'.~'}
.~
การเพิ่ม]
ก่อนหน้าแรก.
(เพื่อรวบรวมบล็อคโค้ดทั้งหมดในสแต็กลงในอาร์เรย์ก่อนที่จะทำซ้ำ) ทำให้การเติบโตทวีคูณ:
{].'.~'}.~
เอาท์พุท:
{].'.~'}{].'.~'}.~
ผลลัพธ์ใด:
{].'.~'}{].'.~'}{].'.~'}{].'.~'}.~
ผลลัพธ์ใด:
{].'.~'}{].'.~'}{].'.~'}{].'.~'}{].'.~'}{].'.~'}{].'.~'}{].'.~'}.~
และอื่น ๆ
{].'.~'}.~︵ ┻━┻
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
stdout
) ไม่มีอะไรที่เป็นจริงเอาท์พุท
QQ
นี่คือผลลัพธ์:
QQQQ
2^2^n
ที่ที่โปรแกรมเริ่มต้นคือการสร้าง 0 ความยาวเกิดm -> m^2
ขึ้นอีก
n
n^n
อย่างไรก็ตามนั่นเป็นเท็จ เมื่อความยาวโค้ดคือความยาวn
ของเอาต์พุตคือn^2
เวอร์ชันที่แก้ไขเล็กน้อยนี้ ( ผ่าน ):
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
คำแลมบ์ดาที่เรียบง่าย
(λ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)
ซึ่งเป็นควินินในแลมบ์ดาแคลคูลัสการประยุกต์ใช้ตัวเองสองครั้งที่นี่หมายความว่าเราได้รับผลลัพธ์เป็นสองเท่า
cat $0 $0
เติบโตในอัตราที่ชี้แจง
เรียกใช้sh whatever.sh
หรือตั้งค่าเป็นปฏิบัติการ
ค่อนข้างง่าย:
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
ซึ่งจะแสดงเป็น
นี่คือรหัสของนักรบที่เขียนได้ง่ายที่สุดในredcode , Imp ที่มีชื่อเสียง:
MOV 0, 1
เมื่อประมวลผลโค้ดจะเขียนสำเนาของคำสั่งเดียวที่อยู่ถัดไปในหน่วยความจำ จากนั้นเรียกใช้งานมันเป็นต้น
print(open(__file__).read())
f=lambda:print('f()')
f()
สิ่งนี้อาจทำให้สั้นลงโดยการแทนที่ __ file__ ด้วยชื่อไฟล์อักขระเดียวและบันทึกไฟล์เป็นอย่างนั้น แต่ฉันรู้สึกว่าคำตอบนี้เป็นจิตวิญญาณของคำถามมากขึ้น หลังจากทำซ้ำหนึ่งรอบจะมีผลลัพธ์:
print(open(__file__).read())
f=lambda:print('f()')
f()
f()
เวอร์ชันของกอล์ฟดูไม่สามารถอ่านได้เกือบดังนั้นฉันจะอธิบายก่อน (และใช้ตัวระบุจริง)
นี่คือตัวแปรของวิธีการแก้ไขตัวเองด้วยตนเอง
วิธีการพิมพ์ข้อความสวัสดีและแหล่งที่มาปัจจุบัน (สำหรับการสาธิตเท่านั้น) จากนั้นรหัสจะถูกปรับเปลี่ยนเพื่อส่งออกสตริงที่ยาวขึ้นและติดตั้ง ในที่สุดรหัสใหม่จะถูกเรียกซ้ำ
เพื่อปกป้องตัวเองจากการหลบหนีทันทีผู้ใช้สามารถยืนยันได้ในแต่ละรอบ
รวบรวมในวัตถุ:
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
จัดเก็บไฟล์ด้วย
sed p *
ในไดเรกทอรีว่างเปล่าของตัวเองและเรียกใช้จากไดเรกทอรีนี้โดยใช้sh [file]
หรือตั้งค่าปฏิบัติการ
ทางเลือกเก่าที่มี8 ตัวอักษรแต่ไม่ต้องการไดเรกทอรีของตัวเอง จัดเก็บไฟล์ด้วย
sed p $0
และรันโดยใช้sh [file]
หรือตั้งค่าปฏิบัติการ
ทางเลือกเก่าที่มี12 ตัวอักษร :
sed -i- p $0
สิ่งนี้จะส่งออกไปยังไฟล์โปรแกรมเอง แต่ไม่ได้ระบุตำแหน่งที่จะส่งออก จำลองตัวเองด้วยอัตราเลขยกกำลัง
ed
ไม่อยากที่จะมองผ่านหน้าคนของ ...
function f(){console.log(f+"f(f())")}f()
ครั้งแรกที่คุณเรียกใช้มันจะเอาท์พุทตัวเองพร้อมกับที่อื่น;f()
ในตอนท้าย การเรียกใช้ผลลัพธ์ผลลัพธ์ที่ตามมาในแต่ละแหล่ง "อินพุต" ที่พิมพ์สองครั้ง
alert
จะสั้นกว่าconsole.log
แต่ฉันไม่พิจารณากล่องโต้ตอบการแจ้งเตือนหลายรายการว่าจะเป็น "ผลลัพธ์" ในขณะที่การเรียกหลายบรรทัดในคอนโซลเป็นผลลัพธ์
"f(f())"
แทน"f();f()"
'
คำพูดเปิดให้ชัดข้อผิดพลาดอ้างเปิด:
|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
และอื่น ๆ ทุกครั้งที่มีการเรียกใช้รหัสบรรทัดที่สองจะถูกเสริมด้วยสี่ไบต์|
ตามความต้องการของการท้าทายนี้
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 มิติที่เป็นผลลัพธ์จะถูกพิมพ์เป็นสองแถวของสตริงเดียวกัน
"'34'coo1o;
นี่คือกรอบมาตรฐาน quine ยกเว้นมีการ1
พิมพ์พิเศษหลังจากการทำซ้ำแต่ละครั้ง ลองออนไลน์!
ผลลัพธ์สองสามตัวแรก:
"'34'coo1o;
"'34'coo1o;1
"'34'coo1o;11
"'34'coo1o;111
ไม่ใช่การแข่งขันภาษาโพสต์ความท้าทาย
"qp"qp
การวนซ้ำครั้งแรกจะเพิ่มส่วนเพิ่มเติมqp
ไปยังจุดสิ้นสุดและการวนซ้ำแบบต่อเนื่องแต่ละครั้งจะเพิ่มสำเนาพิเศษของโปรแกรมต้นฉบับนี้ไปยังจุดเริ่มต้น
"'<S@>
อันนี้แปลก ทั้งหมดที่ฉันต้องทำคือเอา~
จากควินเดิมพบโดยโจกษัตริย์
การวิ่งเพิ่มเติมทุกครั้ง<
จะต่อท้ายอีกเช่น:
"'<S@><<<<<<<<<
ทั้งหมดนี้ไม่ทำอะไรเลย
(_=x=>'(_='+_+Array(x++).join(','+_)+')('+x+')')(2)
มันสร้างเวอร์ชั่นที่ยาวกว่าของตัวมันเองซึ่งสามารถสร้างเวอร์ชั่นที่ยาวกว่าของตัวมันเองซึ่งสามารถสร้างเวอร์ชั่นที่ยาวกว่าของตัวเองได้ ฯลฯ ...
<?echo fgets(fopen(__FILE__,'r')).';';
มันจะเพิ่มเซมิโคลอนในการวิ่งแต่ละครั้ง
';'
บางทีคุณอาจจะใส่ในใน จากนั้นคุณจะได้ผลลัพธ์ที่ยาวขึ้น
<?=fgets(fopen(__FILE__,'r')).';';
?
;<?echo fgets(fopen(__FILE__,'r'));
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);
+_+ =_=
+1 สำหรับอีโมติคอน
(print `(or ,-))
จริงอยู่มันเป็นแบบโต้ตอบเท่านั้น แต่ความสามารถในการอ้างอิงรูปแบบระดับบนสุดในปัจจุบันน่าจะเป็นวิธีที่ดีที่สุดเพียงวิธีเดียวในการลดโปรแกรมที่ไม่น่าสนใจซึ่งเป็นไปตามข้อกำหนด
สิ่งที่จะน่าสนใจจริงๆคือสิ่งที่ระเบิดเร็วที่สุด บางทีสิ่งที่ชอบ
(print `(progn ,@(loop repeat (length -) collect -)))
`
และ,
?
or
เช่นกัน:(print -)
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);
ฉันหวังว่านี้เป็นไปตามกฎ
มันสร้างผลลัพธ์ที่มีขนาดใหญ่กว่าและตัวมันเองก็เป็นรหัสที่ถูกต้องที่จะสร้างผลลัพธ์ที่มีขนาดใหญ่ขึ้นอีกครั้ง
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
!
โอเค แต่มันมีลักษณะอย่างไร ดูเหมือนว่านี้:
ในภาพเคลื่อนไหวข้างต้นคุณสามารถเห็นรูปแบบเริ่มต้นสร้างลูกสาวที่ใหญ่ขึ้นซึ่งสร้างหลานสาวที่ใหญ่ขึ้นจากนั้นก็เป็นหลานสาวที่ยิ่งใหญ่กว่าและในที่สุดก็เป็นหลานสาวที่ยิ่งใหญ่ยิ่งใหญ่กว่า หลานสาว. หากคุณใช้รูปแบบนี้เป็นเวลานานมันจะยังคงดำเนินต่อไปเช่นนี้ตลอดไป (หรือบางทีพวกเขาอาจถูกครอบงำโดยสิ่งมีชีวิตที่พัฒนาแล้วซึ่งสามารถทำซ้ำได้เร็วกว่ามากฉันไม่แน่ใจ)
วางรหัสนี้ในไฟล์. bat ใด ๆ และมันจะดำเนินการต่อไป (ในวงวนไม่สิ้นสุด) และไฟล์ก็จะเติบโตขึ้นเช่นกัน
echo echo %0 ^>^> %0 >> %0
%0
เป็นคำสั่งที่ใช้เรียกสคริปต์ซึ่งอาจไม่มี.BAT
ส่วนขยาย คุณสามารถใช้%~nx0
เพื่อรับชื่อไฟล์แบบเต็มของไฟล์แบตช์
.bat
ดำเนินการ ถ้าชื่อไฟล์คือexecute.bat
คุณสามารถป้อนอย่างใดอย่างหนึ่งหรือexecute
execute.bat
ทั้งสองจะทำงาน
.bat
การขยายการดำเนินการ แต่คุณสามารถออกจากการขยายออกเมื่อคุณรันมัน (เมื่อคุณพิมพ์คำสั่งที่มีนามสกุลไม่มี Windows พยายาม.com
, .exe
แล้ว.bat
ตามลำดับ) หากชื่อไฟล์hello.bat
นั้น>> %0
จะเขียนชื่อไฟล์hello
ซึ่งไม่ใช่ต้นฉบับhello.bat
(และไม่สามารถเรียกใช้งานได้)
P(Q,Q)
พิมพ์เป็นซอร์สโค้ดของตัวเองคั่นด้วยการขึ้นบรรทัดใหม่ รุ่นที่สองจะเป็น
P(Q,Q)
P(Q,Q)
และอื่น ๆ
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
ซึ่งไม่ได้ทำอะไรเลย ครั้งต่อไปจะมีการเพิ่มบรรทัดอื่นและอื่น ๆ
H
Hello, World!
พิมพ์
อักขระอื่นที่ไม่ใช่ H เป็นซอร์สโค้ดที่ถูกต้อง (และปลอดภัย) (ซึ่งพิมพ์ตัวแปรอื่น ๆ ของ Hello World)