รหัสที่สั้นที่สุดในการผลิตการส่งออกไม่มีที่สิ้นสุด


121

เขียนรหัสที่สั้นที่สุดที่คุณสามารถสร้างเอาต์พุตไม่สิ้นสุด

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

นี่คือรายการคำตอบที่ฉันคิดว่าฉลาดจริง ๆ เพื่อให้พวกเขาได้รับเครดิต:

ลีดเดอร์บอร์ด


118
คำตอบทั้งหมดถูกตัดสิทธิ์เพราะในบางจุดโลกจะถูกกลืนหายไปจากดวงอาทิตย์และในบางจุดจักรวาลจะตาย: P
Doorknob

17
"ไม่สิ้นสุดจนกว่าคอมพิวเตอร์ของคุณจะล่ม" นับหรือไม่ <_ <
Izkata

5
ถ้าฉันเขียนของฉันในPietฉันจะนับจำนวนพิกเซลของข้อความที่ใช้กับโปรแกรมอื่นได้หรือไม่? ฉันเชื่อว่าโปรแกรม Piet ที่ทำซ้ำได้ขนาดเล็กที่สุดที่เป็นไปได้คือ 6 พิกเซล มันจะเต้นหากกด "off" พิกเซลจะนับ
DampeS8N

9
@Izkata ดังนั้นคำตอบใด ๆ ที่ทำให้คอมพิวเตอร์ของคุณยังอนุญาต: D
ɐɔıʇǝɥʇuʎs

7
@Doorknob ดังนั้นจริงๆความท้าทายคือการผลิตผลผลิตที่ไม่มีที่สิ้นสุดในจำกัดระยะเวลา ฟังดูง่ายพอ
Sanchises

คำตอบ:


212

Befunge (1)

.

ผลผลิต0ตลอดไป มันใช้งานได้เพราะใน Befunge บรรทัดพันรอบและคุณจะได้รับ0ถ้าคุณปรากฏขึ้นจากกองที่ว่างเปล่า


6
ฉันคิดว่าเรามีผู้ชนะ
โม่

96
ฉันสาบานว่าฉันมีคลาส Java แถวนี้ที่ใดที่หนึ่งที่สั้นกว่านี้ +1
l0b0

56
จุดนี้ทำให้ฉันมีชื่อเสียงมากกว่าคำตอบสองข้อต่อไปของฉัน
marinus

3
อ๊ะ ... มันไม่ยุติธรรม :) เราทำแบบนี้: ฉันลดขนาดของภาพลงสองพิกเซลและเราแสดงมันเล็กมาก .. เพื่อให้มันดูเหมือนจุด? และเรียกมันว่า :)
Benjamin Podszun

4
ทำไมนี่ไม่ใช่คำตอบที่ยอมรับ?
Claudiu

101

x86 .COM ปฏิบัติการ 7,

ใน hex:

b8 21 0e cd 10 eb fc

อื่น ๆ ต้องการกิโลไบต์หรือมากกว่าของไลบรารีระบบและรันไทม์ กลับไปสู่พื้นฐาน:

$ echo -ne '\xb8!\xe\xcd\x10\xeb\xfc' > A.COM
$ dosbox A.COM

เอาท์พุต

คุณสามารถเปลี่ยนไบต์ที่ 2 ( 0x21หรือ!) เพื่อเปลี่ยนเอาต์พุต

ใช้การขัดจังหวะ BIOS สำหรับการส่งออก; ไม่ต้องการ DOS แต่ฉันไม่ได้ติดตั้ง QEMU


คำอธิบาย

รหัสเครื่องสอดคล้องกับชุดประกอบต่อไปนี้:

        mov     ax, 0x0e21
again:  int     0x10
        jmp     again

เอาต์พุตอยู่ในการintโทร - ตามการอ้างอิงนี้ int 0x10 กับ 0x0e ใน AH จะพิมพ์ไบต์ใน AL ไปที่หน้าจอ

เมื่อทราบว่า register AX เป็นคำขนาด 16 บิตประกอบด้วย AH ในไบต์สูงและ AL ในไบต์ต่ำเราสามารถบันทึกภาระเพิ่มเติม (และจึงเป็นไบต์ในรหัสเครื่อง) โดยการโหลดเข้าด้วยกัน


2
ว้าว. นั่นเป็นสิ่งที่ดีจริงๆ
tbodt

46
ความยาวรหัสเครื่องต่ำควรคุ้มกับคะแนนมากกว่าภาษาระดับสูง
pwned

12
นี่คือรหัสที่สั้นที่สุดในความเป็นจริง
microbian

4
ไม่เพียงทำงานได้ แต่ทำงานได้เร็วกว่ารายการอื่น ๆ ทั้งหมด :)
Thane Brimhall

14
@ThaneBrimhall ซึ่งเป็นหลักสูตรเกณฑ์ที่สำคัญที่สุดโดยไกลสำหรับวง จำกัด ... ถ้าคอมพิวเตอร์ของฉันแฮงค์ขึ้นผมต้องการที่จะทำในวิธีที่มีประสิทธิภาพมากที่สุด!
kratenko

91

ไฟล์ Windows Batch 2 ตัวอักษร

%0

เรียกตัวเองอย่างไม่มีที่สิ้นสุด


12
ปิดสถานที่ที่สองผู้ชาย ทำได้ดี. ฉันเคยเห็นคำตอบเดียวที่แบทช์ชนะแล้ว
ลุง

มันยอดเยี่ยมจริงๆ !!!
Qwertiy

นี่มันเจ๋งมาก!
Patrick Purcell

วิธีการทำงาน: %0ไม่ได้ดังนั้นมันจะมีอะไรบางอย่างที่ส่งออกอย่างต่อเนื่องเช่น@ ...> %0นี่อาจกิน RAM ทั้งหมดจนบางครั้งเนื่องจากเป็นแบบเรียกซ้ำ
Erik the Outgolfer

2
@EriktheOutgolfer อาจจะ ? สิ่งนี้จะไม่ผิดพลาดในบางจุดเนื่องจากการเรียกซ้ำไม่สิ้นสุดหรือไม่ ฉันไม่เห็นว่าสิ่งนี้จะเกิดขึ้นได้อย่างไรในหลายชั่วโมง
phil294

68

Befunge 98 - 2

,"

เอาต์พุต ",,,,,,,,,," สำหรับชั่วนิรันดร์


2
อันที่จริงค่อนข้างฉลาด
tbodt

ขอขอบคุณ. มันแปลกมากที่ "รุ่นออกช่องว่าง (หรือ" เอาท์พุท 32 32 32) โดยใช้การใช้งาน b98 ที่พบบ่อยที่สุด ไม่มีความคิดว่าจะได้รับจากที่ใด
AndoDaan

1
มันแย่เกินไปที่ฝังไว้ใต้คำตอบที่เสแสร้ง 82,395
tbodt

7
@bodt ดีตามข้อกำหนดโปรแกรมเล็ก ๆ ของฉันมีทั้งหมดนิรันดร์เพื่อนิ้วขึ้น ดังนั้น ... นิ้วข้าม ...
AndoDaan

@AndoDaan: "สร้างสตริงของช่องว่างจุลภาคและ INT_MAX-2 แล้วพิมพ์ช่องว่างสุดท้ายดังนั้นสแต็กจะเติมเต็มด้วยช่องว่างจุลภาค INT_MAX-3 ซึ่งไม่มีประสิทธิภาพจริงๆ
YoYoYonnY

62

sh, 3 ไบต์

yes

ส่งออกyอย่างต่อเนื่อง


10
แม้ว่าyesจะเป็นไบนารีภายนอกและไม่ได้เป็นส่วนหนึ่งของการทุบตี (พูดอย่างเคร่งครัด)
บ๊อบ

55
ในทุบตี (เกือบ) ทุกอย่างเป็นไบนารีภายนอก
Johannes Kuhn

5
โดยปกติคุณไม่มีนามแฝงy=yesและหากระบบของคุณไม่มีความลับคุณสามารถสันนิษฐานได้ว่าyesมันมีอยู่ใน$PATH(ดูที่GNU Core Utilities ) ด้วยตรรกะของคุณเป็นไปได้ที่จะสมมติว่ากลุ่มดาวแปลก ๆ สำหรับทุกวิธี
klingt.net

5
ขวา แต่นี้ไม่ได้เป็นเพียงbashความสามารถ: I'ts เปลือก POSIXส่วนพื้นฐานของutils หลัก (เช่น: โปรดเปลี่ยนชื่อสำหรับsh: 3 chars ;-)
F. Hauri

2
เทคโนซอรัสกล่าวว่าใน busybox มันเป็น builtin แต่ใน sh มันไม่ได้ดังนั้นคุณต้องพูด sh + coreutils แทน
Erik the Outgolfer

42

Haskell: 8 ตัวอักษร

ด้ายเก่า แต่สิ่งหนึ่งที่สนุกคือ

 fix show

ใน Haskell มันพิมพ์

\\\\\\\\\\\\\....

ตลอดไปเนื่องจากเป็นพื้นวิ่ง

 let x = show x in x

มันรู้ว่านั่นxคือสตริงดังนั้นอักขระตัวแรก"จึงจำเป็นต้องมีการหลบหนี\"แต่รู้ว่า\จะต้องหลีกเลี่ยง\\\xและอื่น ๆ


... ว้าว. ตอนนี้ฉันสงสัยว่าfix$showจะเป็นสุนทรียภาพมากกว่านี้หรือไม่
จอห์นดวอ

7
เพราะสิ่งนี้ต้องการimport Data.Functionและเนื่องจากมันส่งคืนสตริงแทนที่จะพิมพ์มันฉันจึงถามถึงความยุติธรรมของการนับจำนวนตัวอักษร นอกจากนี้สตริงคือ "\" \\\ "\\\\\\\" \\\\\\\\\\\\\\\\\ "\" \\\\\\\\\\\\\\\ "\\\\\\\\\\\\\\\\\" "
Anders Kaseorg

36

ไฟล์ Windows Batch ขนาด 8 ตัวอักษร

:a
goto a

1
นี่ไม่ได้สร้างผลลัพธ์ที่ไม่มีที่สิ้นสุดใช่ไหม ... ?
Doorknob

38
มัน ... โดยไม่ต้อง @echo off มันจะพิมพ์ "goto a" จนกว่าคุณจะปิดมัน
Patrick Purcell

11
เราต้องการหมอค้างคาว
แถว

35
ฉันนับตัวอักษรสิบตัว: :a\r\ngoto aเพราะ Windows ใช้ CRLF
wchargin

1
@WChargin ฉันเพิ่งตรวจสอบโดยใช้โปรแกรมแก้ไขฐานสิบหก 3a 61 0a 67 6f 74 6f 20ทำงานบน windows 8 ของฉันได้ ... : P
YoYoYonnY

32

Brainfuck, 4

+[.]

อีกวิธีหนึ่งคือ

-[.]

8
ทั้ง\x01มิได้\xFFมีตัวอักษรพิมพ์ ฉันเดาว่านั่นไม่ใช่ข้อกำหนด แต่: / /
John Dvorak

วิธีที่จะทำให้มันเอาท์พุทตัวอักษรพิมพ์จะแทนที่ + กับมันไม่ได้หมายความว่าจะต้องมีการป้อนข้อมูลแม้ว่า
Prismo

31

Java, 54 ตัวอักษร

ความพยายามที่ดีที่สุดใน Java:

class A{static{for(int i=0;i<1;)System.out.print(1);}}

7
ฟังก์ชั่นสอดคล้องกับกฎ golfed สงสัยว่าทำไมมันถูกลดระดับลง
จัดการ

14
java ห้ามfor(;;)รูปแบบคลาสสิกหรือไม่ เกี่ยวกับwhile(true)อะไร
CodesInChaos

17
@CodesInChaos, Java ไม่ปกติไม่อนุญาตรูปแบบเหล่านั้นและโดยปกติแล้วฉันจะถือว่าสะอาดและสำนวนมากขึ้น ที่นี่แม้ว่าเรากำลังพยายามแอบดูลูปที่ไม่มีที่สิ้นสุดผ่านคอมไพเลอร์
Rich Smith

2
@ Mechanicalsnail ใช่บล็อกแบบสแตติกไม่สามารถทำงานเดี่ยวได้ตั้งแต่ java 7
Fabinout

1
@OliverNi แต่คุณไม่สามารถใช้staticบล็อกได้
Okx

30

Bash ขนาด 4 ไบต์

$0&$

ส่งออก./forever2.sh: line 1: $: command not foundอย่างต่อเนื่อง

เนื่องจาก$0มีพื้นหลังผู้ปกครองแต่ละคนจะตายหลังจากคำสั่งที่ไม่ถูกต้อง$และไม่สามารถกินกองซ้อน / หน่วยความจำได้และสิ่งนี้ควรดำเนินต่อไปเรื่อย ๆ

ผลลัพธ์ที่ออกมาจะช้าและช้าลงตามเวลา topรายงานว่าการใช้ CPU ของระบบใกล้เคียง 100% แต่มีกระบวนการหน่วยความจำหรือ CPU-hog สันนิษฐานว่าการจัดสรรทรัพยากรบางอย่างในเคอร์เนลลดลงและมีประสิทธิภาพน้อยลง


2
อาจเป็นพฤติกรรมของ stdout หรือคล้ายกัน ...
masterX244

1
การทำให้ทรัพยากรว่างกำลังแข่งขันกับการฟอร์กกระบวนการ / ในการหยุดคุณไม่สามารถฆ่ากระบวนการเนื่องจาก PID เปลี่ยนวิธีเดียวที่จะหยุดมันได้คือเปลี่ยนชื่อสคริปต์ดังนั้นจึง$0ล้มเหลว
Emmanuel

29

LOLCODE (36)

HAI IZ 1<2? VISIBLE "0" KTHX KTHXBYE 

คิดว่าฉันจะให้ LOLCODE หนึ่งนัดมีฟังก์ชั่นจำนวนมากอย่างน่าประหลาดใจ


2
ไม่จำเป็นต้องถามเกี่ยวกับ stdio
แมว

ในรุ่น repl.it ของ LOLCODE คุณไม่ต้องการHAIและKTHXBYE
MilkyWay90

24

JavaScript: 14

คำเตือน: คุณไม่ต้องการเรียกใช้สิ่งนี้ในเบราว์เซอร์ของคุณ

for(;;)alert()

31
เพียงทำเครื่องหมายที่ "ป้องกันไซต์นี้จากการเปิดกล่องโต้ตอบเพิ่มเติม"
โยฮันน์คุห์น

1
@JohannesKuhn ไม่ตรวจสอบเรื่องนี้และคุณจำเป็นต้องรีบูตเครื่อง
Ilya Gazman

8
หรือเพียงแค่ไม่ทำอะไรเลยและจะไม่แสดงผลลัพธ์ใด ๆ เพิ่มเติม
Johannes Kuhn

แค่ทำงานก็alert()ช่วยให้ฉันมีข้อผิดพลาดนี้Error: Not enough arguments [nsIDOMWindow.alert]
ไคลด์ Lobo

3
มันเป็นผลลัพธ์ที่ไม่สิ้นสุดจริง ๆ หรือไม่เมื่อกระบวนการถูกบล็อกและดำเนินการหยุดจนกว่าการตอบสนองของมนุษย์?
Morten Bergfall

24

เครื่องจักรทัวริง - 6 ตัว:

#s->1Rs

โดยที่#สัญลักษณ์ว่างเปล่า (บนเทปโดยค่าเริ่มต้น) sอธิบายถึงสถานะ (เริ่มต้น) ที่มีอยู่เท่านั้นที่1กำลังพิมพ์Rตัวเลขหมายถึงการเลื่อนไปทางขวาsเมื่อสิ้นสุดอยู่ในสถานะเดียวกัน


3
ฉันนับ 7 ตัวอักษร!
F. Hauri

9
ในบางทีสัญกรณ์ 5-tuple ที่พบมากที่สุดสิ่งนี้จะถูกเขียนเพียงแค่5ตัวอักษรs#1Rs(สถานะปัจจุบัน, สัญลักษณ์ปัจจุบัน, สัญลักษณ์ต่อการเขียน, ทิศทางสู่การเปลี่ยน, สถานะถัดไป)
res

19

Haskell, 10

print[1..]

ฉันคิดว่านี่เป็นรหัสที่สั้นที่สุด

  1. พิมพ์บางอย่างออกมา
  2. สร้างโครงสร้างข้อมูลที่ไม่ จำกัดShow: สามารถ

สำหรับผู้ที่สนใจมันพิมพ์:

[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,...

4
มีเหตุผลใดบ้างที่คุณเลือกหมายเลขเวทมนต์ 32 เพื่อหยุดที่
ike

12
มันดูดีและกลมกลืนที่เต็มไปด้วยช่องว่างรหัสบล็อกและเป็นไปได้โดยไม่จำเป็นต้องมีบรรทัดถัดไป
shiona

2
หากเครื่องมีจำนวนหน่วยความจำที่ จำกัด เครื่องอาจสิ้นสุดลงเมื่อจำนวนเต็มมากเกินไปที่จะเก็บไว้ในหน่วยความจำ?
Jeppe Stig Nielsen

3
@JeppeStigNielsen ใช่ อย่างไรก็ตามจำนวนเต็มที่จะเติมหน่วยความจำแม้แต่หนึ่งเมกะไบต์จะเป็น 2 ^ (2 ^ 20) หรือประมาณ 6.7 * 10 ^ 315652 ขึ้นอยู่กับหน่วยความจำกิกะไบต์และจำนวนจะกลายเป็น 2 ^ (2 ^ 30) สัตว์ประหลาดที่มีเกือบครึ่งล้านหลัก ฉันค่อนข้างแน่ใจว่าถ้าเราลองพิมพ์ชุดความร้อนความตายของจักรวาลจะตีเราก่อนที่หน่วยความจำจะหมด และความล้มเหลวของ HDD ก่อนหน้านั้น
shiona

5
ในความคิดเห็นด้านล่าง OP มีการกล่าวถึงว่า 'ไม่สิ้นสุดจนกว่าคอมพิวเตอร์ของคุณจะล่ม' ก็มีการนับเช่นกัน
11684

19

Marbelous 4

24MB

Marbelous ทำได้ดีที่นี่ สิ่งนี้จะโพสต์เครื่องหมายดอลลาร์เป็นจำนวนอนันต์$แม้ว่าจะถึงขีด จำกัด สแต็กค่อนข้างเร็ว

มันทำงานอย่างไร.

24 เป็นตัวอักษรภาษาซึ่งจะหลุดออกจากบอร์ดและพิมพ์ไปยัง STDOUT เป็นตัวอักษร ASCII ที่สอดคล้องกัน MB คือชื่อที่กำหนดให้กับกระดานหลักโดยปริยายเนื่องจากกระดานหลักไม่มีอินพุตจึงจะยิงทุกเห็บ และเนื่องจากเซลล์ถูกประเมินจากซ้ายไปขวาตัวอักษรจะถูกพิมพ์ก่อนการเรียกซ้ำครั้งถัดไปเสมอ

ดังนั้นนี่จึงเท่ากับ pseudocode นี้อย่างแน่นอน:

MB() {
    print('$');
    while(true) MB();
}

วิธีการแก้ปัญหาที่ไม่มีการเรียกซ้ำไม่สิ้นสุด 11

24@0
@0/\..

หนึ่งนี้ทำงานโดยการวนลูปอักษรระหว่างสองพอร์ทัล@0เมื่อใดก็ตามที่ 24 เพลงฮิตที่ต่ำกว่าก็จะถูกส่งไปยังเซลล์ใต้ตอนบน@0 @0มันคือดินแดนบน/\ซึ่งเป็นผู้ประกอบการโคลนมันวางหินอ่อนหนึ่งตัว (ตัวอักษร) ไว้ทางซ้าย (กลับบนพอร์ทัล) และอีกอันหนึ่งไปทางขวา Coopy นี้จะหลุดออกจากบอร์ด (เนื่องจาก..เป็นเซลล์ว่าง) และถูกพิมพ์ไปยัง STDOUT ใน pseudocode สิ่งนี้จะแปลเป็น:

MB() {
    while(true) print '$'
}

โซลูชันที่สั้นกว่าโดยไม่มีการเรียกซ้ำที่ไม่สิ้นสุด 9

24
\\/\..

อันนี้โยนหินอ่อนอย่างต่อเนื่องรอบ ๆ ระหว่าง cloner และ deflector โดยวางหนึ่งสำเนาไว้ที่เซลล์ด้านขวาสุดเพื่อให้หลุดออกจากกระดาน ใน pseudocode ที่ดูเหมือน:

MB() {
    List charlist = ['$'];
    while(true) {
        charlist.add(charlist[0];
        charlist.add(charlist[0];
        charlist.pop();
        print(charlist.pop());
        // Wait, what?
    }
}

บันทึก

..เซลล์ที่มีความจำเป็นในสองแผงสุดท้ายตั้งแต่หินอ่อนจะที่ดินปิดบอร์ด (และถูกยกเลิก) มิฉะนั้น เพื่อความสนุกสนานเป็นพิเศษคุณสามารถแทนที่24หินอ่อนด้วยFFและ..เซลล์ว่างด้วย a ??ซึ่งเปลี่ยนหินอ่อนให้เป็นหินอ่อนระหว่าง 0 และเป็นค่าปัจจุบันก่อนที่จะวางลง คาดเดาสิ่งที่จะมีลักษณะเหมือนใน STDOUT


ทำให้ "/ \ / \" "\\ / \" ของคุณเพื่อหลีกเลี่ยงการผลิตหินอ่อนพิเศษออกจากขอบด้านซ้ายหรือไม่ การปรับปรุงความงามอย่างหมดจด
Sparr

@ Sparr จุดนำฉันได้แก้ไขโพสต์
overactor

5
โซลูชันนี้ไม่ควรเป็น 25165824 ไบต์ (24MB) ; P
HyperNeutrino

18

C, 23 ตัวอักษร

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

main(){main(puts(""));}

1
22 ตัวอักษร: putc(0)(หรือ 1 หรือ 2, ... หรือ 9) มันจะใช้ได้ไหม
CompuChip

@CompuChip putcต้องใช้ 2 พารามิเตอร์
ugoren

10
@tdbot โปรดสังเกตว่านี่เป็นคำตอบที่ยอมรับแล้ว ฉันชื่นชมคำชม แต่ไม่เข้าใจว่าทำไม มีคำตอบที่สั้นลง
ugoren

@tbodt ไม่ใช่ tdbot ftfy
nyuszika7h

5
@ nyuszika7h วิธีนี้ฉันสามารถแสดงให้เห็นว่าฉันเจียมเนื้อเจียมตัวในขณะที่ถือตัวแทน 15
ugoren

14

Python 3: 15, 17 หรือ 18 ตัวอักษร

คำตอบของ mdeitrickนั้นยาวกว่าใน Python 3 ซึ่งแทนที่printคำสั่งด้วยการเรียกใช้ฟังก์ชัน (15 ตัวอักษร):

while 1:print()

นี่เป็นวิธีที่สั้นที่สุดที่ฉันเคยพบใน Python 3 อย่างไรก็ตามมีวิธีการพิมพ์ที่น่าสนใจมากกว่าในการวนซ้ำไม่สิ้นสุดที่มีความยาวเพียงไม่กี่ตัวอักษร

  • print()ส่งคืนNoneซึ่ง! = 9 ทำให้เป็นวงไม่สิ้นสุด 8เป็น no-op ที่ทดแทนpass(18 ตัวอักษร):

    while print()!=9:8
    
  • iter(print, 9)กำหนด iterable ที่ส่งคืนเอาต์พุตของprint()จนกว่าจะเท่ากับ9(ซึ่งไม่เคยเกิดขึ้น) anyกินการป้อนข้อมูล iterable มองหามูลค่าที่แท้จริงซึ่งไม่เคยมาถึงตั้งแต่ผลตอบแทนเสมอprint() None(คุณสามารถใช้เอsetฟเฟ็กต์เดียวกัน)

    any(iter(print,9))
    
  • หรือเราสามารถบริโภค iterable โดยการทดสอบว่ามี8(17 ตัวอักษร):

    8in iter(print,9)
    
  • หรือแกะกล่องโดยใช้เครื่องหมายควบคุม :

    *_,=iter(print,9)
    
  • วิธีที่แปลกประหลาดที่สุดที่ฉันคิดคือการใช้การทำลายสีแดงในการเรียกฟังก์ชัน, function(*iterable). ดูเหมือนว่า Python พยายามที่จะใช้มันทั้งหมดก่อนที่จะพยายามเรียกใช้ฟังก์ชั่น - แม้ว่าการเรียกใช้ฟังก์ชั่นจะเป็นการหลอกลวง ซึ่งหมายความว่าเราไม่จำเป็นต้องมีฟังก์ชั่นจริงเพราะข้อผิดพลาดประเภทจะถูกโยนทิ้งหลังจากการทำซ้ำหมด (เช่นไม่เคย):

    8(*iter(print,9))
    

*iter(print,1),ใช้งานได้และมีเพียง 15 ตัวอักษร แต่ใช้หน่วยความจำน้อย
ivzem


14

x86 .COM ปฏิบัติการได้ 5 ไบต์

ASCII ถ่านชุดผลลัพธ์ที่ไม่มีที่สิ้นสุด

ใน hex:

40 CD 29 FF E6

ใน asm:

inc ax
int 0x29
jmp si

คำอธิบาย:

inc axเพิ่ม register register ทีละหนึ่ง int 0x29คือรูทีน "fast put char" ของ MSDOS ซึ่งจะแสดงผลลัพธ์ใน AL (ส่วนต่ำของ AX) และเลื่อนเคอร์เซอร์ไปทีละอัน jmp siเป็นเพียงวิธีแปลก ๆ ในการกระโดดกลับไปด้านบนเนื่องจาก register SI คือ 0x100 ในเกือบทุกระบบปฏิบัติการที่เหมือนดอสซึ่งเป็นที่ที่โปรแกรม. com เริ่ม;) นอกจากนี้ยังสามารถกระโดดสั้น ๆ แทนได้เช่นกัน ใช้ 2 ไบต์

แหล่งที่มา:

ค่าเริ่มต้นของ MSDOS

Sizecoding WIKI


13

Bitxtreme 0.25 ไบต์

การเป็นตัวแทนไบนารี:

00

จากเอกสาร:

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

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

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

มันอาจเป็นที่ถกเถียงกันอยู่ว่าโปรแกรมนี้ควรจะได้คะแนนเป็น 1 ไบต์เพราะล่ามอย่างเป็นทางการใน Python ต้องการ zero-padding แต่ผมไม่คิดว่าเป็นศูนย์ padding มันรหัส


12

เรื่องย่อ: Ruby - 9, Golfscript - 6,> <> - 2, Whitespace - 19, Perl - 2

ภาษาหนึ่งที่ฉันรู้จักและอีกสองภาษาที่ฉันไม่เคยใช้มาก่อน: D
แก้ไข: ภาษา Perl ไม่ทำงานเมื่อฉันติดตั้ง Perl เพื่อลอง: (

ทับทิม, 9

loop{p 1}

เพียงพิมพ์ 1 บนบรรทัดแยกกันอย่างต่อเนื่อง

นอกจากนี้ทางเลือกมากมาย:

loop{p''} # prints [ "" ]  on separate lines continually
loop{p p} # prints [ nil ] on separate lines continually

โซลูชัน 10 char:

p 1while 1

ฉันประหลาดใจจริงๆที่ฉันสามารถลบช่องว่างระหว่างแรก1และที่whileแต่เห็นได้ชัดว่ามันใช้งานได้

Golfscript, 6

{1p}do

โปรแกรม Golfscript แรกของฉัน! : P

> <> ( ปลา ) 2

1n

ช่องว่าง , 19

lssslssstltlsslslsl

ซึ่งsแทนช่องว่างtแสดงถึงแท็บและlตัวป้อนบรรทัด


11
ทุกครั้งที่มีคนพิมพ์คำว่า "ฉันไม่มี Perl" พระเจ้าก็ฆ่าลูกแมว
โม่

2
@primo: P อย่างน้อยตอนนี้ฉันทำ
Doorknob

2
นี่คือรหัสกอล์ฟ โปรดสร้างหนึ่งคำตอบต่อการส่งหนึ่งครั้ง
JB

21
@primo ดีฉันเกลียดแมว และฉันไม่มี Perl
SQB

5
โปรแกรม GS {1p}doพิมพ์1และออกเท่านั้นเพราะการทำนั้นเป็นลำดับการทดสอบ exec-pop-test ที่จะดำเนินต่อไปหากทำการทดสอบจริง (เนื่องจากไม่มีการป้อนข้อมูลสแต็กจะเริ่มต้น""ซึ่งหลังจาก exec ของ1p, ได้รับการตอกและทดสอบเท็จ.) เพียงแค่เพิ่ม dup จะทำงานแม้ว่าเช่น{1.p}do(ที่ 7 ไบต์)
res

12

C, 25 24

main(){main(puts("1"));}

4
s/while/main/
ugoren

2
ฉันไม่แน่ใจว่ามีข้อยกเว้น stackoverflow ใน C แต่มีบางอย่างไม่ดีเกิดขึ้นเมื่อหน่วยความจำของคุณหมด
Ilya Gazman

9
Tailcall การเพิ่มประสิทธิภาพ ftw
โยฮันน์คุห์น

4
@JohannesKuhn: นั่นไม่ใช่การเรียกหาง ถ้าเป็นแบบreturn main(puts("1"))นั้นมันจะเป็นการโทรหาง
marinus

4
@psgivens ในฟังก์ชั่น ca โดยไม่มีพารามิเตอร์ใด ๆ สามารถใช้พารามิเตอร์จำนวนเท่าใดก็ได้ เฉพาะลายเซ็นของmethodName(void)ยอมรับพารามิเตอร์ที่แน่นอนเท่านั้น
James Webster

12

> <> (ปลา) 2

วิธีที่สร้างสรรค์ในการใช้ตู้ปลาที่ไม่มีที่สิ้นสุด:

"o

เนื่องจากตัวชี้คำสั่งส่งคืนกลับไปที่จุดเริ่มต้นของบรรทัดหลังจากถึงจุดสิ้นสุดรหัสนี้จึงสามารถอ่านได้

"o"o

ซึ่งหมายความว่า 'อ่านสตริง "o" แล้วเอาท์พุทมัน'

คุณสามารถทดสอบรหัสได้ที่นี่


11

Perl 10 ตัวอักษร

ต่อไปนี้เป็นอีกโซลูชัน 10 char perl ที่มีการแลกเปลี่ยนที่แตกต่างกัน โดยเฉพาะมันไม่ต้องการแฟล็ก -n หรืออินพุตผู้ใช้เพื่อเริ่มต้น อย่างไรก็ตามมันจะทำให้การกินหน่วยความจำโฆษณาไม่มีที่สิ้นสุด

warn;do$0

บันทึกเป็นไฟล์เรียกใช้ไฟล์นั้นและคุณจะได้รับเช่น:

Warning: something's wrong at /tmp/foo.pl line 1.
Warning: something's wrong at /tmp/foo.pl line 1.
Warning: something's wrong at /tmp/foo.pl line 1.

คุณไม่สามารถทำให้การใช้ที่สั้นกว่านี้say(ซึ่งพิมพ์บรรทัดใหม่เสมอแม้ว่าจะไม่สามารถหาข้อโต้แย้งจากที่ใดก็ได้) แทนที่จะเป็นwarn? (สิ่งนี้ต้องการการเลือกตัวแปร Perl ที่ทันสมัยโดยใช้-M5.010แต่ไม่นับรวมกับจำนวนตัวอักษรของคุณ)


10

VBA: 12

เสียงออกมาใช่มั้ย

do:beep:loop

ใส่มันลงในไฟล์ MS office ที่เปิดใช้งานมาโครที่ชื่นชอบ 'เพื่อนร่วมงาน' เพื่อความสนุก '!

Private Sub Workbook_Open()
    Do:Beep:Loop
End Sub

คะแนนโบนัสหากพวกเขากำลังใช้หูฟัง


แดงฉันกำลังค้นหาคำตอบเพื่อดูว่าใครมีความคิดเกี่ยวกับการพิมพ์ระฆังถ่าน +1
mbomb007

9

เมล็ดพันธุ์ 4 ไบต์

99 5

ลองออนไลน์! เอาต์พุต11ไม่สิ้นสุด

สร้างโปรแกรม Befunge-98 ต่อไปนี้:

[glzgx"Lz^v*M7TW!4:wi/l-[, s44~s;|Sa3zb|u<B/-&<Y a@=nN>Nc%}"gq!kCW $1{2hyzABRj*glr#z(@Zx@xT=>1'.b
/

ลองออนไลน์!


ส่วนที่เกี่ยวข้องเป็นเพียงแค่นี้:

[>1'.b
/

bดัน11ไปที่สแต็กและ.พิมพ์ 1และ49ถูกผลักไปยังกองซ้อน แต่ไม่เคยพิมพ์จริง

นิเมชั่นของรหัสที่ทำงาน:

ป้อนคำอธิบายรูปภาพที่นี่


1
ในที่สุดสิ่งนี้จะหมดหน่วยความจำหรือไม่หากค่าถูกผลักไปที่กองซ้อนอย่างต่อเนื่องโดยไม่โผล่
caird coinheringaahing

8

C, 26 25 24 (ไม่เรียกซ้ำ)

main(){for(;;puts(""));}

พิมพ์'\n'ตัวละครที่ไม่มีที่สิ้นสุด นี่เป็นไบต์ที่ยาวกว่าคำตอบ C สั้นที่สุด แต่ไม่ต้องพึ่งพาการปรับแต่งหางแบบหางเพื่อหลีกเลี่ยงการล้นสแต็ค


2
คุณสามารถกำจัดตัวละครโดยใช้for(;;)แทนwhile(!
Alex Gittemeier

1
ไม่!เป็นมันยังคงเอา\n
ท์พุท

7

R, 13 ตัวอักษร

repeat cat(1)

repeat cat(1)ควรทำงาน
Dason

@Dason คุณพูดถูก ฉันไม่รู้ว่าทำไมฉันยืนยันที่จะวางพวกเขาทุกครั้ง
plannapus

7

PowerShell 2.0: 17 11 8

ทางออกแรกของฉัน:

while(1 -eq 1){1}

ขอบคุณ res:

while(1){1}

ฉันคิดว่า Danko Durbićมีผู้ชนะที่นี่ ฉันไม่แน่ใจด้วยซ้ำว่าทำไมสิ่งนี้ถึงได้ผล แต่มันก็ทำได้และฉันก็ไม่สามารถนึกถึงอะไรที่สั้นกว่านี้ได้

for(){1}

1
ลองwhile(1){1}ดู
res

@res ฉันกำลังจะไปตัดมันสองมีwhile($true){1}แต่วิธีการแก้ปัญหาของคุณแน่นอนชนะ - ฉันลืมว่าใน $true -eq 1PowerShell โพสต์ว่าเป็นคำตอบและฉันจะให้คะแนนคุณ
Iszi

คุณสามารถแก้ไขเป็นของคุณได้ตามต้องการ
res

6
ลองfor(){1}ดู
Danko Durbić

@ DankoDurbićคุณช่วยอธิบายได้ไหมว่าทำไมถึงได้ผล? ฉันไม่เข้าใจเลย ดูเหมือนว่ามันควรจะผิดพลาดกับฉัน
Iszi
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.