最短的无限循环不产生任何输出


121

您的任务是创建最短的无限循环!

挑战的重点是创建一个不产生任何输出的无限循环,这与其可能的重复不同。这样做的原因是因为如果没有给出输出,代码可能会更短。

规则

  • 每个提交都必须是完整程序。
  • 您必须创建最短的无限循环。
  • 即使您的程序最终内存不足,只要它从开始到内存耗尽一直在运行,它仍然会被接受。同样,当内存不足时,它仍不应将任何内容打印到STDERR。
  • 该程序必须不接受任何输入(但是,允许从文件读取),并且不应将任何内容打印到STDOUT。也禁止输出到文件。
  • 该程序不得向STDERR写入任何内容。
  • 随意使用一种语言(或语言版本),即使它比此挑战要新。-请注意,必须有翻译,以便可以测试提交内容。允许(甚至鼓励)自己为以前未实现的语言编写此解释器。:D
  • 提交使用适当(预先存在)的编码(通常(但不一定)为UTF-8)以字节计分。某些语言(例如文件夹)在评分上有些棘手-如有疑问,请在Meta上提问。
  • 这与查找具有最短无限循环程序的语言无关。这是关于寻找每种语言中最短的无限循环程序。因此,我不会接受答案。
  • 如果您选择的语言是已经有答案的另一种(可能更受欢迎)语言的琐碎变体(请考虑使用BASIC或SQL方言,Unix shell或琐碎的Brainf ** k派生词(如Alphuck)),请考虑在现有注释上添加注释回答说,相同或非常相似的解决方案也是另一种语言中最短的解决方案。
  • 应该有一个网站,例如Wikipedia,Esolangs或GitHub。例如,如果语言是CJam,则可以链接到标头中的网站,例如#[CJam](http://sourceforge.net/p/cjam/wiki/Home/), X bytes
  • 不允许出现标准漏洞。

(我从MartinBüttner的“ Hello World”挑战赛中采纳了其中一些规则)


请随时在评论中发表评论,告诉我如何改进这一挑战。

目录

这是一个堆栈片段,可生成所用语言的字母顺序目录和整体排行榜。为了确保您的答案显示出来,请从以下Markdown标头开始:

# Language name, X bytes

显然,更换Language nameX bytes使用适当的项目。如果要链接到语言的网站,请使用上面发布的此模板:

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

现在,最后是代码段:(尝试按“整页”以获得更好的视图。)

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
我必须开始发布带有负字节数的程序,以击败所有这些空文件!
CJ丹尼斯2015年

3
这项挑战很有趣,因为它带来了很多0字节语言(其中有些不是esolangs)。FWIW,大多数声明性语言都有一个隐式无限循环,因为声明性语言的语法没有循环(它们假定它们在无限循环中运行)。梯形图也许是最古老的此类语言之一。然后,您就有了指令语言(IL),这是一种用于PLC的程序集,它也具有无限循环功能。离子液体,如装配是厂商之间的不同
slebetman

是允许程序读取和执行自己的源代码,还是文件I / O违反了“必须不输入”规则?
ThisSuitIsBlackNot 2015年

1
@ThisSuitIsBlackNot是,允许文件输入。
牛嘎嘎声

您可以打印""一个空字符串吗?
OldBunny2800 '16

Answers:


216

Befunge,0个字节



对。Befunge程序存在于具有固定大小的二维运动场中,该程序环绕边缘。在该空间中没有任何干扰的情况下,默认情况下,程序计数器会在无限循环中运行:)


10
噢,我要张贴这个。:/
Deusovi 2015年

5
@daniero它可能与此标准漏洞有关。我个人不同意标准漏洞。
贾斯汀

17
@Justin漏洞仅适用于某些类型的挑战。
丹尼斯

1
您可以使用<pre>&nbsp;</pre>一个空的代码块。
immibis 2015年

我寻找的第一件事
Dylan Madisetti 2015年


138

C64机器码,2个字节

D0 FE

如果未设置零标志,则分支到自身。

分支是从下一个指令位置开始的单字节偏移量,而254是二进制补码的-2 ... BNE指令(D0)占用一个字节的内存,而偏移量占用第二个字节,因此将两个字节向后分支本身。当代码加载到内存中时,零标志始终被清除。

请注意,这不是递归子例程调用,因此您将永远不会耗尽内存。还要注意,没有头文件,编译器或可执行文件的开销……它确实是一个两字节程序:)


13
这不应该在任何带有6502/6510系列处理器的计算机上运行,​​而不仅仅是C64?另外,您编写的是机器代码。大会将是BNE -2
Level River St

55
+1是为了制作一个很小的实际程序,而不是试图找到最晦涩难懂的语言,恰好恰巧它具有最少的字符来表示结构。
Knetic

1
@ user45891 EB FE是x86。6502/6510没有无条件的短跳转指令。
Random832

2
Steveverrill,touché,的确是机器代码。是的,我想一般人会比65xx系列更多地认识到Commodore 64 :) VIC-20使用了6502,并且能够运行它。因此,从技术上讲,我的1541软盘驱动器会......我隐约记得可以在该控制器上重新编程。啊,我仍然想念我的C64 :)
詹姆斯·金

7
过去,客户在毫无戒心的计算机商店所有者上玩的一种特别讨厌的“把戏”(imho破坏)是将两个字节与此类似,但是对于X86,在引导加载程序的开头使用DOS' debug。这将有效地使机器变砖,而且大多数商店的工作人员都不知道这不仅仅是死路一条。
Dewi Morgan

105

Brainfuck,3个字节

+[]

永不减量:永无止境。


62
当BF击败大多数其他答案时,这很有趣。
Rohcana 2015年

当我在SE的起始页上看到问题时,我不得不想到这一点。
s3lph

1
我的第一个念头是BF!:D它的结局比我想象的要短。
安德烈·克里斯托弗·安徒生

1
备选方案,但仍为相同字节:-[]
Unihedron

1
我敢打赌,某个地方]可以提供翻译服务
12

102

///,3个字节

///

使用该语言的名称作为源代码有什么加分?


71
老实说,我很惊讶该链接真正起作用,因为它的结尾是///;)
ETHproductions 2015年

@ETHproductions这是相当令人惊讶的,但是如果再多考虑一下,这是有道理的;这只是URLesolangs.org wiki _ _ _ _
HyperNeutrino '16

12
@AlexL。不是完全。Web服务器看到对的GET请求/wiki////。虽然这打算是一个路径,服务器可以与任何它想要的信息做。
丹尼斯


56

Prolog,5个字节

a:-a.

为了知道谓词a是否为真,只需检查谓词a是否为真。

您需要a使用命令行参数加载文件并执行。请注意,递归很可能会被优化为无限循环,并且不应破坏堆栈。

另外,这看起来像一个笑脸,但是我不确定如何称呼它。该点看起来像唾液,所以可能是“植物人的状态”或“头发卷曲的程序员”。欢迎提出建议。


3
检查是否a通过检查,如果是真的a通过检查,如果是真的a通过检查......耶递归是真的!
kirbyfan64sos 2015年

50

Haskell,9个字节

主要功能的无限递归。由于尾部递归优化,应编译为循环。

main=main

1
它可以编译,但是如果运行,则运行时系统会检测到循环并引发<<loop>>异常-至少使用ghc。也许其他一些编译器的行为有所不同。
nimi 2015年

4
这样runhaskell Loop.hs愉快地执行它在我的机器上几分钟。因此,它至少可以由解释器运行。我认为引发的<<loop>>运行时异常ghc纯粹是运行时的实现细节,而不是任何Haskell报告中指定的Haskell语言的一部分。
GrantS 2015年

这是一个极端的情况。runhaskell愉快地接受代码,但不会循环。它什么也没做。但是,挑战仅需要创建循环,而无需执行它,所以我想这很好。+1。
nimi 2015年

@GrantS:Haskell语言没有“循环”这样的概念;像这样main = main的定义在语义上与undefinederror "<<loop>>":底值in在同一存储桶中。
停止了逆时针转动

1
我认为最短的工作haskell循环将是:main=main>>main
lovasoa


40

x86 ELF可执行文件,45字节

与绝大多数答案不同,这是一个真正完整的程序,就像在独立的可执行程序中一样。

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. ..

该程序的胆量在字节0x20处ebfe,在另一个答案中以最小的NASM程序为特征。但是,如果将其与NASM组装在一起,则将获得具有数千个不需要字节的可执行文件。使用此处概述的技术,我们可以消除其中的大多数。您可能会注意到,该程序甚至没有ELF标头那么大!可执行高尔夫的这种形式会使ELF标头和程序标头格式错误,因此它们可以占用文件中的相同字节,并将我们的程序插入标头中一些未使用的字节中。Linux仍然会愉快地读取标头,并在0x20永久旋转的偏移量处开始执行。


9
.com在DOS上要短得多:)
JimmyB,2015年

1
如果让gcc包含启动文件,则只会得到“数千”字节。 yasm && ld使可执行文件大约只有1k。
彼得·科德斯

37

INTERCAL,42个 18字节

(1)DO COME FROM(1)

想法来自@flawr的评论。

编辑:废话,INTERCAL实际上比C#短。我不知道那是否曾经发生过...

42字节版本

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

12
您怎么敢没有一个intercal程序comefrom
瑕疵的

1
@flawr固定。;)
kirbyfan64sos 2015年

4
Np,我认为我们在这里需要更多的Intercal参加高尔夫比赛=)
更加糟糕的2015年

16
你说了PLEASE
Daniel M.

34

Perl,6个字节

perl -e '{redo}'

来自perldoc -f redo

重做命令无需重新评估条件即可重新启动循环块...请注意,块本身在语义上与执行一次的循环相同。因此,在这样的块内重做将有效地将其变成循环构造。

redo在生产代码中看不到太多,但这对高尔夫来说很棒!上述比较,以最短的当量forwhile以及goto

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

1
codegolf.stackexchange.com/a/59553/30206建议使用4字节do$0,它不能用作perl -e单行。
彼得·科德斯

@PeterCordes Neat,尽管我认为这违反了“必须不输入”的规则。do EXPR从文件读取。
ThisSuitIsBlackNotNot


32

> <>,1个字节

 

单个空格将导致> <>进入NOP的无限循环

其他有效的单字符程序(无存储要求)如下:

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

此外,规则指出您的程序可能会耗尽内存,在这种情况下,我们可以将以下字符添加到有效的1字节程序列表中:

01234567890abcdefli

11
尝试` `使用代码块。
TheNumberOne

2
为什么不只是使用>
mbomb007'2015-10-2

4
如果是Chem.SE,我也建议将代码也放入MathJax。
hBy2Py

我们确定空程序不会是无限循环吗?
亚伦2015年

1
尝试执行空程序时遇到运行时错误:追溯(最近一次调用最近):<模块>中的文件“ fish.py”,第493行,instr = interpreter.move()文件“ fish.py”,第149行,如果self._position [1]> max(self._codebox.keys())> ValueError:max()arg是一个空序列
Fongoid 2015年

31

摩托罗拉MC14500B机器代码0.5 0字节



说明

根据手册,系统配置为具有循环控制结构。程序计数器向上计数至最大值,然后回绕为零,然后再次向上计数。


3
我相信您已经找到了终极的高尔夫语言,至少对于一些小任务……甚至连Pyth都无法做到。+1
ETHproductions 2015年

请注意,这在记分板上显示为5个字节。
Addison Crump 2015年

C是跳转,但跳转到哪里?
Kishan Kumar

3
哇,你真的很喜欢这种语言,对吗?:P
MD XF

这将适用于任何机器语言,其中0是NOP,指令指针回绕,并且程序存储器不保存任何额外的数据。
17Me21年

30

LOLCODE,24字节

IM IN YR X
IM OUTTA YR X

3
在许多LOLCODE解释,如repl.it的一个,HAI并且KTHXBYE是不必要的。
Alex A.

1
@AlexA。哦,不知道。谢谢。
daniero

29

C,15个字节

main(){main();}

是的,可以main()递归调用。如果您有一个进行尾部调用优化的编译器(例如,带有-O2选项的gcc ),它甚至不会出现段错误:编译器足够聪明,可以将函数调用转换为goto


4
除非您可以给我一个默认情况下执行此操作的编译器,否则必须为该-O2选项添加3个字节。
LegionMammal978

19
@ LegionMammal978,根据挑战中的规则,内存不足是可以接受的。这使-O2优化成为“精打细算”而不是要求。
2015年

1
如果允许使用编译器选项(并且不计入解决方案数量),那么为什么不更改代码l(){l();}并将其与选项一起编译-Dl=main -O2
wendelbsilva 2015年

1
为了便于比较,最短的非递归正确环路实现16B: main(){for(;;);}
彼得·科德斯

3
@wendelbsilva,通过将代码更改为X(仅一个字节)并使用-DX = main(){main();}进行编译,您可能会遇到更多问题
LeFauve

26

迷宫,1字节

"

如果没有邻居,迷宫程序会反复执行同一条指令。在执行@指令之前,它们也不会结束。


25

Vim,7击键

打开编辑器,最好不要加载任何脚本,例如从命令行中像下面这样: vim -u NONE

qq@qq@q

Vimscript, 15 8字节

将其添加到脚本中,或:在普通模式下先按冒号()键直接运行

wh1|endw

1
你的Vimscript有点长wh1|endw
FDinoff

您能向不熟悉Vim的人解释这是如何工作的吗?
iFreilicht

8
@iFreilicht qq开始记录到q缓冲区中。@q重放q缓冲区中的内容(此时不执行任何操作)。q停止记录,然后@q重播q缓冲区中的内容,这是击键@q。因此,@q重播也可以@q重播@q....,写这么多内容q会使我的大脑受伤。
韦恩·维尔纳

25

视网膜,3个字节

+`0

如果给定单个文件,Retina将使用Count阶段,将输入替换为给定正则表达式找到的匹配数。在这里,正则表达式为0。现在+循环阶段,直到结果与前一次迭代相比有所变化。那么到底发生了什么?

  • 0与空输入匹配,给出零匹配,因此结果为0。这与输入不同,因此我们再次运行它。
  • 0与先前的输出匹配0,现在给出一个匹配...,结果为1
  • 0与先前的输出匹配,该输出1失败...因此结果为0
  • ...你明白了。

循环迭代的结果在0和之间交替进行1,其中a)确保循环永不终止,b)确保我们不会因为字符串不增长而耗尽内存。

默认情况下,Retina仅在程序终止后才输出,因此不会打印任何内容(您可以通过在>之后添加a来更改此行为+然后将打印出交替的0和1)。

从1.0开始,Retina实际上还具有更多传统的while循环,您可以在更简单的阶段使用它(不会一直更改字符串),但实际上它们需要更多的字节。一种选择是:

//+`


1
@ kirbyfan64sos它们看起来非常相似,但是它们的工作原理却大不相同。:)
Martin Ender

不错的工作。我打算尝试在“替换”模式下执行最短的Retina程序。我很好奇,可以+`重复匹配空输入吗?
mbomb007

@ mbomb007我认为2经过几次迭代后,它将终止。
马丁·恩德

24

BASIC(QBasic 4.5),10 5 3字节

在BASIC编程语言中,RUN用于从直接模式启动程序执行,或从加载程序启动覆盖程序。- 维基百科

编辑:根据@steenbergh,这在QBasic 4.5中没有行号的情况下有效

RUN

这是我发布的第一个版本。无限GOTO循环。另外,它是10个字节,这是一个很好的巧合!

10 GOTO 10

13
为什么是第10行?为什么不9?
递归

25
还是8个8字节?:)
MickyT 2015年

3
这样不会赢,它会更有趣。
CJ丹尼斯

3
可以
简称

2
@davidjwest我在Sinclair BASIC中可以做的最短的操作是:1 GOTO SIGNUM PI-由于常量int在内存中存储两次(以短裤表示),因此1将是4个字节,但是SIGNUM和PI都只使用一个字节。嗯,我们曾经使用过的旧编码技巧:D不知道要占用多少存储行号(如果有),所以我只能说是3+(行号存储)字节。
Dewi Morgan

23

TIS节点类型T21架构,6字节

写入了NOP的单个节点

细分智能系统节点分为“处理”或“存储”节点。存储节点仅存储和检索信息,在这种情况下无关紧要。剩下的就是处理节点。节点类型T21或基本执行节点是最常见和最简单的(顾名思义)。

从技术上讲,每个节点都可以看作是一台独立的计算机。对于T21,它是一台计算机,具有两个存储寄存器(一个可寻址,一个不可以)和一个由15条命令组成的指令集。它具有足够的内存,最多可以编写15条指令。所有TIS节点都有四个端口,将它们连接到拓扑相邻的节点。从端口读取会导致该节点挂起,直到另一端的节点对其进行写入为止;而对端口的写入挂起,直到该节点读取该节点为止。

您现在可能已经可以知道,TIS节点从未打算自己做很多事情。但是,在一起,他们可以变得非常强大……嗯,就他们的时间而言。由于这些限制,很少有人看到有人只使用一个节点。实际上,一个接受输入并基于其提供输出的程序必须至少使用三个节点,因为TIS系统将输入馈入UP顶部行DOWN中的节点端口,并从底部行中的节点端口获取输出。一共有三行,因此数据必须至少经过三个节点才能到达底部。

由于这些限制,通常打算以如下方式使用TIS节点:

  1. 获取输入
  2. 做点什么
  3. 传下去
  4. 返回步骤1

因此,有限的指令空间以及节点只是在安静地等待,并且在尝试读取不存在的输入时不会造成麻烦的事实,在他们的设计中做出了一个决定,这使它们非常适合这一挑战。我将引用TIS-100的参考手册:

执行完程序的最后一条指令后,执行将自动继续到第一条指令。

完善!TIS节点默认为无限循环。

我几乎用0字节的答案回答了这个问题,声称空节点是一个无限循环。但是,我进一步研究。首先,上面的引文指出执行最后一条指令后会发生循环。另外,我测试了实现。每个节点始终报告一个“模式”。它不能通过编程方式访问,但旨在使调试更容易。以下是可能的模式:

 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.

事实证明,由于每个节点都是一台单独的计算机,因此它们能够确定是否有要执行的指令。如果不是,它们将保持IDLE状态(可能是为了节省电量)。因此,我不能凭良心宣称它正在“循环”。而是假设每个节点都在做重要的事情,每个节点都安静地坐着。

我提交的程序确实是一个无限循环,因为执行该程序会将节点的状态设置为RUN。这是因为你所期望的那样简单,NOP执行NØ OP关合作。完成任何操作后,执行将返回到代码的顶部:NOP

如果您不满意我在滥用T21架构来创建循环,我会以2字节为代价提供一种替代解决方案:JRO 0JRO装置JUMP Relative UNC Onditionally。我猜是什么。没有商定的扩展说明形式。无论如何,JRO接受一个数字参数,并相对于当前位置以该数量跳变执行。例如,JRO 2跳过其后的指令(如果该指令从其他地方跳转到该指令,则很有用)。JRO 1向前跳转一条指令,使其变为NOPJRO -1跳回一条指令,每两个周期有效执行上一条指令,直到程序停止。而且当然,JRO 0 跳到自己,永远执行自己。

此时,您可能正在考虑:

当然,单轨火车,这一切都说得通,但您的答案很简单NOP。为什么分数为6个字节?

好问题,谢谢提问。可能会天真的认为应该对TIS程序进行计数的方式与对多个文件中的程序进行计数的方式相同:所有节点中的字节数,加上第一个之后的每个其他节点1个字节。但是,TIS高尔夫社区认为这很不公平,原因很简单,因为它忽略了重新创建解决方案所需的某些信息。节点的邻居非常重要,该计分方法可免费为您提供位置信息。相反,我们采用了最常见的TIS仿真器所使用的格式,即易混淆的命名为TIS-100。(附带说明:请不要在仿真器的仿真系统后命名仿真器。它并不聪明,它很烦人,并且使每个人都必须不断澄清他们在说什么。)这很简单:TIS-100的12个节点设备编号,从左到右,从上到下编号,跳过了模拟系统已安装的所有存储节点。编号为N包含的节点的# CODE\n# CODE\n CODE保存方式如下:

@N
# CODE
# CODE
# CODE

因此,编号为0的包含节点将NOP根据其格式如下表示:

@0
NOP

六个字节。

正如我经常以有趣的语言在答案中包含的那样,您可以观看TIS-100模拟器在YouTube上执行此程序。不过,考虑到这一挑战是什么,我不知道您期望看到什么...


哇 那太精彩了。
阿德里安·张

我一直以为JRO主张Ĵ UMP到[R elative Ø ffset。
MutantOctopus

@BHustus我认为您是对的,但是我在没有任何其他汇编语言的经验之前就写了这篇文章,而我不知道这种术语
Undergroundmonorail

我希望我可以将这个答案+10。我爱TIS-100
Shirkam,

我编写了自己的TIS模拟器,因此您现在可以在线尝试。不过,除了超时,不要期望太多。
Phlarx

22

C#38 37 36字节

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

对于无停止条件的循环。

main的返回应该是一个int,但是由于它将永远不会到达结尾,因此应该进行编译。(在VS 2015和2013中经过测试,也可以在Ideone中使用)。感谢GeobitsMichaelS

可以实现一个较短的版本(35字节),但是Process is terminated due to StackOverflowException我认为打印违反了不向stderr打印任何内容的第三点。感谢MichaelB

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

1
您可以使用;代替来保存一个{}吗?我会测试,但是在线服务不太喜欢无限循环。
Geobits,2015年

@地球人啊,是的。这样简单的事情如何溜走。
斯文

1
它可能取决于编译器,但是我通过将其声明为int main来保存了另一个字符,并且它没有返回语句就可以运行。我使用Microsoft Visual C#2013社区版12.0.31101.00更新4. “A级{静态INT主要(){为(;;);}}”
迈克尔

@MichaelS谢谢!为我在2015年VS工作。
斯文(Sven)

1
在vs 15中,这可能会更短(几乎)。35class B{static int Main()=>Main();}
Michael B


20

六边形,1字节

.

我对@MartinBüttner创建的出色语言了解不多,但是从我所看到的情况来看,这应该无限循环,因为没有任何@程序可以暂停。.简直是无人问津。


3
你为什么不测试呢,:D
牛嘎嘎声

7
我可以确认这是正确的。:)
马丁·恩德

@KritixiLithos因为我找不到在线口译员,所以我不想为我想测试的每种语言下载口译员。;)
ETHproductions 2015年


1
TIO显示空程序有效

20

Perl,4个字节

do$0

反复执行自身


1
很酷。起初,我认为这违反了“必须不输入”规则,因为do EXPR从文件中读取数据(从技术上来说是可以输入的),但是OP澄清了文件I / O是可以接受的。真正酷的是,与Bash中的等效项不同,它不会派生任何新进程,因此它将无限期地继续运行,而不会遇到任何内存或进程限制。
ThisSuitIsBlackNot 2015年

18

Gammaplex,0个字节

在Gammaplex中,不可能编写不是无限循环的程序。所以我只写了一个不使用输入/输出的程序。


好了,规则指出需要有一个无限循环才能合格。
arodebaugh

@arodebaugh有。换句话说,每个Gammaplex程序中都有一个无限循环。
jimmy23013 '17

16

Pyth,2个字节

# 

Pyth希望永久运算符之后的令牌。(这是一个空间。)


16

bash + BSD coreutils,23 22 14 6 5 6个字节

yes>&-

yes永远输出“ y”;>&-关闭STDOUT。

感谢@Dennis和@ThisSuitIsBlackNot对减小尺寸的帮助!


4
使用bash,您只需$0在shellscript中运行并运行它,它将永久调用自身。
TessellatingHeckler,2015年

1
有创意,但很无聊while :;do :;done的只有17个字节。
ThisSuitIsBlackNot

3
ping>&- 0在Linux上运行,该Linux 0映射到localhost。
丹尼斯

1
yes!(我考虑过使用,yes但是我没有想到放弃输出。)您可以使用yes>/dev/null
ThisSuitIsBlackNotNot 15'Oct

3
我没有意识到。如果它可以与BSD一起使用,是的,很好,但是我认为写入文件不符合不输出的要求
丹尼斯

15

普通Lisp,6个字符

(loop)

44
是否有诸如“ 稀有的Lisp”之类的东西?
瑕疵的

10
@flawr我以为这只是一个幽默的评论,但是Common Lisp是标准化过程的结果,该过程将Lisp家族中一堆大多数但不是很兼容的语言统一了起来。Lisp家族中不常见的Lisp语言包括Scheme,Racket,Emacs Lisp和Clojure。
2015年

同时,(时间长一点,但如果我们没有算括号,这将会是只有两个字节)(do()(()))
2015年

我也考虑do过@JoshuaTaylor,也想让读者进入无限循环,但不久后我将不知道如何做。似乎什么都没有打败(loop)
2015年

@JoshuaTaylor,如果您不计算口齿不清的话,那将是所有人中最喜欢的语言
Cyoce

13

裂变,1个字节

共有4种单字节解决方案:

R
L
U
D

这四个字母表示一个原子从此处开始(朝相应的方向)。其中之一是必需的,因为如果没有原子,程序将立即终止。由于源代码只有一个字符,因此原子将立即回绕,并再次执行相同的单元格。但是,在程序开始之后,UDLR只需简单地使传入的原子向相应的方向偏转即可,因此在这种情况下,它们变为无操作。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.