최단 자동 파괴 루프 프로그램을 발생하지

당신의 작업은 어떤 입력을지지 않습니다 및 루프 (모든 종류의 실행되는 전체 프로그램이나 기능을 작성하는 것입니다 while, for, foreach, do, do-while, do-loop, goto프로그램이 실행 자체를 중지해야 함을 의미합니다 오류를 일으키는 원인이 종료됩니다, 재귀 등) 출구.

규칙 :

  1. 오류는 런타임 오류, 처리되지 않은 예외 또는 프로그램 자체를 종료시키는 모든 항목이어야합니다.
  2. 오류는 exit;특정 시점에서 명시 적으로 (또는 이에 상응하는) 호출하지 않고 프로그램을 중지하고 종료해야합니다 .
  3. 같은 메시지 Warning:, Notice:자체 종료 프로그램을 발생하지 않는 등, 유효하지 않습니다. 예를 들어, PHP 0으로 나누면 Warning메시지가 생성 되지만 프로그램이 중지되지 않고 계속 실행됩니다. 이는 올바른 답변이 아닙니다.
  4. 루프는 하나 이상의 전체주기를 실행해야합니다. 즉, 두 번째 사이클에서 시작하여 오류가 발생할 수 있습니다. 이는 잘못된 코드 구문을 사용하여 오류가 발생하지 않도록하기위한 것입니다. 코드는 구문 상 정확해야합니다.
  5. 루프가 for(;;);위에 언급 된 규칙을 준수하는 경우 무한대 (예 🙂 일 수 있지만 런타임 오류로 인해 자체 종료하는 데 2 ​​분 이상 걸리지 않아야합니다.
  6. Tail Call Optimization이없는 재귀는 유효하지 않습니다 ( 1 , 2 ).
  7. 이것은 이므로 가장 짧은 코드가 승리합니다.
  8. 표준 허점 은 금지되어 있습니다.

C # 예제 ( 온라인 테스트 ) :

using System;
public class Program {
    public static void Main() {
        int i;
        int[] n;
        n = new int[5];
        for(i=0; i<7; i++) {
            n[i] = i;
            Console.WriteLine(n[i]);
        }
    }
}


Output:

0
1
2
3
4
Run-time exception (line 9): Index was outside the bounds of the array.

Stack Trace:

[System.IndexOutOfRangeException: Index was outside the bounds of the array.]
  at Program.Main(): line 9

리더 보드 :

var QUESTION_ID=104323,OVERRIDE_USER=59718;function answersUrl(e){return"https://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(e,s){return"https://api.stackexchange.com/2.2/answers/"+s.join(";")+"/comments?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){answers.push.apply(answers,e.items),answers_hash=[],answer_ids=[],e.items.forEach(function(e){e.comments=[];var s=+e.share_link.match(/\d+/);answer_ids.push(s),answers_hash[s]=e}),e.has_more||(more_answers=!1),comment_page=1,getComments()}})}function getComments(){jQuery.ajax({url:commentUrl(comment_page++,answer_ids),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){e.items.forEach(function(e){e.owner.user_id===OVERRIDE_USER&&answers_hash[e.post_id].comments.push(e)}),e.has_more?getComments():more_answers?getAnswers():process()}})}function getAuthorName(e){return e.owner.display_name}function process(){var e=[];answers.forEach(function(s){var r=s.body;s.comments.forEach(function(e){OVERRIDE_REG.test(e.body)&&(r="<h1>"+e.body.replace(OVERRIDE_REG,"")+"</h1>")});var a=r.match(SCORE_REG);a&&e.push({user:getAuthorName(s),size:+a[2],language:a[1],link:s.share_link})}),e.sort(function(e,s){var r=e.size,a=s.size;return r-a});var s={},r=1,a=null,n=1;e.forEach(function(e){e.size!=a&&(n=r),a=e.size,++r;var t=jQuery("#answer-template").html();t=t.replace("{{PLACE}}",n+".").replace("{{NAME}}",e.user).replace("{{LANGUAGE}}",e.language).replace("{{SIZE}}",e.size).replace("{{LINK}}",e.link),t=jQuery(t),jQuery("#answers").append(t);var o=e.language;/<a/.test(o)&&(o=jQuery(o).text()),s[o]=s[o]||{lang:e.language,user:e.user,size:e.size,link:e.link}});var t=[];for(var o in s)s.hasOwnProperty(o)&&t.push(s[o]);t.sort(function(e,s){return e.lang>s.lang?1:e.lang<s.lang?-1:0});for(var c=0;c<t.length;++c){var i=jQuery("#language-template").html(),o=t[c];i=i.replace("{{LANGUAGE}}",o.lang).replace("{{NAME}}",o.user).replace("{{SIZE}}",o.size).replace("{{LINK}}",o.link),i=jQuery(i),jQuery("#languages").append(i)}}var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk",answers=[],answers_hash,answer_ids,answer_page=1,more_answers=!0,comment_page;getAnswers();var SCORE_REG=/<h\d>\s*([^\n,]*[^\s,]),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/,OVERRIDE_REG=/^Override\s*header:\s*/i;
body{text-align:left!important;font-family:Arial,Helvetica; font-size:12px}#answer-list,#language-list{padding:10px;width:290px;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="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><div id="language-list"> <h2>Winners 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><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>

리더 보드 스 니펫을 위한 Martin Ender 에게 감사합니다



답변

MATL , 5 1 바이트

@MartinEnder의 CJam 답변 에서 가져온 아이디어

`

온라인으로 사용해보십시오!

`    % Do...while loop
     % Implicit end. The loop continues if the top of the stack is true.
     % After the first iteration, since the stack is empty, the program
     % implicitly tries to take some non-existing input, and finishes
     % with an error

구 버전

2:t"x

온라인으로 사용해보십시오!

2:   % Push [1 2]
t    % Duplicate
"    % For each (i.e. do the following twice)
  x  %   Delete top of the stack. Works the first time. The second it tries to
     %   implicitly take some non-existing input, and finishes with an error


답변

파이썬, 16 바이트

비 관심 0 부문 접근 :

for x in 1,0:x/x

첫 번째 반복은을 계산 1 / 1하여 정상적으로 작동합니다. 두 번째 반복은 계산을 시도하여 0 / 0결과 ZeroDivisionError가 발생합니다.

17 바이트 (개인 선호)

i=1
while i:del i

처음에는 i=1진실하기 때문에 루프가 시작됩니다.

루프가 처음 실행될 때 변수 i가 삭제됩니다.

이는 두 번째 i로 더 이상 변수가 아니므로 평가가 실패 함을 의미합니다.NameError: name 'i' is not defined.


파이썬은 꼬리 재귀를 최적화하지 않기 때문에 또 다른 15 바이트 솔루션은 def _():_()(newline) _()입니다. 그러나 이것은 규칙 # 6을 위반합니다.


답변

젤리 , 3 2 바이트

Ṿß

메모리가 부족하여 자체를 종료합니다. ~ 100 초 후에 로컬에서 수행합니다.

온라인으로 사용해보십시오! ( 디버그 드로어의 사망 인증서 )

작동 원리

Ṿß  Main link. Argument: x. Implicit first argument: 0

Ṿ   Uneval; yield a string representation of x.
 ß  Recursively call the main link.
    Jelly uses TCO, so the first cycle finishes successfully before entering
    the next one.

처음 몇 번의 반복은 다음과 같습니다.

'0'
'”0'
'””,”0'
'””,””,”,,””,”0'
'””,””,”,,””,””,”,,””,”,,”,,””,””,”,,””,”0'
'””,””,”,,””,””,”,,””,”,,”,,””,””,”,,””,””,”,,””,”,,”,,””,””,”,,””,”,,”,,””,”,,”,,””,””,”,,””,””,”,,””,”,,”,,””,””,”,,””,”0'

그 후, 그것은 추악하고 진짜 빠릅니다.


답변

V , 2 바이트

òl

온라인으로 사용해보십시오!

내가 항상 그렇게했기 때문에 이것은 V에 대한 완벽한 도전입니다! 실제로 V에는 조건이 없으며 오류가 발생하는 기능 만 있습니다. 이 경우 ò“영원히 반복”이라는 l의미와 “오른쪽으로 이동”이라는 의미입니다.

빈 버퍼 (입력 없음)에서는 첫 번째 패스에서 중단되고 출력이 생성되지 않습니다. 입력 이있는 경우 입력의 마지막 문자를 이동 한 후 입력이 중단되고 모든 입력이 출력됩니다 (고양이 프로그램이기도 함)


답변

자바 스크립트 (ES6), 13 바이트

f=_=>f(_?a:1)

이 기능은 재귀 함수로 한 번 실행 된 다음 던지고 ReferenceError: a is not defined종료됩니다.

다음은 15 바이트 비 ES6 버전입니다.

for(i=0;;)i=i.a

이것은 한 번 잘 실행 된 다음 던지고 TypeError: i is undefined종료됩니다.


답변

배쉬 4.2, 22 바이트

exec $0 $@ $[2**$#%-1]

Bash 4.3이 있기 때문에 TIO에서 작동하지 않으며 내가 의존하는 버그가 마침내 수정되었습니다.

확인

$ xxd -c 22 -g 22 self-destruct
0000000: 6578656320243020244020245b322a2a2423252d315d  exec $0 $@ $[2**$#%-1]
$ ./self-destruct
Floating point exception

프로그램이 2 63 mod -1 을 계산하려고 시도 하면 알려진 버그로 인해 Bash 4.2 및 이전 버전에서 충돌이 발생하면 충돌이 발생합니다 .


답변

PHP, 22 21 20 18 바이트

이것은 PHP에 의존하여 변수에 함수 이름을 부여하고 실행하려고합니다.

이것은 단순히 pi함수 이름을 두 번 연결합니다 . 이것은로 PHP를 죽 Fatal Error: Uncaught Error: Call to undefined function pipi() in [...][...]입니다.

while($x.=pi)$x();

이것은 나의 옛 대답과 비슷하게 작동합니다.


이전 답변, 20 바이트

PHP에서는 증가 연산자를 사용하여 문자를 증가시킬 수 있습니다. a-z범위 에서만 작동 하지만 충분합니다.

for($x=pi;;)$x=$x();

나는 이것이 모든 필수 포인트를 충족시키고 루프가 한 번 실행된다고 생각합니다.

오류가 발생하기 때문에 알 수 있습니다 Fatal error: Function name must be a string.


이것이 어떻게 작동하는지 단계별로 :

  • 할당 pi$x.
    이후 pi일정으로 사용되고있는 경우, PHP 확인한다.
    PHP는 Use of undefined constant pi - assumed 'pi'존재하지 않기 때문에 (기본적으로 상수가 존재하지 않기 때문에 문자열이라고 가정합니다) 경고 메시지를 표시합니다
  • 처음으로 루프
    • 기능을 실행하십시오 $x().
      때문에 $x값을 가지고 pi,이 기능을 실행합니다 pi().
  • 에 값을 저장하십시오 $x.
    $x이제 대신에 π를 갖습니다.pi
  • 두 번째 루프
    • 기능을 실행하십시오 $x().
      이후 $xπ 있으며,이 기능을 실행합니다 3.14159...().
    • π는 문자열이 아니므로이 시점에서을 사용하여 프로그램을 종료하십시오 Fatal Error.

함수 를 찾아서 1 바이트를 절약 한 @Titus 에게 감사드립니다 !pi()