Vòng lặp vô hạn ngắn nhất không tạo ra đầu ra


121

Nhiệm vụ của bạn là tạo ra vòng lặp vô hạn ngắn nhất!

Điểm của thách thức này là tạo ra một vòng lặp vô hạn không tạo ra đầu ra, không giống như sự trùng lặp có thể có của nó. Lý do cho điều này là vì mã có thể ngắn hơn nếu không có đầu ra nào được đưa ra.

Quy tắc

  • Mỗi bài nộp phải là một chương trình đầy đủ.
  • Bạn phải tạo vòng lặp vô hạn ngắn nhất.
  • Ngay cả khi cuối cùng chương trình của bạn hết bộ nhớ, nó vẫn được chấp nhận miễn là nó chạy toàn bộ thời gian từ lúc bắt đầu đến khi hết bộ nhớ. Ngoài ra, khi hết bộ nhớ, nó vẫn không nên in bất cứ thứ gì sang STDERR.
  • Chương trình phải không có đầu vào (tuy nhiên, đọc từ một tệp được cho phép) và không nên in bất cứ điều gì sang STDOUT. Đầu ra cho một tập tin cũng bị cấm.
  • Chương trình không được ghi bất cứ điều gì vào STDERR.
  • Hãy sử dụng một ngôn ngữ (hoặc phiên bản ngôn ngữ) ngay cả khi nó mới hơn thử thách này. -Lưu ý rằng phải có một thông dịch viên để trình có thể được kiểm tra. Được phép (và thậm chí được khuyến khích) tự viết trình thông dịch này cho một ngôn ngữ chưa được thực hiện trước đó. :CƯỜI MỞ MIỆNG
  • Đệ trình được tính bằng byte, trong một mã hóa thích hợp (tồn tại trước), thường (nhưng không nhất thiết) UTF-8. Một số ngôn ngữ, như Thư mục, hơi khó để ghi điểm - nếu nghi ngờ, vui lòng hỏi trên Meta.
  • Đây không phải là về việc tìm kiếm ngôn ngữ với chương trình vòng lặp vô hạn ngắn nhất. Đây là về việc tìm kiếm chương trình vòng lặp vô hạn ngắn nhất trong mọi ngôn ngữ. Do đó, tôi sẽ không chấp nhận một câu trả lời.
  • Nếu ngôn ngữ bạn chọn là một biến thể tầm thường của ngôn ngữ khác (có khả năng phổ biến hơn) đã có câu trả lời (nghĩ theo phương ngữ BASIC hoặc SQL, shell Unix hoặc Brainf ** k-dẫn xuất như Alphuck), hãy xem xét thêm ghi chú vào hiện tại trả lời rằng cùng một hoặc một giải pháp rất giống nhau cũng là ngắn nhất trong ngôn ngữ khác.
  • Cần có một trang web như Wikipedia, Esolangs hoặc GitHub cho ngôn ngữ. Ví dụ: nếu ngôn ngữ là CJam, thì người ta có thể liên kết đến trang web trong tiêu đề như thế nào #[CJam](http://sourceforge.net/p/cjam/wiki/Home/), X bytes.
  • Sơ hở tiêu chuẩn không được phép.

(Tôi đã thực hiện một số quy tắc này từ thử thách "Hello World" của Martin Büttner)


Xin vui lòng gửi trong các ý kiến ​​để cho tôi biết làm thế nào thử thách này có thể được cải thiện.

Mục lục

Đây là một Snippet Stack tạo ra một danh mục theo thứ tự chữ cái của các ngôn ngữ được sử dụng và bảng xếp hạng tổng thể. Để đảm bảo câu trả lời của bạn hiển thị, vui lòng bắt đầu với tiêu đề Markdown này:

# Language name, X bytes

Rõ ràng thay thế Language nameX bytesvới các mặt hàng thích hợp. Nếu bạn muốn liên kết đến trang web của các ngôn ngữ, hãy sử dụng mẫu này, như đã đăng ở trên:

#[Language name](http://link.to/the/language), X bytes

Bây giờ, cuối cùng, đây là đoạn trích: (Thử nhấn "Toàn trang" để xem tốt hơn.)

var QUESTION_ID=59347;var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe";var COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk";var OVERRIDE_USER=41805;var answers=[],answers_hash,answer_ids,answer_page=1,more_answers=true,comment_page;function answersUrl(index){return"//api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+index+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(index,answers){return"//api.stackexchange.com/2.2/answers/"+answers.join(';')+"/comments?page="+index+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:true,success:function(data){answers.push.apply(answers,data.items);answers_hash=[];answer_ids=[];data.items.forEach(function(a){a.comments=[];var id=+a.share_link.match(/\d+/);answer_ids.push(id);answers_hash[id]=a});if(!data.has_more)more_answers=false;comment_page=1;getComments()}})}function getComments(){jQuery.ajax({url:commentUrl(comment_page++,answer_ids),method:"get",dataType:"jsonp",crossDomain:true,success:function(data){data.items.forEach(function(c){if(c.owner.user_id===OVERRIDE_USER)answers_hash[c.post_id].comments.push(c)});if(data.has_more)getComments();else if(more_answers)getAnswers();else process()}})}getAnswers();var SCORE_REG=/<h\d>\s*([^\n,<]*(?:<(?:[^\n>]*>[^\n<]*<\/[^\n>]*>)[^\n,<]*)*),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/;var OVERRIDE_REG=/^Override\s*header:\s*/i;function getAuthorName(a){return a.owner.display_name}function process(){var valid=[];answers.forEach(function(a){var body=a.body;a.comments.forEach(function(c){if(OVERRIDE_REG.test(c.body))body='<h1>'+c.body.replace(OVERRIDE_REG,'')+'</h1>'});var match=body.match(SCORE_REG);if(match)valid.push({user:getAuthorName(a),size:+match[2],language:match[1],link:a.share_link,});else console.log(body)});valid.sort(function(a,b){var aB=a.size,bB=b.size;return aB-bB});var languages={};var place=1;var lastSize=null;var lastPlace=1;valid.forEach(function(a){if(a.size!=lastSize)lastPlace=place;lastSize=a.size;++place;var answer=jQuery("#answer-template").html();answer=answer.replace("{{PLACE}}",lastPlace+".").replace("{{NAME}}",a.user).replace("{{LANGUAGE}}",a.language).replace("{{SIZE}}",a.size).replace("{{LINK}}",a.link);answer=jQuery(answer);jQuery("#answers").append(answer);var lang=a.language;lang=jQuery('<a>'+lang+'</a>').text();languages[lang]=languages[lang]||{lang:a.language,lang_raw:lang,user:a.user,size:a.size,link:a.link}});var langs=[];for(var lang in languages)if(languages.hasOwnProperty(lang))langs.push(languages[lang]);langs.sort(function(a,b){if(a.lang_raw.toLowerCase()>b.lang_raw.toLowerCase())return 1;if(a.lang_raw.toLowerCase()<b.lang_raw.toLowerCase())return-1;return 0});for(var i=0;i<langs.length;++i){var language=jQuery("#language-template").html();var lang=langs[i];language=language.replace("{{LANGUAGE}}",lang.lang).replace("{{NAME}}",lang.user).replace("{{SIZE}}",lang.size).replace("{{LINK}}",lang.link);language=jQuery(language);jQuery("#languages").append(language)}}
body{text-align:left!important}#answer-list{padding:10px;width:500px;float:left}#language-list{padding:10px;padding-right:40px;width:500px;float:left}table thead{font-weight:700}table td{padding:5px}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b"> <div id="language-list"> <h2>Shortest Solution by Language</h2> <table class="language-list"> <thead> <tr><td>Language</td><td>User</td><td>Score</td></tr> </thead> <tbody id="languages"> </tbody> </table> </div> <div id="answer-list"> <h2>Leaderboard</h2> <table class="answer-list"> <thead> <tr><td></td><td>Author</td><td>Language</td><td>Size</td></tr> </thead> <tbody id="answers"> </tbody> </table> </div> <table style="display: none"> <tbody id="answer-template"> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr> </tbody> </table> <table style="display: none"> <tbody id="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr> </tbody> </table>


41
Tôi đã bắt đầu đăng các chương trình có số byte âm để đánh bại tất cả các tệp trống này!
CJ Dennis

3
Thử thách này rất thú vị vì nó mang lại rất nhiều ngôn ngữ 0 byte (một số ngôn ngữ KHÔNG phải là esolang). FWIW, hầu hết các ngôn ngữ khai báo đều có một vòng lặp vô hạn ngầm định vì các ngôn ngữ khai báo không có vòng lặp trong cú pháp của chúng (chúng cho rằng chúng đang chạy trong một vòng lặp vô hạn). Sơ đồ thang có lẽ là một trong những ngôn ngữ lâu đời nhất như vậy. Sau đó, bạn có Ngôn ngữ lệnh (IL), một loại lắp ráp cho các PLC cũng giả sử một vòng lặp vô hạn. Các IL, giống như lắp ráp là khác nhau giữa các nhà sản xuất
slebetman

Các chương trình đọc và thực thi mã nguồn của riêng họ có được phép không, hoặc tệp I / O có phá vỡ quy tắc "phải không có đầu vào" không?
ThisSuitIsBlackNot

1
@ ThisSuitIsBlackNot Có, nhập tệp được cho phép.
Bò lang băm

Bạn có thể in "", một chuỗi trống?
OldBunny2800

Câu trả lời:


216

Befunge , 0 byte



Vâng Một chương trình Befunge tồn tại trong một sân chơi hai chiều với kích thước cố định bao quanh các cạnh. Không có gì trong không gian đó để can thiệp, bộ đếm chương trình chạy trong một vòng lặp vô hạn theo mặc định :)


10
Aw, tôi sẽ đăng cái này : /
Deusovi

5
@daniero Nó có thể có một số liên quan đến lỗ hổng tiêu chuẩn này ... . Cá nhân tôi không đồng ý với kẽ hở tiêu chuẩn.
Justin

17
@Justin Lỗ hổng đó chỉ áp dụng cho một số loại thử thách nhất định.
Dennis

1
Bạn có thể sử dụng <pre>&nbsp;</pre>cho một khối mã trông trống rỗng.
Immibis

Điều đầu tiên tôi tìm kiếm
Dylan Madisetti

150

L00P , 0 byte



Lang này được tạo ra để lặp, và đó chỉ là những gì nó sẽ làm ...


15
CƯỜI NGẢ NGHIÊNG. +1 cho lựa chọn ngôn ngữ.
Sản xuất ETH

76
... một trong những ngày này lang này sẽ lặp đi lặp lại trên tất cả các bạn
Pål GD

3
+1 để tham khảo âm nhạc và chúc mừng cho một huy hiệu vàng khác!
Luis Mendo

Tài liệu tham khảo tốt nhất tôi đã thấy
Christopher

138

Mã máy C64 , 2 byte

D0 FE

Chi nhánh đến chính nó nếu cờ không được đặt.

Các nhánh là các byte đơn từ vị trí lệnh tiếp theo và 254 là -2 trong hai phần bù ... lệnh BNE (D0) lấy một byte bộ nhớ và phần bù lấy một byte thứ hai, do đó phân nhánh hai byte trở lại với chính nó Cờ zero luôn bị xóa khi mã được tải vào bộ nhớ.

Lưu ý rằng đây không phải là một cuộc gọi chương trình con đệ quy, vì vậy bạn sẽ không bao giờ hết bộ nhớ. Cũng lưu ý rằng không có tiêu đề, trình biên dịch hoặc chi phí thực thi ... nó thực sự là một chương trình hai byte :)


13
Không nên làm việc này trên bất kỳ máy nào có bộ xử lý gia đình 6502/6510, không chỉ C64? Ngoài ra, những gì bạn đã viết là mã máy. Việc lắp ráp sẽ làBNE -2
Level River St

55
+1 để tạo một chương trình thực tế nhỏ, thay vì cố gắng tìm ngôn ngữ tối nghĩa nhất xảy ra để có ít ký tự nhất biểu thị cấu trúc.
K từ

1
@ user45891 EB FE là x86. 6502/6510 không có hướng dẫn nhảy ngắn vô điều kiện.
Random832

2
Steveverrill, touché, đó là mã máy, thực sự. Và vâng, tôi nghĩ rằng nhiều người sẽ nhận ra Commodore 64 hơn so với gia đình 65xx nói chung :) VIC-20 đã sử dụng 6502 và sẽ có thể chạy nó. Vì vậy, về mặt kỹ thuật, ổ đĩa mềm 1541 của tôi sẽ ... Tôi mơ hồ nhớ lại việc có thể lập trình lại bộ điều khiển trên đó. À, tôi vẫn nhớ C64 của tôi :)
James King

7
Trước đây, một "mánh khóe" đặc biệt khó chịu (imho vandalism) mà khách hàng sẽ chơi trên các chủ cửa hàng máy tính không nghi ngờ là đặt hai byte gần giống với cái này nhưng đối với X86, khi bắt đầu bộ tải khởi động, sử dụng DOS ' debug. Điều này sẽ làm hỏng máy một cách hiệu quả và hầu hết nhân viên cửa hàng đều thiếu nous để biết nó không chỉ là một ổ đĩa chết.
Dewi Morgan

105

Brainfuck, 3 byte

+[]

Không bao giờ giảm: không bao giờ kết thúc.


62
Thật buồn cười khi BF đánh bại hầu hết các câu trả lời khác.
Rohcana

Tôi đã phải nghĩ về điều này khi tôi thấy câu hỏi trên trang bắt đầu của SE.
s3lph

1
Suy nghĩ đầu tiên của tôi là BF! : D Nó kết thúc ngắn hơn tôi nghĩ.
André Christoffer Andersen

1
Thay thế, vẫn là các byte:-[]
Unihedron

1
Tôi cá là có một thông dịch viên ở đâu đó ]sẽ làm việc
12Me21

102

/// , 3 byte

///

Bất kỳ điểm thưởng cho việc sử dụng tên của ngôn ngữ làm mã nguồn?


71
Tôi thực sự ngạc nhiên khi liên kết thực sự hoạt động, xem nó kết thúc như thế nào ///;)
ETHproductions

@ETHproductions Điều đó khá đáng ngạc nhiên, nhưng nếu người ta nghĩ về nó nhiều hơn một chút, nó có ý nghĩa gì đó; đó chỉ là URLesolangs.org wiki _ _ _ _
HyperNeutrino

12
@AlexL. Không hoàn toàn. Máy chủ web thấy yêu cầu NHẬN /wiki////. Trong khi đó dự định là một đường dẫn, máy chủ có thể làm với thông tin đó bất cứ điều gì nó muốn.
Dennis

73

Java , 53 byte

class A{public static void main(String[]a){for(;;);}}

Yay yêu cầu chương trình đầy đủ!


78
Thiên Chúa thật dài dòng ...
mınxomaτ

4
@minxomat Yep, 45 byte cho một khoảng trống main:(
Geobits 2/10/2015

3
@minxomat phải yêu OOP
Luke

55
Đó không phải là OO. Đặt mã vào một lớp không làm cho nó trở nên OO hơn là đặt một hòn đá vào lò vi sóng làm cho nó trở thành thức ăn.
imallett


56

Prolog, 5 byte

a:-a.

Để biết vị ngữ acó đúng không, bạn chỉ cần kiểm tra xem vị ngữ acó đúng không.

Bạn cần tải tập tin và thực thi a , cả hai đều có đối số dòng lệnh. Lưu ý rằng đệ quy có khả năng được tối ưu hóa như một vòng lặp vô hạn và không nên thổi chồng.

Ngoài ra, điều này trông giống như một nụ cười, nhưng tôi không biết làm thế nào để gọi nó. Dấu chấm trông giống như nước bọt, vì vậy có thể là "trạng thái thực vật" hoặc "Lập trình viên vô tận với mái tóc xoăn". Đề nghị được chào đón.


3
Kiểm tra xem acó đúng không bằng cách kiểm tra xem acó đúng không bằng cách kiểm tra xem acó đúng không bằng cách kiểm tra ... đệ quy yay!
kirbyfan64sos

50

Haskell , 9 byte

Đệ quy vô hạn của hàm chính. Nên được biên dịch thành một vòng lặp do tối ưu hóa đệ quy đuôi.

main=main

1
Nó biên dịch, nhưng nếu chạy hệ thống thời gian chạy sẽ phát hiện vòng lặp và ném <<loop>>ngoại lệ - ít nhất là với ghc. Có thể một số trình biên dịch khác hành xử khác nhau.
nimi

4
Làm runhaskell Loop.hsvui vẻ thực hiện nó trong vài phút trên máy của tôi. Vì vậy, ít nhất nó có thể chạy được bởi một thông dịch viên. Tôi nghĩ rằng <<loop>>ngoại lệ thời gian chạy ghcném hoàn toàn là một chi tiết triển khai của thời gian chạy chứ không phải là một phần của ngôn ngữ Haskell như được chỉ định trong bất kỳ Báo cáo Haskell nào.
GrantS

Đó là một trường hợp cạnh. runhaskellvui vẻ chấp nhận mã nhưng nó không lặp. Nó không làm gì cả. Tuy nhiên, challange chỉ yêu cầu tạo vòng lặp, không thực hiện nó, vì vậy tôi đoán nó ổn. Có +1.
nimi

@GrantS: ngôn ngữ Haskell không có khái niệm nào như một vòng lặp của Google; các định nghĩa như main = mainlà về mặt ngữ nghĩa trong cùng một nhóm với undefinedhoặc error "<<loop>>": các giá trị dưới cùng.
đã ngừng quay ngược chiều

1
Tôi nghĩ rằng vòng lặp haskell hoạt động ngắn nhất sẽ là:main=main>>main
lovasoa

43

Python, 9 byte

Hoạt động trong cả 2 và 3.

while 1:0

Được rút ngắn bởi @FryAmTheEggman


lưu ý, điều này không tạo ra đầu ra khi được chạy trong trình thông dịch Python
Chris_Rands

2
@Chris_Rands Chỉ trong REPL.
HyperNeutrino

40

Thực thi ELF x86, 45 byte

Không giống như phần lớn các câu trả lời này, đây là một chương trình thực sự hoàn chỉnh, như trong một chương trình thực thi độc lập.

00000000: 7f45 4c46 0100 0000 0000 0000 0000 0100  .ELF............
00000010: 0200 0300 2000 0100 2000 0100 0400 0000  .... ... .......
00000020: ebfe 31c0 40cd 8000 3400 2000 01         ..1.@...4. ..

Sự can đảm của chương trình nằm ở byte 0x20 ebfe, được nêu trong một câu trả lời khác là chương trình NASM nhỏ nhất. Tuy nhiên, nếu bạn lắp ráp nó với NASM, bạn sẽ có được một tệp thực thi với hàng ngàn byte không cần thiết. Chúng ta có thể loại bỏ hầu hết chúng bằng cách sử dụng kỹ thuật được nêu ở đây . Bạn có thể lưu ý rằng chương trình này thậm chí không lớn bằng tiêu đề ELF! Một chút của việc chơi golf thực thi không đúng tiêu đề ELF và tiêu đề chương trình để chúng có thể chiếm cùng một byte trong tệp và chèn chương trình của chúng tôi vào một số byte không sử dụng trong tiêu đề. Linux vẫn sẽ vui vẻ đọc tiêu đề và bắt đầu thực hiện ở phần bù 0x20mà nó sẽ quay mãi mãi.


9
.comtrên DOS sẽ ngắn hơn nhiều :)
JimmyB

1
Bạn chỉ nhận được "hàng ngàn" byte nếu bạn để gcc bao gồm các tệp khởi động. yasm && ldlàm cho thực thi chỉ khoảng 1k.
Peter Cordes

37

INTERCAL, 42 18 byte

(1)DO COME FROM(1)

Ý tưởng lấy từ bình luận của @ flawr.

EDIT: Holy crap, INTERCAL thực sự ngắn hơn C #. Tôi không biết nếu điều đó từng xảy ra trước đây ...

Phiên bản 42 byte

DO(1)NEXT
(1)DO FORGET #1
PLEASE DO(1)NEXT

12
Sao bạn dám làm một chương trình xen kẽ mà không cócomefrom
flawr

1
@flawr Đã sửa. ;)
kirbyfan64sos

4
Np, tôi nghĩ rằng chúng ta cần nhiều Intercal hơn trong các cuộc thi golf ở đây =)
flawr

16
Bạn đã nói PLEASEchưa
Daniel M.

34

Perl , 6 byte

perl -e '{redo}'

Từ perldoc -f redo:

Lệnh làm lại khởi động lại khối vòng lặp mà không đánh giá lại điều kiện một lần nữa ... Lưu ý rằng một khối tự nó giống hệt nhau về mặt ngữ nghĩa với một vòng lặp thực thi một lần. Do đó, làm lại bên trong một khối như vậy sẽ có hiệu quả biến nó thành một cấu trúc lặp.

Tôi không thấy redoquá thường xuyên trong mã sản xuất, nhưng nó rất tuyệt cho golf! Hãy so sánh ở trên để các khoản tương đương ngắn nhất với for, whilegoto:

for(;;){} # 9 bytes
1while 1  # 8 bytes
X:goto X  # 8 bytes

1
codegolf.stackexchange.com/a/59553/30206 đề xuất 4 byte do$0, không hoạt động như một perl -elớp lót.
Peter Cordes

@PeterCordes Neat, mặc dù tôi nghĩ rằng phá vỡ quy tắc "phải không có đầu vào". do EXPRđọc từ một tập tin.
ThisSuitIsBlackNot


32

> <> , 1 byte

 

Một không gian duy nhất sẽ khiến> <> đi vào một vòng lặp vô hạn của NOP

Các chương trình ký tự đơn hợp lệ khác (không có yêu cầu bộ nhớ) như sau:

>^v</\|_#x!"'{}r

Ngoài ra, các quy tắc nói rằng chương trình của bạn có thể hết bộ nhớ trong trường hợp đó chúng ta có thể thêm các ký tự sau vào danh sách các chương trình 1 byte hợp lệ:

01234567890abcdefli

11
Hãy thử ` `cho khối mã.
TheNumberOne

2
Tại sao không chỉ sử dụng >?
mbomb007

4
Nếu đây là Chem.SE, tôi cũng khuyên bạn nên đặt mã trong MathJax.
hBy2Py

Chúng tôi có chắc chắn một chương trình trống sẽ không phải là một vòng lặp vô hạn?
Aaron

1
Gặp lỗi thời gian chạy khi cố thực thi chương trình trống: TracBack (cuộc gọi gần đây nhất): Tệp "fish.py", dòng 493, trong <module> Bolog = phiên dịch.move () Tệp "fish.py", dòng 149, trong di chuyển nếu self._poseition [1]> max (self._codebox.keys ()): ValueError: max () arg là một chuỗi trống
Fongoid

31

Mã máy Motorola MC14500B , 0,5 0 byte



Giải trình

Theo hướng dẫn, hệ thống được cấu hình để có cấu trúc điều khiển vòng lặp. Bộ đếm chương trình đếm đến giá trị cao nhất của nó, kết thúc trở về 0 và đếm lại.


3
Tôi tin rằng bạn đã tìm thấy ngôn ngữ chơi golf đỉnh cao, ít nhất là cho các nhiệm vụ nhỏ ... thậm chí Pyth không thể rút ngắn được điều này. +1
Sản phẩm ETH

Được cảnh báo rằng điều này hiển thị là 5 byte trên bảng điểm.
Addison Crump

C là Nhảy, nhưng nhảy ở đâu?
Kishan Kumar

3
Wow, bạn thực sự thích ngôn ngữ này, phải không? : P
MD XF

Điều này sẽ hoạt động trong bất kỳ ngôn ngữ máy nào trong đó 0 là NOP, con trỏ lệnh bao quanh và bộ nhớ chương trình không chứa bất kỳ dữ liệu bổ sung nào.
12Me21

30

LOLCODE , 24 byte

IM IN YR X
IM OUTTA YR X

3
Trong nhiều trình thông dịch LOLCODE, chẳng hạn như phiên dịch trên repl.it, HAIKTHXBYEkhông cần thiết.
Alex A.

1
@AlexA. oh, không biết điều đó Cảm ơn.
daniero

29

C, 15 byte

main(){main();}

Vâng, có thể gọi main()đệ quy. Nếu bạn đã có một trình biên dịch thực hiện tối ưu hóa cuộc gọi đuôi (giả sử gcc với -O2tùy chọn), thì nó thậm chí không phải là segfault: trình biên dịch đủ thông minh để biến lệnh gọi hàm thành a goto.


4
Trừ khi bạn có thể cho tôi một trình biên dịch thực hiện điều này theo mặc định, bạn sẽ phải thêm 3 byte cho -O2tùy chọn.
LegionMammal978

19
@ LegionMammal978, theo các quy tắc trong thử thách, hết bộ nhớ là chấp nhận được. Điều đó làm cho việc -O2tối ưu hóa trở thành "tốt đẹp phải có" chứ không phải là một yêu cầu.
Đánh dấu

1
Nếu các tùy chọn cho trình biên dịch được cho phép (và không được tính cho số lượng giải pháp), vậy tại sao không thay đổi mã thành l(){l();}và biên dịch nó với các tùy chọn-Dl=main -O2
wendelbsilva

1
Để so sánh, việc thực hiện vòng lặp thích hợp không đệ quy ngắn nhất là 16B : main(){for(;;);}.
Peter Cordes

3
@wendelbsilva bạn có thể đóng đinh nó nhiều hơn bằng cách thay đổi mã thành X (chỉ một byte) và biên dịch với -DX = main () {main ();}
LeFauve

26

Mê cung , 1 byte

"

Một chương trình labrinth thực hiện cùng một hướng dẫn lặp đi lặp lại nếu không có hàng xóm. Họ cũng sẽ không kết thúc cho đến khi họ thực hiện @hướng dẫn.


25

Vim , 7 tổ hợp phím

Mở trình soạn thảo, tốt nhất là không có bất kỳ tập lệnh được tải nào, ví dụ như thế này từ dòng lệnh: vim -u NONE

qq@qq@q

Phiên bản, 15 8 byte

Thêm nó vào một tập lệnh hoặc chạy nó trực tiếp bằng cách bấm phím dấu hai chấm ( :) trước khi bạn ở chế độ bình thường

wh1|endw

1
Bản tin của bạn hơi dàiwh1|endw
FDinoff

Bạn có thể giải thích làm thế nào điều này hoạt động với một người không quen thuộc với Vim?
iFreilicht

8
@iFreilicht qqbắt đầu ghi vào qbộ đệm. @qphát lại những gì trong qbộ đệm (tại thời điểm này, không có gì). qdừng ghi và sau đó @qphát lại những gì trong qbộ đệm, tại thời điểm này là tổ hợp phím @q. Vì vậy, @qreplay @qreplay @q.... cũng vậy, viết nhiều thứ này qkhiến não tôi bị tổn thương.
Wayne Werner

25

Võng mạc , 3 byte

+`0

Nếu được cung cấp một tệp duy nhất, Retina sử dụng giai đoạn Đếm, thay thế đầu vào bằng số lượng kết quả tìm thấy cho biểu thức chính quy định. Ở đây, regex là 0. Bây giờ +lặp lại giai đoạn miễn là kết quả thay đổi từ lần lặp trước. Vậy chính xác thì chuyện gì đang xảy ra?

  • 0được khớp với đầu vào trống, cho kết quả khớp 0, vì vậy kết quả là 0. Điều này khác với đầu vào, vì vậy chúng tôi chạy lại cái này.
  • 0được khớp với đầu ra trước đó 0, hiện cung cấp một kết quả phù hợp ... vì vậy kết quả là 1.
  • 0được khớp với đầu ra trước đó 1, nhưng không thành công ... vì vậy kết quả là 0.
  • ... Bạn có ý tưởng.

Kết quả của vòng lặp xen kẽ giữa 01, a) đảm bảo rằng vòng lặp không bao giờ kết thúc và b) đảm bảo rằng chúng ta không hết bộ nhớ vì chuỗi không phát triển.

Theo mặc định, Retina chỉ xuất ra sau khi chương trình kết thúc, do đó, điều này không in bất cứ điều gì (bạn có thể thay đổi hành vi này bằng cách thêm một >sau +, sau đó sẽ in các số 0 và số xen kẽ ).

Kể từ 1.0, Retina thực sự cũng có các vòng lặp truyền thống hơn, mà bạn có thể sử dụng với một giai đoạn đơn giản hơn (không thay đổi chuỗi mọi lúc), nhưng chúng thực sự đòi hỏi nhiều byte hơn. Một lựa chọn sẽ là:

//+`


1
@ kirbyfan64sos Chúng trông rất giống nhau, nhưng chúng thực sự hoạt động khá khác nhau. :)
Martin Ender

Công việc tốt. Tôi sẽ thử thực hiện chương trình Retina ngắn nhất trong chế độ Thay thế. Tôi tò mò, có thể +`kết hợp đầu vào trống nhiều lần?
mbomb007

@ mbomb007 Tôi nghĩ rằng sẽ chấm dứt 2sau một vài lần lặp.
Martin Ender

24

CƠ BẢN (QBasic 4.5), 10 5 3 byte

Trong ngôn ngữ lập trình BASIC, RUN được sử dụng để bắt đầu thực hiện chương trình từ chế độ trực tiếp hoặc để bắt đầu chương trình lớp phủ từ chương trình nạp. - Wikipedia

Chỉnh sửa: Điều này hoạt động mà không có số dòng trong QBasic 4.5, theo @steenbergh

RUN

Đây là phiên bản đầu tiên tôi đăng. Vòng lặp GOTO vô hạn. Ngoài ra, đó là 10 byte, đó là một sự trùng hợp tuyệt vời!

10 GOTO 10

13
Tại sao dòng số 10? Tại sao không phải là 9?
đệ quy

25
hoặc 8 cho 8 byte? :)
MickyT

3
Nó sẽ không chiến thắng và nó vui hơn theo cách này.
CJ Dennis

3
Điều này có thể được rút ngắn thành: 1 CHẠY
TUYỆT VỜI

2
@davidjwest Điều ngắn nhất tôi có thể làm trong Sinclair BASIC là: 1 GOTO SIGNUM PI- vì ints hằng được lưu trữ trong bộ nhớ hai lần, vì quần short, nên 1 sẽ là 4 byte, nhưng cả SIGNUM và PI chỉ sử dụng mỗi một byte. À, các thủ thuật mã hóa cũ mà chúng ta thường sử dụng: D Không chắc số lượng dòng bộ nhớ chiếm bao nhiêu, nếu có, vì vậy tất cả những gì tôi có thể nói là 3+ (lưu trữ số dòng).
Dewi Morgan

23

Kiến trúc TIS Node Kiểu T21, 6 byte

A single node with NOP written in it

Các nút Hệ thống thông minh Tessellated được phân loại là các nút "xử lý" hoặc "lưu trữ". Các nút lưu trữ chỉ đơn giản là lưu trữ và truy xuất thông tin, và không liên quan trong trường hợp này. Còn lại là các nút xử lý. Loại nút T21, hoặc Nút thực thi cơ bản, là loại phổ biến và đơn giản nhất (như tên sẽ đề xuất).

Về mặt kỹ thuật, mỗi nút có thể được coi là một máy tính độc lập. Trong trường hợp của T21, nó là một máy tính có hai thanh ghi lưu trữ (một địa chỉ, một không) và một bộ lệnh gồm 15 lệnh. Nó có đủ bộ nhớ để được lập trình với tối đa 15 hướng dẫn. Tất cả các nút TIS có bốn cổng kết nối chúng với các nút liền kề tô pô. Đọc từ một cổng làm cho nút đó bị treo cho đến khi nút ở đầu bên kia ghi vào nó và ghi vào một cổng bị treo cho đến khi nút đó đọc nó.

Bây giờ bạn có thể có thể nói rằng các nút TIS không bao giờ có nghĩa là phải tự làm nhiều việc. Mặc dù vậy, cùng nhau, họ có thể khá mạnh mẽ ... tốt, cho thời gian của họ. Do những hạn chế này, rất hiếm khi thấy ai đó chỉ sử dụng một nút duy nhất. Trong thực tế, một chương trình lấy đầu vào và cung cấp đầu ra dựa trên nó phải sử dụng ít nhất ba nút, vì các hệ thống TIS cung cấp đầu vào vào UPcổng của một nút ở hàng trên cùng và lấy đầu ra từ DOWNcổng của một nút ở hàng dưới cùng. Có ba hàng, vì vậy dữ liệu phải đi qua ít nhất ba nút để xuống đáy.

Do những hạn chế này, các nút TIS thường được sử dụng phần nào như thế này:

  1. Nhận đầu vào
  2. Làm gì đó với nó
  3. Vượt qua nó
  4. Quay trở lại bước 1

Bởi vì điều này, không gian giới hạn cho các hướng dẫn và thực tế là các nút chỉ cần lặng lẽ chờ đợi và không gây rắc rối khi cố đọc đầu vào không có ở đó, một quyết định được đưa ra trong thiết kế của chúng khiến chúng rất tốt cho thử thách này. Tôi sẽ trích dẫn từ tài liệu tham khảo của TIS-100:

Sau khi thực hiện lệnh cuối cùng của chương trình, thực thi sẽ tự động tiếp tục đến lệnh đầu tiên.

Hoàn hảo! Các vòng lặp vô hạn được mặc định cho các nút TIS.

Tôi gần như đã trả lời câu hỏi này bằng câu trả lời 0 byte, cho rằng một nút trống là một vòng lặp vô hạn. Tuy nhiên, tôi đã nghiên cứu thêm. Đầu tiên, trích dẫn ở trên nói rằng vòng lặp xảy ra sau khi thực hiện lệnh cuối cùng . Ngoài ra, tôi đã thử nghiệm việc thực hiện. Mỗi nút báo cáo một "chế độ" mọi lúc. Nó không thể truy cập theo chương trình nhưng nó nhằm mục đích làm cho việc gỡ lỗi dễ dàng hơn. Dưới đây là các chế độ có thể:

 RUN‌ - I am executing an instruction.
READ - I am reading from a port, waiting for it to be written to.
WRTE - I am writing to a port, waiting for it to be read from.
IDLE - I am doing nothing.

Nó chỉ ra rằng, vì mỗi nút là một máy tính riêng lẻ, chúng có khả năng xác định liệu chúng có hướng dẫn để thực hiện hay không. Nếu không, họ vẫn ở trong IDLEtrạng thái (có khả năng tiết kiệm điện). Như vậy, tôi không thể có lương tâm tốt khi cho rằng đó là "vòng lặp"; thay vào đó, mỗi nút ngồi lặng lẽ, giả sử những người khác đang làm một việc quan trọng.

Chương trình này mà tôi đã gửi thực sự là một vòng lặp vô hạn, khi thực thi nó đặt trạng thái của nút thành RUN. Nó đơn giản như bạn mong đợi, NOPthực hiện No OPcương cứng. Khi không thực hiện được gì, thực thi sẽ trở về đầu mã : NOP.

Nếu bạn thấy không hài lòng khi tôi lạm dụng kiến ​​trúc T21 để tạo vòng lặp, tôi cung cấp một giải pháp thay thế với chi phí là 2 byte : JRO 0. JROnghĩa JUMP Runc elative Onditionally. Hoặc một cái gì đó, tôi đoán. Không có hình thức hướng dẫn mở rộng theo thỏa thuận. Dù sao, JROcó một đối số số và nhảy thực thi theo số tiền đó so với vị trí hiện tại. Ví dụ, JRO 2bỏ qua hướng dẫn theo sau nó (hữu ích nếu lệnh đó được nhảy từ nơi khác). JRO 1nhảy về phía trước một hướng dẫn, làm cho nó a NOP. nhảy vào chính nó, thực hiện chính nó mãi mãiJRO -1nhảy lại một lệnh, thực hiện hiệu quả lệnh trước đó cứ sau hai chu kỳ cho đến khi chương trình tạm dừng. Và dĩ nhiên,JRO 0

Tại thời điểm này bạn có thể nghĩ:

Chắc chắn, monorail, tất cả điều này có ý nghĩa, nhưng câu trả lời của bạn chỉ đơn giản là NOP. Tại sao điểm số của nó là 6 byte?

Câu hỏi hay, cảm ơn đã hỏi. Người ta có thể ngây thơ nghĩ rằng các chương trình TIS nên được tính giống như cách chúng ta đếm các chương trình trong nhiều tệp: số byte trong tất cả các nút, cộng thêm 1 byte cho mỗi nút bổ sung sau nút đầu tiên. Tuy nhiên, cộng đồng chơi gôn TIS quyết định điều này sẽ không công bằng vì lý do đơn giản là nó bỏ qua một số thông tin cần thiết để tạo lại các giải pháp. Hàng xóm của một nút rất quan trọng và phương pháp cho điểm đó cung cấp cho bạn thông tin vị trí miễn phí. Thay vào đó, chúng tôi đã áp dụng định dạng được sử dụng bởi trình giả lập TIS phổ biến nhất, được đặt tên khó hiểu TIS-100. (Lưu ý bên lề: Vui lòng không đặt tên trình giả lập theo hệ thống mà chúng mô phỏng. Nó không thông minh, nó chỉ gây phiền nhiễu và khiến mọi người phải liên tục làm rõ những gì họ đang nói.) Rất đơn giản: 12 nút của TIS-100 thiết bị được đánh số, từ trái sang phải và từ trên xuống dưới, bỏ qua mọi nút lưu trữ mà hệ thống mô phỏng đã cài đặt. Một nút được đánh số Nchứa # CODE\n# CODE\n CODEđược lưu như vậy:

@N
# CODE
# CODE
# CODE

Và do đó, một nút được đánh số 0 chứa NOPđược ghi theo biểu diễn của nó theo định dạng này:

@0
NOP

Sáu byte.

Vì tôi thường đưa vào câu trả lời của mình bằng các ngôn ngữ trực quan thú vị, bạn có thể xem trình giả lập TIS-100 thực hiện chương trình này trên YouTube . Mặc dù, xem xét thử thách này là gì, tôi không biết bạn mong đợi điều gì ...


Wow-ee. Điều đó thật tuyệt vời.
Adrian Zhang

Tôi luôn giả định JROlà viết tắt của J ump to R elative O ffset.
MutantOctopus

@BHustus Tôi nghĩ bạn đúng nhưng tôi đã viết nó trước khi tôi có kinh nghiệm với bất kỳ ngôn ngữ lắp ráp nào khác và tôi không biết về biệt ngữ
undergroundmonorail

Tôi ước tôi có thể +10 câu trả lời này. Tôi yêu TIS-100
Shirkam

Tôi đã viết một trình giả lập TIS của riêng tôi, vì vậy bây giờ bạn có thể dùng thử trực tuyến . Mặc dù vậy, đừng mong đợi nhiều hơn là thời gian chờ.
Phlarx 29/03/18

22

C # , 38 37 36 byte

class B{static int Main(){for(;;);}}

Đối với vòng lặp không có điều kiện dừng.

Sự trở lại của main nên là một int, nhưng vì nó sẽ không bao giờ đi đến cuối nên điều này sẽ biên dịch. (Đã thử nghiệm trong VS 2015 và 2013, cũng hoạt động ở Ideone ). Cảm ơn GeobitsMichaelS .

Một phiên bản ngắn hơn, 35 byte, có thể đạt được, nhưng các bản in Process is terminated due to StackOverflowExceptionmà tôi tin là vi phạm điểm thứ ba là không in bất cứ thứ gì lên stderr. Tín dụng cho MichaelB

class B{static int Main()=>Main();}

1
Bạn có thể lưu một bằng cách sử dụng ;thay vì {}? Tôi đã thử nghiệm, nhưng các dịch vụ trực tuyến không thích vòng lặp vô hạn nhiều.
Geobits 2/10/2015

@Geobits À, đúng rồi. Làm thế nào những điều đơn giản như vậy trôi qua.
Sven Writes Code

1
Nó có thể phụ thuộc vào trình biên dịch, nhưng tôi đã lưu một ký tự khác bằng cách khai báo nó là int main và nó chạy mà không có câu lệnh return. Tôi đang sử dụng Microsoft Visual C # 2013 Cộng đồng Phiên bản 12.0.31101.00 Cập nhật 4. "class A {static int Main () {for (;;);}}"
MichaelS

@MichaelS Cảm ơn! Làm việc năm 2015 VS cho tôi.
Sven Writes Code

1
Trong so với 15, điều này có thể ngắn hơn (hầu như không). 35class B{static int Main()=>Main();}
Michael B

21

Foo, 3 byte

(1)

Ngôn ngữ lập trình yêu thích của mọi người! :CƯỜI MỞ MIỆNG


20

Lục giác , 1 byte

.

Tôi không biết nhiều về ngôn ngữ tuyệt vời này được tạo bởi @ MartinBüttner, nhưng từ những gì tôi đã thấy, điều này sẽ lặp đi lặp lại vô tận, vì không có gì @phải dừng chương trình. .chỉ đơn giản là không có op.


3
Tại sao bạn không kiểm tra nó ,: D
Bò lang băm

7
Tôi có thể xác nhận rằng điều này là chính xác. :)
Martin Ender

@KritixiLithos Bởi vì tôi không thể tìm thấy một thông dịch viên trực tuyến và tôi không thích tải xuống trình thông dịch cho mọi ngôn ngữ mà tôi muốn kiểm tra. ;)
Sản phẩm điện tử

16


20

Perl, 4 byte

do$0

Thực hiện nhiều lần.


1
Rất tuyệt. Lúc đầu, tôi nghĩ rằng điều này đã vi phạm quy tắc "phải không có đầu vào" vì các lần do EXPRđọc từ một tệp, về mặt kỹ thuật sẽ là đầu vào, nhưng OP đã làm rõ rằng I / O của tệp có thể chấp nhận được. Điều thực sự thú vị là không giống như ở Bash, điều này không làm thay đổi bất kỳ quy trình mới nào, vì vậy nó sẽ tiếp tục vô tận mà không đạt bất kỳ giới hạn bộ nhớ hoặc quy trình nào.
ThisSuitIsBlackNot

18

Gammaplex , 0 byte

Trong Gammaplex, không thể viết chương trình không phải là vòng lặp vô hạn. Vì vậy, tôi chỉ viết một chương trình không sử dụng đầu vào / đầu ra.


Vâng, các quy tắc quy định rằng cần phải có một vòng lặp vô hạn để đủ điều kiện.
arodebaugh

@arodebaugh Có. Nói cách khác, có một vòng lặp vô hạn trong mọi chương trình Gammaplex.
jimmy23013

16

Bình thường, 2 byte

# 

Pyth hy vọng mã thông báo sau khi nhà điều hành mãi mãi. (Đó là một không gian.)


16

bash + coreutils BSD, 23 22 14 6 5 6 byte

yes>&-

yesđầu ra "y" mãi mãi; >&-đóng STDOUT.

Cảm ơn @Dennis và @ ThisSuitIsBlackNot vì đã giúp giảm kích thước!


4
Với bash bạn chỉ có thể thực hiện $0trong shellscript và chạy nó, nó sẽ tự gọi mãi mãi.
TessellatingHeckler

1
Sáng tạo, nhưng nhàm chán cũ while :;do :;donechỉ có 17 byte.
ThisSuitIsBlackNot

3
ping>&- 0hoạt động trên Linux, nơi 0được ánh xạ tới localhost.
Dennis

1
yes! (Tôi đã nghĩ về việc sử dụng yesnhưng tôi đã không loại bỏ đầu ra.) Bạn có thể lưu một byte bằngyes>/dev/null
ThisSuitIsBlackNot

3
Tôi đã không nhận thức được điều đó. Nếu nó hoạt động với BSD, vâng, nhưng tôi không nghĩ việc ghi vào một tệp tuân thủ việc không tạo ra kết quả .
Dennis

15

Lisp thông thường, 6 ký tự

(loop)

44
Có cái gì như Rare Lisp không?
flawr

10
@flawr Tôi sẽ cho rằng đó chỉ là một bình luận hài hước, nhưng Common Lisp là kết quả của một quá trình tiêu chuẩn hóa, thống nhất một loạt các ngôn ngữ hầu hết nhưng không tương thích trong gia đình Lisp. Các ngôn ngữ trong gia đình Lisp không phổ biến Lisp bao gồm Scheme, Vợt, Emacs Lisp và Clojure.
Joshua Taylor

Ngoài ra (lâu hơn một chút, nhưng nếu chúng ta không phải đếm parens, thì đó chỉ là hai byte) : (do()(())).
Joshua Taylor

@JoshuaTaylor Tôi cũng nghĩ về điều dođó và về việc khiến người đọc đi vào vòng lặp vô hạn nhưng tôi không thấy cách thực hiện trong thời gian ngắn. Dường như không có gì đập (loop).
coredump

@JoshuaTaylor nếu bạn không tính parens lisp sẽ là ngôn ngữ golf nhất trong tất cả
Cyoce

13

Phân hạch , 1 byte

Có chính xác 4 giải pháp một byte:

R
L
U
D

Bốn chữ cái này chỉ ra rằng một nguyên tử bắt đầu từ đó (theo hướng tương ứng). Một trong số đó là bắt buộc vì không có nguyên tử, chương trình sẽ chấm dứt ngay lập tức. Vì mã nguồn chỉ có một ký tự, nên nguyên tử sẽ quấn quanh ngay lập tức và thực hiện lại cùng một ô. Tuy nhiên, sau khi bắt đầu chương trình, UDLRchỉ cần hành động để làm chệch hướng một nguyên tử đến theo hướng tương ứng, vì vậy chúng trở thành không hoạt động trong trường hợp này.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.