স্বল্পতম স্বয়ং-ধ্বংসাত্মক লুপ


61

আপনার টাস্ক একটি পূর্ণ প্রোগ্রাম বা ফাংশন যা কোন ইনপুট নেয় এবং লুপ (কোন প্রকার রান লিখতে হয় while, for, foreach, do, do-while, do-loop, goto, পুনরাবৃত্তির, ইত্যাদি) এটি একটি ত্রুটি, যার মানে যে প্রোগ্রাম চলমান নিজেই বন্ধ করে নয় ঘটাচ্ছে এর মধ্যে সমাপ্ত হবে প্রস্থান করুন।

নিয়মাবলী:

  1. ত্রুটিটি অবশ্যই রান-টাইম ত্রুটি, আনহ্যান্ডেল ব্যতিক্রম বা এমন কিছু হতে পারে যা প্রোগ্রামটি নিজেই শেষ করে দেয়।
  2. ত্রুটিটি অবশ্যই exit;কোনও পর্যায়ে স্পষ্টভাবে (বা সমতুল্য) কল না করে প্রোগ্রাম থেকে স্টপ এবং প্রস্থান করতে হবে ।
  3. মত বার্তা Warning:, Notice:ইত্যাদি যে প্রোগ্রাম সৃষ্টি করে না নিজেই শেষ করতে বৈধ নয়। উদাহরণস্বরূপ, পিএইচপি বিভাগগুলিতে শূন্য দ্বারা একটি Warningবার্তা উত্পন্ন হয় তবে প্রোগ্রামটি থামবে না এবং এখনও চলবে, এটি কোনও বৈধ উত্তর নয়।
  4. লুপটি কমপক্ষে একটি পূর্ণ চক্র চালাতে হবে। অন্য কথায় ত্রুটি দ্বিতীয় চক্র থেকে শুরু করে এবং আরও ঘটতে পারে। এটি ভুল কোড সিনট্যাক্স ব্যবহার করে ত্রুটি সৃষ্টি করতে এড়ানোর জন্য: কোডটি অবশ্যই সিনট্যাক্টিক্যালি সঠিক হতে হবে।
  5. for(;;);উপরের বর্ণিত নিয়মগুলিকে সম্মান করলে লুপটি আরও অসীম হতে পারে (উদাহরণস্বরূপ ), তবে রান-টাইম ত্রুটিতে নিজেকে শেষ করতে অবশ্যই 2 মিনিটের বেশি সময় নিতে হবে না।
  6. টেল কল অপটিমাইজেশন ব্যতীত পুনরাবৃত্তি অবৈধ ( 1 , 2 )।
  7. এটি তাই সংক্ষিপ্ততম কোডটি জয়ী।
  8. স্ট্যান্ডার্ড লুফোলগুলি নিষিদ্ধ।

সি # উদাহরণ ( অনলাইন পরীক্ষা ):

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>

লিডারবোর্ড স্নিপেটের জন্য মার্টিন ইন্ডারকে ধন্যবাদ


কেবল স্পষ্ট করে বলতে গেলে, টিসিও ব্যতীত পুনরাবৃত্তি যতক্ষণ ব্যবহার করা যায় ততক্ষণ ত্রুটিটি খুব বেশি পুনরাবৃত্তির সাথে করা উচিত নয়, তাই না? (উদাহরণস্বরূপ, একটি পুনরাবৃত্তি ফাংশন যা দ্বিতীয় পুনরাবৃত্তিতে ত্রুটি করে)
ETH প্রোডাকশনগুলি

@ এথ প্রডাকশনগুলি আড্ডায় ডেনিসের দ্বারা পরামর্শ দেওয়া হয়েছিল: "এই ক্ষেত্রে [পুনরাবৃত্তির] একটি সম্পূর্ণ চক্র সম্পন্ন হয়েছে কিনা তা সিদ্ধান্ত নেওয়া কঠিন হতে পারে। লেজ পুনরাবৃত্তি কন্ডা বিলটি ফিট করে, তবে মৃত্যুদণ্ড কার্যকর হলে কেবলমাত্র টিসিও একটি চক্র সম্পূর্ণ করবে। একটি ত্রুটির সাথে। [...] আমি বলব টিসিও ছাড়া পুনরাবৃত্তি অবৈধ ""
মারিও

ইন for(a;b;c)d;, wich বিবৃতি প্রথম চক্র শেষ পরে? cবিবৃতি প্রথম বিলোপ ভঙ্গ করা বৈধ ?
হেডি

1
@ হেইদী এখানে আমার নম্র মতামত (ওপি নয়): সমস্ত এন্ট্রিগুলিকে একটি পূর্ণ চক্র সম্পন্ন করতে হবে, যার অর্থ তাদের অবশ্যই দ্বিতীয় চক্রের মধ্যে প্রবেশ করতে হবে ; এর অর্থ হ'ল কমপক্ষে একটি বিবৃতি দ্বিতীয়বার চালানো হবে । যেহেতু আপনার উদাহরণে মৃত্যুদণ্ড অর্ডার a, b, d, c, b, d, c, ..., bচক্রের শুরু হয়, এবং অন্তত একটি দ্বিতীয় সময় চালানো হবে।
ETH প্রোডাকশনগুলি

2
আমি কোনও সমস্যা শুরু করতে চাই না তবে যেহেতু প্রোগ্রাম (সেই বিষয়ে ফাংশনটির) কোনও ইনপুট নেওয়ার কথা নয়, তাই পরামিতিগুলি সমস্ত পুনরাবৃত্ত সমাধানগুলি পরামিতি ইনপুট হওয়ায় অবৈধ।
ব্রেইনস্টোন

উত্তর:


33

এমএটিএল , 5 1 বাইট

আইডিয়াটি @ মার্টিনএেন্ডারের সিজেএম উত্তর থেকে নেওয়া হয়েছে

`

এটি অনলাইন চেষ্টা করুন!

`    % 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

3
অফলাইনেও কাজ করে। কোনও ইনপুট মানে আপনি খালি ইনপুট ধরে নিতে পারবেন না।
ডেনিস

@ ডেনিস এইচএম অফলাইন প্রোগ্রামটি ব্যবহারকারী ইনপুটটির জন্য অপেক্ষা করতে থাকবে। ইনপুট ইন্টারেক্টিভ, অর্থাত্ অফলাইন সংস্করণে প্রয়োজন হিসাবে অনুরোধ করা হয়েছে। সুতরাং প্রোগ্রামটি অনির্দিষ্টকালের জন্য অপেক্ষা করবে। নিশ্চিত না যে গণনা?
লুইস মেন্ডো

অভ্যন্তরীণভাবে এমএটিএল কীভাবে কাজ করে ঠিক তা নিশ্চিত নয়, তবে আপনি যদি কোনও পরিবেশে এটি ইনপুট অনুরোধ করতে অক্ষম (যেমন টিআইওর ব্যাকএন্ড), এটি কোনও ইনপুট পেতে সক্ষম হবে না। এছাড়াও, সিটিআরএল-ডি বা ওএস-নির্ভর সমতুল্য টিপলে খালি ইনপুট প্রেরণের অনুমতি দেওয়া উচিত।
ডেনিস

35

পাইথন, 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 _():_()(নিউলাইন) হবে _(), কারণ পাইথন লেজ পুনরাবৃত্তি অনুকূলিত করে না। তবে এটি নিয়ম # 6 লঙ্ঘন করে।


17 টি বাইট সলিউশনও যদি আপনি এটির while iসাথে প্রতিস্থাপন করেন while 1তবে এটি কাজ করে কারণ এটি iআবার মোছার চেষ্টা করে ;
ব্যবহারকারী 6245072

2
@ ব্যবহারকারী 6245072 হ্যাঁ, উভয় স্নিপেটই প্রচুর কাজের সমাধানের জন্য তুচ্ছভাবে সংশোধন করা যেতে পারে
ফ্লিপট্যাক

তুমি তোমার ব্যবহার করতে পারেন delবন্ধ শেভ একটি অন্তর্নির্মিত সঙ্গে কৌতুক আরো কয়েকটি: while 1:del id
ডিএসএম 21


18

জেলি , 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'

এর পরে, এটি আসল কুরুচিপূর্ণ, বাস্তব দ্রুত পায়।


জেলির স্মৃতি সীমা কী?
tuskiomi

জেলির স্পষ্ট মেমরি সীমা নেই, তাই পাইথন যা কিছু সম্বোধন করতে পারে। প্রতিটি পুনরাবৃত্তির সাথে মেমরির ব্যবহার দ্বিগুণ হয়, সুতরাং এটি সমস্ত উপলভ্য মেমরির পরিবর্তে দ্রুত নিঃসরণ করা উচিত।
ডেনিস

28
সুতরাং প্রতি 2 বছর পরে, আমরা আরেকটি পুনরাবৃত্তি
সম্পাদন

তাহলে প্রচুর র‌্যাম সহ ধীর মেশিনে # 5 কন্ডিশনটি ব্যর্থ হবে?
ম্যাড পদার্থবিদ 22

@ ম্যাডফিসিসিস্ট এটি সঠিক। যদিও সময় সীমাবদ্ধতার সাথে এটি অন্তর্নিহিত সমস্যা। প্রোগ্রামটি কোন মেশিনে চালিত হয় তার উপর সম্মতি অনেকটাই নির্ভর করে।
ডেনিস

13

ভি , 2 বাইট

òl

এটি অনলাইন চেষ্টা করুন!

এটি ভি এর জন্য নিখুঁত চ্যালেঞ্জ কারণ আমি ইতিমধ্যে সমস্ত সময় এটি করে চলেছি! প্রকৃতপক্ষে, ভি এর কোনও শর্তসাপেক্ষও নেই, এটির একটি ক্রিয়া রয়েছে যা একটি ত্রুটির উপর ভেঙে যায়। এই ক্ষেত্রে, òঅর্থ "চিরতরে পুনরাবৃত্তি করুন" এবং এর lঅর্থ "ডানদিকে সরান"।

খালি বাফারে (কোনও ইনপুট নেই) এটি প্রথম পাসে ভেঙ্গে যাবে এবং কোনও আউটপুট তৈরি করবে না। যদি ইনপুট থাকে তবে এটি শেষ হয়ে যাবে যখন আমরা ইনপুটটির শেষ চরিত্রটি পোস্ট করে সরিয়ে ফেলব এবং সমস্ত ইনপুট আউটপুট করুন (এটি একটি বিড়াল প্রোগ্রামও করে তোলে)


3
অপেক্ষা করুন, lমানে "ডানে সরান"? " lমুভি ইফ্ট" না?
কনর ও'ব্রায়েন

1
@ কনরও ব্রায়ান হাঁ এর আসলে কিছু ভাল historicalতিহাসিক কারণ রয়েছে
DJMcMayhem

3
চ্যালেঞ্জটির প্রথম পুনরাবৃত্তিতে নয়, দ্বিতীয় পুনরাবৃত্তিতে বা তার পরে ক্র্যাশের উত্তরগুলি প্রয়োজন।
মার্টিন ইন্ডার

11

জাভাস্ক্রিপ্ট (ES6), 13 বাইট

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

এটি একটি পুনরাবৃত্ত ফাংশন যা একবার সূক্ষ্মভাবে চলে, তারপরে নিক্ষেপ করে ReferenceError: a is not definedএবং ছেড়ে যায়।

এখানে একটি 15-বাইট নন-ইএস 6 সংস্করণ রয়েছে:

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

এটি একবারে TypeError: i is undefinedঠিকঠাক হয়ে যায় , তারপরে নিক্ষেপ করে এবং ছেড়ে যায়।


10

4.2, 22 বাইটে বাশ করুন

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

টিআইওতে কাজ করে না কারণ এটিতে 4.3 টি বাশ রয়েছে এবং আমি যে বাগটি নির্ভর করছি তার অবশেষে ঠিক হয়ে গেছে।

প্রতিপাদন

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

প্রোগ্রামটি একবার 2 63 মোড -1 গণনা করার চেষ্টা করলে এটি ক্র্যাশ হয়ে যায় , যা পরিচিত বাগের কারণে বাশ 4.2 এবং পুরানো সংস্করণগুলিতে ক্র্যাশ হয়ে যায়।


10

পিএইচপি, 22 21 20 18 বাইট

এটি পিএইচপি-র উপর নির্ভর করে যে কোনওটিকে একটি ভেরিয়েবলের একটি ফাংশন নাম দেওয়ার এবং এটি চালানোর চেষ্টা করার অনুমতি দেয়।

এটি কেবল piদু'বার ফাংশনটির নামকে সম্মতি জানায় । এটি একটি দিয়ে পিএইচপি হত্যা করে Fatal Error: Uncaught Error: Call to undefined function pipi() in [...][...]

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

এটি আমার পুরানো উত্তরের মতো কাজ করে।


পুরানো উত্তর, 20 বাইট

পিএইচপি আপনাকে ইনক্রিমেন্ট অপারেটর ব্যবহার করে অক্ষর বৃদ্ধি করতে দেয়। এটি কেবলমাত্র a-zপরিসীমাটিতে কাজ করে , তবে যথেষ্ট।

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

আমি বিশ্বাস করি এটি সমস্ত প্রয়োজনীয় পয়েন্ট পূরণ করে এবং লুপটি একবারে চালিত হয়।

আপনি ত্রুটি পাবেন কারণ আপনি দেখতে পারেন Fatal error: Function name must be a string


এটি কীভাবে পদক্ষেপে কাজ করে:

  • বরাদ্দ করুন piথেকে $x
    যেহেতু piধ্রুবক হিসাবে ব্যবহৃত হচ্ছে, পিএইচপি উপস্থিত রয়েছে কিনা তা পরীক্ষা করে দেখবে।
    যেহেতু এটি নেই, পিএইচপি একটি সতর্কবার্তা বলছে Use of undefined constant pi - assumed 'pi'(মূলত: যেহেতু ধ্রুবকের অস্তিত্ব নেই তাই এটি একটি স্ট্রিং হিসাবে ধরে নেওয়া হয়)
  • প্রথমবার লুপ করুন
    • ফাংশন চালান $x()
      যেহেতু $xমান রয়েছে pi, এটি ফাংশনটি চালাবে pi()
  • মধ্যে মান সংরক্ষণ করুন $x
    $xপরিবর্তে এখন π আছেpi
  • দ্বিতীয়বার লুপ
    • ফাংশন চালান $x()
      যেহেতু $xπ রয়েছে, এটি ফাংশনটি পরিচালনা করবে 3.14159...()
    • a একটি স্ট্রিং নয়, একটি সাথে এই মুহুর্তে প্রোগ্রামটি হত্যা করছে Fatal Error

ফিটসটি সন্ধানের জন্য @ টিটাসকে ধন্যবাদ pi(), আমাকে 1 বাইট সংরক্ষণ !


খুব ভাল, তবে আমি এটি বৈধ বলে মনে করি না। এটি একবারে লুপটি চালায় না। লুপ বডিটি চালানোর আগে আপনি বাড়িয়ে $xনিন abt। আপনি লুপের পরে বৃদ্ধি করে তা ঠিক করতে পারেন ।
aross


@ আরস ডুহ, আপনি ঠিক বলেছেন, এটি বৈধ ছিল না। ইনক্রিমেন্টটি ভুল জায়গায়। এটি এখন করা উচিত হিসাবে কাজ করছে। আপনি for($x=abs;;++$x)echo$x,$x();পরীক্ষা চালানোর চেষ্টা করতে পারেন । এটা দেখাতে হবে abs0abt Fatal error[...]। অথবা সাদৃশ্যপূর্ণ.
ইসমাইল মিগুয়েল

1
আপনি piপরিবর্তে ব্যবহার করতে পারে abs। এটি মারাত্মক ছোঁড়ার আগে এমনকি কোনও সতর্কতাও দেয় না।
তিতাস

@ টিটাস আমি পুরোপুরি সেই ফাংশনটি ভুলে গিয়েছিলাম! আমি জানি যে ফাংশনটি _কয়েকটি সিস্টেমে সংজ্ঞায়িত করা হয় তবে এটি বিশ্বাসযোগ্য নয়। তবে এটি সন্ধানের জন্য আপনাকে ধন্যবাদ!
ইসমাইল মিগুয়েল

10

জিএনইউ সেড , 15 13 5 বাইট

-2 ধন্যবাদ seshoumara
-8 ধন্যবাদ জেপেলীন্

H;G;D
  1. প্যাটার্ন স্পেসে একটি নতুন লাইন এবং হোল্ড স্পেস যুক্ত করে।
  2. হোল্ড স্পেসে একটি নতুন লাইন এবং প্যাটার্ন স্পেস যুক্ত করে।
  3. প্রথম নিউলাইন পর্যন্ত মুছে যায় এবং আবার শুরু হয়।

এটি দ্রুত স্মৃতি থেকে সরে যায়:

$ time (echo|sed 'H;G;D')
sed: couldn't re-allocate memory

real    0m1.580s
user    0m0.545s
sys     0m1.012s

হাই, কেমন আছে s:a\?:&a:g? এটি 1 বাইট কম এবং পুনরাবৃত্তির জন্য প্যাটার্ন আকারটি দ্বিগুণও করে।
শৈশুমারা

@ সেশৌমারা আমি ভাবেন না যে প্যাটার্নের স্থানটি খালি থাকলে কোনও কিছুর সাথে মিলবে, তাই এটি কখনই প্রথম প্রতিস্থাপন করবে না।
রিলি

@seshoumara echo -n | sed 's:a\?:&a:g'এবং কোন আউটপুট পান নি। এটি একই রকম sed 's::a:'হবে যা কোনও কিছুর সাথে মেলে না।
রিলে 16

সঙ্গে echo -nএকেবারে কিছুই sed প্রেরণ কিন্তু sed নকশা ইনপুট ছাড়াই শুরু করতে পারে না পায়। এই মেটা লিঙ্কটি পরীক্ষা করে দেখুন এটি echo|sedকোনও ইনপুট নিয়ম না করে চ্যালেঞ্জগুলির জন্য সেড শুরু করার গ্রহণযোগ্য উপায়।
শৈশুমারা

@seshoumara আমি ভেবেছিলাম এটি এখনও এটি একটি খালি স্ট্রিং দেবে। যে কাজ করে মনে হয়। ধন্যবাদ!
রিলে

9

আর, 22 25 22 20 18 বাইট

সম্পাদনা: আর লেজ কল অপ্টিমাইজেশন সমর্থন করে না তা নির্দেশ করার জন্য @ মেগোকে ধন্যবাদ।

সম্পাদনা 4: একটি এমনকি সংক্ষিপ্ত সমাধান পাওয়া গেছে যা সহজ তবে বেশ জটিল।

repeat(ls(T<-T-1))

উত্তরটি বিল্টিন বুলিয়ান ট্রুটি ভেরিয়েবল ব্যবহার করে, Tযা পুনরাবৃত্তি লুপে অনির্দিষ্টকালের জন্য হ্রাস পেয়েছে। ফাংশনটিকে ls()প্রতিটি পুনরাবৃত্তি বলা হয় যা বর্তমান পরিবেশে সমস্ত বস্তু তালিকাবদ্ধ করে। যাইহোক, প্রথম যুক্তিটি nameকোন পরিবেশ থেকে কোন বস্তুগুলি তালিকাভুক্ত করা হবে তা নির্দিষ্ট করে। আর-ডকুমেন্টেশন থেকে আমরা এটি পাই:

নাম যুক্তি পরিবেশ যা থেকে আপত্তি নাম বিভিন্ন ফরম এক নেয়া হয় নির্দিষ্ট করতে পারেন: একটি পূর্ণসংখ্যা (অবস্থান যেমন searchতালিকা); অনুসন্ধান তালিকার একটি উপাদানের চরিত্রের নাম হিসাবে; বা একটি সুস্পষ্ট হিসাবে environment( sys.frameবর্তমানে সক্রিয় ফাংশন কল অ্যাক্সেস ব্যবহার সহ )।

মূলত এর অর্থ হ'ল প্রথম পুনরাবৃত্তিতে আমরা চালিত ls(-1)যা কোনটি ফিরে আসবে character(0)( everything-except-the-firstকোনও অক্ষরের ধরণের অবজেক্টের অস্তিত্বের উপাদানটি অ্যাক্সেস করার চেষ্টা করার সময় মানক )। দ্বিতীয় পুনরাবৃত্তির সময়, Tদুটি দ্বারা হ্রাস হয় এবং আমরা পরবর্তীকালে কল করি ls(-3)যা ঘুরে ফিরে ত্রুটি প্রদান করে:

Error in as.environment(pos) : invalid 'pos' argument

এটি কারণ আমরা everything-except-the-thirdউপাদান তালিকাভুক্ত করার চেষ্টা করি কিন্তু স্থানীয় পরিবেশে কেবলমাত্র Tএই স্থানে চলক থাকে (যেমন, এই পুনরাবৃত্তিতে ls()দৈর্ঘ্যের একটি তালিকা 1ফিরে আসে) এবং একটি ত্রুটি ফিরে আসে।


1
এটি পুনরাবৃত্তি লেজ কল অপ্টিমাইজেশনের সাথে সম্পন্ন হয়েছে এমনটি শোনাচ্ছে না, যদি কোনও পুনরাবৃত্তি সীমা থাকে।
মেগো

@ মেগো কিছুটা খোঁড়াখুঁড়ি করার পরে আমি জানতে পেরেছিলাম যে আর সত্যিই টেল কল অপ্টিমাইজেশান সমর্থন করে না যাতে এই উত্তরটি বৈধ নয় (ধারণাটি আগে কখনও শুনেনি)। এক মুহুর্তে একটি বৈধ উত্তরে পরিবর্তিত হবে।
বিলিউব

9

বেফঞ্জ -৩৩, ৩ বাইট (সম্ভবত 1 বা 0)

!%!

এটি অনলাইন চেষ্টা করুন!

লুপের প্রথম পুনরাবৃত্তিতে, স্ট্যাকটি খালি, যা সমস্ত শূন্যের সমতুল্য। !(নয়) অপারেশন এইভাবে 1 স্ট্যাকের শীর্ষ পরিবর্তিত, এবং %(মডিউল) অপারেশন 0 গেলিক ভাষার 1 হিসাব, 0. পরবর্তী ছাড়ার !অপারেশন পরিবর্তন করে 0 একটি 1 আগে প্রোগ্রাম কাউন্টার কাছাকাছি গোপন এবং লুপ আবার শুরু হয়।

দ্বিতীয় পুনরাবৃত্তির উপর, প্রথম !অপারেশন 1 0 থেকে স্ট্যাক শীর্ষে এখন পরিবর্তিত %অপারেশন তারপর 0 গেলিক ভাষার 0, যা রেফারেন্স অনুবাদক উপর শূন্য ত্রুটি দ্বারা একটি বিভাগ উৎপন্ন হিসাব, এবং এইভাবে প্রোগ্রাম বন্ধ।

আরও বোরিং 1 বাইট উত্তর আছে, যদিও আমি এটি বৈধ হিসাবে বিবেচিত কিনা তা নিশ্চিত না।

"

এটি অনলাইন চেষ্টা করুন!

এই "কমান্ডটি একটি স্ট্রিং শুরু করে, সুতরাং প্রোগ্রামের কাউন্টারটি চারপাশে মোড়ানো "না হওয়া এবং স্ট্রিংটি বন্ধ করে পুনরায় মুখোমুখি হওয়া অবধি লাইনের বাকী প্রতিটি লাইনের স্ট্যাকের দিকে ধাক্কা দেওয়া হয় । এরপরে দ্বিতীয় স্ট্রিংটি শুরু করে স্ট্যাকের উপরে আরও 79৯ টি স্পেস চাপিয়ে প্রক্রিয়াটি পুনরাবৃত্তি করতে দ্বিতীয় বারের মতো মোড়ানো দরকার to শেষ পর্যন্ত এটি হয় মেমরির বাইরে চলে যাবে (রেফারেন্স ইন্টারপ্রেটার আচরণ) বা স্ট্যাকের ওভারফ্লো উত্পাদন করবে।

এখন আপনি যদি নিয়মগুলি সত্যিই ধাক্কা দিতে চান তবে প্রযুক্তিগতভাবে একটি শূন্য বাইট সমাধানও রয়েছে।


আপনি যদি এই রায়টি গ্রহণ করেন তবে যে কোনও অনুবাদক ভাষা সংজ্ঞায়িত করেন (যেমন অনেকে এখানে করেন) তবে আমরা এই মুহুর্তের জন্য ধরে নিতে পারি যে বেফঞ্জ ভাষা এই দোভাষী দ্বারা সংজ্ঞায়িত হয়েছে । এবং সেই দোভাষীর একটি "বৈশিষ্ট্য" হ'ল এটি খালি প্রোগ্রামটি সম্পাদন করার সময় প্লেফিল্ডের প্রতিটি লুপের জন্য স্ট্যাকের উপরে একটি অপরিজ্ঞাত মানকে ঠেলে দেয় । পর্যাপ্ত সময় দেওয়া এটি শেষ পর্যন্ত স্মৃতিশক্তি থেকে শেষ হয়ে যাবে।

এটি কত দ্রুত ঘটে তা নির্ভর করবে কম্পিউটারের গতি, উপলব্ধ মেমরি এবং ব্রাউজারটি ব্যবহৃত হচ্ছে তার উপর। আমার মেশিনে আমি দেখতে পেলাম যে মাইক্রোসফ্ট এজ সবচেয়ে ভাল কাজ করেছে, কিন্তু তারপরেও এটি "মিনিট" ছিল দুই মিনিটের পরে 500MB ব্যবহার করে। এটি প্রায় পনের মিনিটের চিহ্নের মধ্যে ছিল না (বেশ কয়েকটি গিগাবাইট ব্যবহৃত হয়েছিল) এজ প্রক্রিয়াটি মেরে ফেলে ট্যাবটি রিফ্রেশ করার সিদ্ধান্ত নিয়েছিল। সুতরাং এটি দুই মিনিটের সময়সীমার অধীনে তৈরি করা অসম্ভব, তবে সঠিক শর্তগুলির সাথে যা অগত্যা প্রশ্নের বাইরে থাকবে না।


8

মিথ্যা, 8 বাইট

আমি সত্যিই এই ভাষা পছন্দ করি।

1[$][.]#

এটি একটিকে ধাক্কা দেয় 1, তারপরে সত্য [$][.]#হয়ে গেলে লুপ $হয় (স্ট্যাকের সদৃশ শীর্ষ) এবং ( .) এটি আউটপুট করে। এই দোভাষী একক পরে ক্র্যাশ1 মুদ্রণের (লুপটি অন্তত একবার চলার প্রমাণ।) এই দোভাষীটিতে এটি একটি বাগ বলে মনে হচ্ছে। নিম্নলিখিত 9-বাইট প্রোগ্রামটি সমস্ত অনুগত দোভাষীগুলিতে কাজ করা উচিত:

1[$][..]#

আপনার DUPও চেষ্টা করা উচিত যা মূলত FALSE এর সুপারস্টার et এটাই আমি রিটার্ন করতাম।
মামা ফান রোল

@ মামাফুনরল ওহ হ্যাঁ, আমি ভুলে গেছি যে আপনি ফিরে এসেছেন! আমি যে এক চেষ্টা করতে হবে। : ডি
কনর ও'ব্রায়েন

@ মামাফুনরল আমি ডিইউপিকে ভালবাসি, আমি মাত্র একটি ডিইউপি ইন্টারপ্রেটার লিখেছি এবং এটি নিয়ে আমি খেলছি।
এমএল

@ কনরও ব্রায়ান: আমি বলব যে আপনার প্রথম সমাধানটি কোনও দোভাষীকে ক্র্যাশ করে। আমি কেবলমাত্র আমার নিজের অনুবাদকের সাহায্যে একটি ডিবাগ রান করেছি, এবং এটি স্পষ্টতই প্রথম যে .ডেটা স্ট্যাকটি খালি করে, যখন দ্বিতীয় লুপটি $ফাঁকা স্ট্যাকের শীর্ষ উপাদানটিকে নকল করার চেষ্টা করে, যা একটি ত্রুটির দিকে পরিচালিত করতে পারে (ভাল, আমার অনুবাদক তা করেন )। দ্বিতীয় সংস্করণটি বৈধ হওয়া উচিত নয় কারণ এটি এমনকি প্রথম লুপটি শেষ করে না কারণ এটি ইতিমধ্যে খালি স্ট্যাক অকাল আগে অ্যাক্সেস করার চেষ্টা করে।
এমএল

আপনার দ্বিতীয় উদাহরণের জন্য, এখানে আমার ডিইপি ইন্টারপ্রেটারের একটি সম্পূর্ণ রঙিন ডিবাগ ডাম্প । এটি একবার স্পষ্ট হয়ে গেলে আপনি কীভাবে দেখেন যে ডেটা স্ট্যাক (ডিএস) এবং রিটার্ন স্ট্যাক (আরএস) কাজ করে, যদিও ফলসটিতে স্বচ্ছ নয়।
এমএল

8

সি, 21 বাইট

i;f(){for(;1/!i++;);}

এখানে iশুরু হিসাবে গ্যারান্টিযুক্ত 0

এটি নিশ্চিত হতে পারে যে এটি একবারের মতো চলে:

i;f(){for(;1/!i++;)puts("hi");}
main(){f();}

যা, আমার মেশিনে, ফলাফল:

llama@llama:...code/c/ppcg104323loop$ ./a.out 
hi
zsh: floating point exception (core dumped)  ./a.out

সংক্ষিপ্ততম পুনরাবৃত্তির সমাধানটি আমি খুঁজে পেতে পারি 22 টি বাইট :

f(i){f(i-puts(""-i));}

gccকেবলমাত্র টেল কল নির্মূল -O2বা উচ্চতর putsকরতে পারে, যেখানে আমাদের পুরো জিনিসটি অপ্টিমাইজ হওয়া থেকে রোধ করার মতো একটি ফাংশন কল করতে হবে । নিশ্চিত হয়ে গেছে যে এটি কাজ করে:

llama@llama:...code/c/ppcg104323loop$ cat loop.c       
main(){f();}
f(i){f(i-puts(""-i));}
llama@llama:...code/c/ppcg104323loop$ gcc -O2 -S loop.c 2>/dev/null
llama@llama:...code/c/ppcg104323loop$ grep call loop.s
    call    puts
    call    f

নীচে একটি সম্পূর্ণ প্রোগ্রাম রয়েছে, যা ধরে নিয়েছে যে এটি 22 বাইটে কোনও কমান্ড লাইন যুক্তি ছাড়াই ডাকা হয়েছে :

main(i){for(;1/i--;);}

যা একই দৈর্ঘ্যের ফাংশনের সমতুল্য:

f(i){for(i=1;1/i--;);}

এই মত একটি ফাংশন মূল মত চিকিত্সা করা হয়? যদি এটি হয় তবে প্রথম যুক্তি হ'ল আর্গুমেন্ট তালিকার দৈর্ঘ্য (যা 1, এটি নামটি কল করার জন্য ব্যবহৃত হত)।
রেলি

অথবা, আর্গুমেন্ট রেজিস্টারের এখনও মান রয়েছে যা মূল কল করা থেকে ছিল।
রেলি

@ রিলে আহ, পরবর্তী তত্ত্বটি কেস হিসাবে উপস্থিত হবে বলে প্রমাণিত হয়েছে যে কমান্ড লাইন যুক্তি যুক্ত হওয়ার সাথে সাথে সংখ্যাটি বৃদ্ধি পায়। অন্তর্দৃষ্টি জন্য ধন্যবাদ!
ডোরকনবব

আমার প্রথম অনুমানে আপনি কীভাবে এটি কল করছেন আমি নিশ্চিত নই, তবে আমার ফাংশনটির প্রথম যুক্তির মতো হওয়া উচিত f
রিলি

হ্যাঁ, টিও
রাইলে

6

ম্যাটল্যাব, 18 বাইট

এটি স্ক্রিপ্ট হিসাবে চালানো যেতে পারে:

for j=1:2;j(j);end

প্রথম পুনরাবৃত্তি ঠিক আছে, যেহেতু j(1)ন্যায়সঙ্গত 1। দ্বিতীয় পুনরাবৃত্তির সীমা ত্রুটির বাইরে অ্যারের সাথে ক্র্যাশ হয়ে j(2)গেছে, এর মাত্রা ছাড়িয়ে গেছেj যা 1x1 অ্যারে।

এটি স্ক্রিপ্ট হিসাবেও চালানো যেতে পারে তবে আপনি এটি চালানোর সময় এটি কেবলমাত্র কাজ করে। তবুও, এটি ম্যাটল্যাবের পূর্বনির্ধারিত ধ্রুবকগুলির একটি হাসিখুশি যথেষ্ট অপব্যবহার যা আমি ভেবেছিলাম আমি এটি অন্তর্ভুক্ত করব। এটিও 18 বাইট।

while i/i;i={};end

যখন কোনও ওয়ার্কস্পেসে চালিত করুন যা ভেরিয়েবলটি iএখনও সংজ্ঞায়িত করা হয়নি, তখন ধরে নেওয়া iহয় এটি কাল্পনিক ইউনিট, তাই i/i = 1। প্রথম লুপ ইন, নিয়োগ i={}একটি খালি সেল অ্যারে নামক সৃষ্টি i। দ্বিতীয় পুনরাবৃত্তিতে লুপটি "সেল 'টাইপের ইনপুট আর্গুমেন্টের জন্য" অপরিজ্ঞাত অপারেটর' / 'দিয়ে প্রস্থান করে ""


দু'জনেই দুর্দান্ত! আপনি সম্ভবত এই জানি, কিন্তু j(2)স্বাভাবিকভাবে সঙ্গে একটি 2-দ্বারা-2 ম্যাট্রিক্স দিতে হবে0+1i
Stewie গ্রিফিন

ধন্যবাদ! এটি
অক্টোবায়

6

পার্ল 6 , 13 বাইট

loop {5[$++]}

অসীম লুপটিতে পূর্ণসংখ্যার আক্ষরিক সূচক করে।
সত্যিকারের উপর নির্ভর করে যে স্কেলারের মানগুলিতে অ্যারে ইনডেক্সিং সিনট্যাক্স সূচকের সাথে ব্যবহার করা যেতে পারে 0(মানটি নিজেই ফেরানো ), তবে Index out of rangeঅন্য কোনও সূচকের জন্য একটি ত্রুটি নিক্ষেপ করে ।


6

কিউবাসিক, 17 বাইট

এই কোডটি খুব অদ্ভুত।

DO
i=11+a(i)
LOOP

কিভাবে এটা কাজ করে

কিউব্যাসিক-এ, ভেরিয়েবলগুলি পূর্বনির্ধারিত হয়। কোনও ধরণের প্রত্যয় ছাড়াই নিয়মিত পরিবর্তনশীল, যেমন iএখানে শূন্যের পূর্বরূপ হয়।

আপনি যদি অ্যারের মতো সেই পরিবর্তনশীলটিতে সাবস্ক্রিপ্ট চেষ্টা করেন ... তবে সেই ক্ষেত্রে এটি 11 টি শূন্যের অ্যারে। *

লুপের মাধ্যমে প্রথমবার উপর সুতরাং, iহয় 0এবং aএকটি অ্যারে। a(i)অ্যারের জিরোথ উপাদান দেয় (যা 0)। সব ভাল এবং ভাল। আমরা সেট iকরতে 11এবং লুপ। তবে এখন 11অ্যারের জন্য কোনও বৈধ সূচক নয় aএবং প্রোগ্রামটি বন্ধ রয়েছেSubscript out of range

একটি 19-বাইট সংস্করণ যা আরও ভাল দেখায় যা চলছে:

DO
?a(i)
i=i+1
LOOP

এটি 0ত্রুটি করার আগে এগার বার মুদ্রণ করবে ।


* ধারণামূলকভাবে, এটি একটি 10-উপাদান অ্যারে। কিউব্যাসিকের বেশিরভাগ জিনিসগুলি 1-ইনডেক্সযুক্ত তবে অ্যারেগুলি সম্ভবত বাস্তবায়নের কারণে হয় না। প্রোগ্রামারদের জন্য প্রত্যাশার মতো জিনিসগুলি তৈরি করতে, কিউব্যাসিক অতিরিক্ত প্রবেশের জন্য নিক্ষেপ করে যাতে আপনি সূচকগুলি 1 থেকে 10 পর্যন্ত ব্যবহার করতে পারেন তবে সূচক 0 তবে এখনও পুরোপুরি অ্যাক্সেসযোগ্য। চিত্রে যান.


কিউ বেসিক এবং অ্যারে, মজা কোথায় থামে!
স্টেনবার্গ

যেহেতু ত্রুটি নেই আছে দ্বিতীয় লুপ উপর হতে, আপনি করতে পারে না i=1+a(i)?
Quelklef

@ কিউলক্লেফ না, আপনাকে করতে হবে i=i+1+a(i)। অন্যথায় সূচক কখনই উপরে যায় না, 1এটি কোনও ত্রুটি নয়।
ডিএলসকে

@DLosc ওহ, আপনি ঠিক বলেছেন।
কোয়েলক্লেফ

5

হাস্কেল, 15 বাইট

f(a:b)=f b
f"a"

f"a"প্রথম চরটি ফেলে "আ" স্ট্রিংয়ের মাধ্যমে পুনরাবৃত্তভাবে চালিত হয় এবং শেষ পর্যন্ত Non-exhaustive patterns in function fব্যতিক্রম সহ তার ব্যর্থতা ব্যর্থ হয় , কারণ fকেবল খালি খালি স্ট্রিংগুলির জন্য সংজ্ঞায়িত করা হয়।


5

সি #, 71 38 বাইট

যেহেতু আপনি সি # তে একটি উদাহরণ সরবরাহ করেছেন এখানে অন্য সংস্করণ গল্ফ হয়েছে

এবং গোলাপিফ্লোয়েডএক্স 33 ধন্যবাদ

void c(){checked{for(uint i=1;;i--);}}

আমি মানসিকভাবে ফেলে দিয়েছি Parse.ToString()তার চেয়েও ছোট Parse($"{c--}")ortercheckedএটি কোনও কীওয়ার্ডের অনেক দীর্ঘ হওয়ার জন্য । শক্ত এটা অবশ্যই চেয়ে কমParse(c.ToString())

আসল উত্তর

class p{static void Main(){for(int c=0;;c--)uint.Parse(c.ToString());}}

এই শুরু হবে c=0তারপর, এটা হ্রাস যখন একটি কারণ হতে হবে:c=-1uint.Parse

Unhandled Exception: System.OverflowException: Value was either too large or too small for a UInt32.

অবহেলিত সংস্করণ এবং যা লুপটি অন্তত একবার চালিত তা যাচাই করে

class p {
    static void Main() {
        for(int c=0;;c--) {
            System.Console.Write(c);
            uint.Parse(c.ToString());
        }
    }
}

for(int c=0;;)uint.Parse($"{c--}");
গোলাপফ্লোয়েডএক্স 33


ঠিক আছে, বাহ! '$' শর্টহ্যান্ড সম্পর্কে জানতেন না!
মিঃপলচ

4

সিজেম , 4 বাইট

1{}g

এটি অনলাইন চেষ্টা করুন!

খালি {}gলুপের প্রথম পুনরাবৃত্তিটি পপ করে 1, যা এটি চালিয়ে যেতে বলে। দ্বিতীয় পুনরাবৃত্তিটি অন্য শর্তযুক্ত পপ করার চেষ্টা করে, তবে স্ট্যাকটি খালি, সুতরাং প্রোগ্রামটি ক্র্যাশ হয়ে গেছে।


4

x86 বিধানসভা (এটি অ্যান্ড টি সিনট্যাক্স), 40 বাইট

f:
mov $1,%eax
A:
div %eax
dec %eax
je A

একটি ফাংশন এফ ঘোষণা করে যা এর প্রথম পুনরাবৃত্তিতে 1 দ্বারা 1 কে ভাগ করে তারপর 0 দ্বারা 0 এবং ত্রুটি বিভক্ত করার চেষ্টা করে।


আপনি ইন্টেল সিনট্যাক্সে স্যুইচ করে 4 বাইট সংরক্ষণ করতে পারেন :)
mriklojn

6
আমরা সাধারণত উত্পন্ন বাইট কোডের আকার দ্বারা সমাবেশ করি না, মানব-পঠনযোগ্য নির্দেশাবলী নয়।
ডেনিস

@ ডেনিস অ্যাসেম্বল্ড অ্যাসেমব্লিং হ'ল মেশিন ল্যাঙ্গুয়েজ। তবে হ্যাঁ এটি মেশিন ভাষা আকারে আরও খাটো দাবি করা যেতে পারে।
জেসেন

এফ-লেবেল এবং মুভ থেকে মুক্তি পান। ডেস্ক এবং ডিভ অদলবদল করুন এবং আপনি আরও কিছু থেকে মুক্তি পেতে পারেন।
ক্লিয়ারার

4

সিজেম, 4 বাইট

P`:~

P`স্ট্রিং উত্পন্ন 3.141592653589793:~প্রতিটি চরিত্র মূল্যায়ন করে। 3CJam মধ্যে বৈধ কোড যা কেবল 3. ফেরৎ পরবর্তী পুনরাবৃত্তিতে হয় .একটি ত্রুটি ঘটায় কারণ এটি একটি অঙ্ক বা এটি নিম্নলিখিত একটি অপারেটর প্রয়োজন।




4

ব্যাচ, 22 20 বাইট

:a
set i=%i%1
goto a

ব্যাখ্যা

এটি একটি অসীম লুপ যা 1প্রাথমিকভাবে খালি স্ট্রিংয়ের সাথে যুক্ত হয়। অবশেষে এটি সর্বাধিক স্ট্রিং দৈর্ঘ্য 8192 এবং ক্র্যাশ হয়ে যাবে। আমার মেশিনে, এটি প্রায় 30 সেকেন্ড সময় নেয়।


নিস! আপনি ইউনিক্স লাইন শেষ ব্যবহার করে 2 বাইট সংরক্ষণ করতে পারেন।
ব্রিটিশবাদী

আপনি% 0 ব্যবহার করতে পারেন যা লেবেল এবং গোটোর পরিবর্তে ফাইলের নাম।
YourDeathIs আসছেন

আমি নিশ্চিত ছিলাম না যে এটি লেজ পুনরাবৃত্তি নিয়মটি ভঙ্গ করেছে কিনা।
SomethingDark

4

জাভাস্ক্রিপ্ট, 9 বাইট

for(;;i);

এটি একবার চালায়, তারপরে নিক্ষেপ করে ReferenceError: i is not definedযা লুপটি থামায়।

// With a console.log(1) to see that it runs once.
for(;;i)console.log(1);


নিম্নলিখিত উদাহরণগুলির উদাহরণ হিসাবে নেওয়া, <increment>প্রথম চক্রের সমাপ্তি বা দ্বিতীয় চক্রের সূচনা?

0:for(<init>;<test>;<increment>)
1:{
2:  <statement>;
3:}

1 / আমি এটি দেখতে

লাইন 0 থেকে লাইন 3 এ যাওয়ার পরে আবার লাইন 0 এ ফিরে যাওয়ার পরে মনে হয় একটি সম্পূর্ণ চক্র সম্পন্ন হয়েছে।
যে করতে হবে <increment>দ্বিতীয় চক্র শুরুতে।
- প্রথম চক্র: <init>-> <test>-> <statement>
- দ্বিতীয় চক্র: <increment>-><test> -><statement>

2 / Whileসমমান

0:<init>;
1:while(<test>)
2:{
3:  <statement>;
4:  <increment>;
5:}

এই সমতুল্য সালে whileThe <increment>প্রথম চক্র শেষ হয় এবং এটি মতানুযায়ী মত এটা দিয়ে একই for। এটি প্রথম চক্রের শেষ
করে ফেলবে <increment>
- প্রথম চক্র:<test> -> <statement>-> <increment>
- দ্বিতীয় চক্র: <test>-> <statement>-><increment>

3 / একটি বিবৃতি দুইবার সম্মুখীন হয়

একটি বিবৃতি দু'বার মুখোমুখি হলে একটি সম্পূর্ণ চক্র সম্পন্ন হয়।
প্রথম বিবৃতি দু'বার সম্মুখীন হয়েছে <test>। এটি প্রথম চক্রের শেষ
করে ফেলবে <increment>
- প্রথম চক্র: <test>-><statement> -> <increment>
- দ্বিতীয় চক্র: <test>-><statement> -><increment>

4 / এটি একটি সেটআপ

<init>শুধু স্থাপন করছে যাই হোক না কেন প্রথম চক্র জন্য প্রয়োজন হয়। শুধু স্থাপন করছে যাই হোক না কেন দ্বিতীয় চক্র জন্য প্রয়োজন হয়। যে করতে হবে দ্বিতীয় চক্র শুরুতে। - প্রথম চক্র: -> -> - দ্বিতীয় চক্র: -> ->
<increment>
<increment>
<init as a setup><test><statement>
<increment as a setup><test><statement>


ECMAScript® 2016 ভাষা নির্দিষ্টকরণ

রানটাইম for(<init>;<test>;<increment>)<statement>;

ভ্যারডিসিএলকে মূল্যায়নের ফলাফল হতে দিন <init>
ReturnIfAbrupt (varDcl)।
ফিরবেন? ফোডি বডিআলুয়েশন ( <test>,<increment> , <statement>, «», labelSet)।

তিনটি ফর্ম রয়েছে, তাই আমি এখানে সংক্ষিপ্ততমটি নিয়েছি, কোনও পার্থক্য নেই:
- যাই হোক না কেন<init> এটি প্রথম পুনরাবৃত্তির অংশ নয়।
- যা প্রাসঙ্গিক তা ফোরবডি মূল্যায়নে রয়েছে।

ForBodyEvaluation বিবরণ ( <test>, <increment>,<statement> , «», labelSet)

0 ভিটাকে অপরিজ্ঞাত করা যাক।
1 পারফর্ম করবেন? CreatePerIterationEnvironment (perIterationBindings)।
2 পুনরাবৃত্তি
3 যদি [খালি] না হয়, তবে
4 টেস্টের রেফকে মূল্যায়নের ফলাফল হতে দিন <test>
5 টেস্টভ্যালু হতে দিন? GetValue (testRef)।
6 যদি টুবুলিয়ান (টেস্টভ্যালু) মিথ্যা হয় তবে সাধারণ কমপ্লিট (ভি) ফিরিয়ে দিন।
7 ফলাফল মূল্যায়নের ফলাফল হতে দিন <statement>
8 যদি লুপকন্টিনিউগুলি (ফলাফল, লেবেলসেট) মিথ্যা থাকে তবে সম্পূর্ণ (ফিরিয়ে আনুন আপডেট) (ফলাফল, ভি)।
9 যদি ফলাফল হয় [[[মান]] খালি নয়, ভি ফলাফল হতে দিন [[[মান]]।
10 পারফর্ম করবেন? CreatePerIterationEnvironment (perIterationBindings)।
11 যদি [খালি] না হয় তবে 13 পারফর্ম করবেন? GetValue (incRef)।
12 ইনক্রফ মূল্যায়নের ফলাফল হতে দিন <increment>

6 / আমি এটি দেখতে

একটি পূর্ণ চক্র পুনরাবৃত্তি অংশের একটি সম্পূর্ণ রান। এটি প্রথম চক্রের শেষ
করে ফেলবে <increment>
- প্রথম চক্র: <test>-> <statement>-> <increment>/ অন্য কথায় লাইন 3 থেকে লাইন 13
- দ্বিতীয় চক্র: <test>-> <statement>-> <increment>/ অন্য কথায় 3 লাইন থেকে লাইন 13

7 / একটি চক্র একটি পুনরাবৃত্তি

একটি চক্র দিয়ে শুরু CreatePerIterationEnvironment
সুতরাং যখন CreatePerIterationEnvironmentমুখোমুখি হয় একটি নতুন চক্র শুরু হয়, এভাবে আগেরটি শেষ হয়।
যে করতে হবে <increment>দ্বিতীয় চক্র শুরুতে।
- প্রথম চক্র: <test>-> <statement>/ অন্য কথায় লাইন 1 থেকে লাইন 9
- দ্বিতীয় চক্র: <increment>-> <test>-> <statement>/ অন্য কথায় লাইন 10 লুপ থেকে লাইন 9 পর্যন্ত


কি <increment>প্রথম চক্র শেষ বা দ্বিতীয় চক্র শুরুতে?

সঠিক ব্যাখ্যা 6 বা 7 হয় either


8
আমি মনে করি যে আমি দ্বিতীয় পুনরাবৃত্তির শুরুতে বা পুনরাবৃত্তির দিকে না গিয়ে প্রথম পুনরাবৃত্তির শেষের দিকে বর্ধিতকরণকে আরও বেশি আগ্রহী। আমি মনে করি এটি প্রশ্নের একটি অস্পষ্টতা।

1
যেহেতু for(a;b;c)d;মোটামুটি সমান a;while(b){d;c;}, তাই আমি বলতে চাই যে ত্রুটিটি এখনও প্রথম পুনরাবৃত্তিতে ফেলে দেওয়া হয় (লুপের শর্তটি দ্বিতীয়বার পরীক্ষা করার আগে)।
ETH প্রোডাকশনগুলি

@ হার্কিল প্রথম পুনরাবৃত্তিটি আরম্ভের সাথে শুরু হয়, সুতরাং আমি মনে করি যে বৃদ্ধিটি দ্বিতীয় পুনরাবৃত্তির সূচনা হওয়া উচিত।
হেডি

4
আপনি যদি স্পেকটি পড়ে থাকেন তবে দেখতে পাবেন যে ইনক্রিমেন্ট অপারেশনটি পুনরাবৃত্তির শেষ অংশ এবং যেমনটি এখনও প্রথম পুনরাবৃত্তির অন্তর্ভুক্ত।
নিট

3
@ হেইডি আমি দেখতে পাচ্ছি না যে এটি মোটেই প্রাসঙ্গিক। ইনক্রিমেন্ট অপারেশন খুব স্পষ্টভাবে লুপের প্রথম রানের একটি অংশ। পুনঃব্যবহার করতে, যখন ইনক্রিমেন্ট অপারেশন বলা হয়, লুপটি একটি সম্পূর্ণ রান চালায় না।
নীট

4

ইন্টারকল , 12 বাইট

(1)DO(1)NEXT

এটি অনলাইন চেষ্টা করুন!

NEXTইন্টারকল -২২ এর প্রধান নিয়ন্ত্রণ প্রবাহ কমান্ড। (পরবর্তীতে সংশোধনগুলি প্রবর্তন করা হয়েছে COME FROM, যা আরও বিখ্যাত হয়ে উঠেছে, তবে এটি ভাষার মূল সংস্করণে ছিল না; এবং সমস্ত সমাপ্ত ইন্টারকল বাস্তবায়ন আমি সমর্থন সম্পর্কে সচেতনNEXT পিছনের সামঞ্জস্যের জন্য এটির ব্যতীত অন্য সবগুলি ডিফল্টরূপে সমর্থন সমর্থন করে So আমি বিশেষত শিরোনামে ইন্টারকল -২২ নাম রাখার প্রয়োজন বোধ করি না।)

NEXTএকটি লুপ তৈরি করতে ব্যবহার করার সময় , আপনি প্রোগ্রামটি কোথায় ছিল তা মনে রাখার জন্য এটি ব্যবহার করার জন্য RESUMEবা FORGETস্থানটি খালি করার জন্য ব্যবহার করার কথা; RESUMEবিপরীতমুখীভাবে NEXTএকটি ফাংশন কলের অনুরূপ কিছুতে পরিণত করে (যদিও আপনি যেটিতে রয়েছেন তা বাদ দিয়ে আপনি অন্য ফাংশন থেকে ফিরে আসতে পারেন) যদিওFORGET যেটিতে এটি একটি গোটো বিবৃতিতে আরও অনুরূপ কিছু করে তোলে। আপনি যদি না করেন (এবং এই প্রোগ্রামটি না করে), 80 টি পুনরাবৃত্তির পরে প্রোগ্রামটি ক্রাশ হয়ে যাবে (এই আচরণটি আসলে ইন্টারকল স্পেসিফিকেশনে নির্দিষ্ট করা আছে)।

এটি সীমাহীন পুনরাবৃত্তি হিসাবে বিবেচিত হয়েছে কিনা তা কিছুটা অস্পষ্ট (প্রশ্নটিতে অস্বীকৃত); আপনি অবশ্যই NEXTকোনও ফাংশন কল বাস্তবায়নের জন্য এই ধরণের ব্যবহার করতে পারেন , এটি কার্যকরভাবে একটি পুনরাবৃত্ত ফাংশন হতে পারে তবে আমরা একটি ফাংশন কল করছি কিনা তা নির্ধারণ করার জন্য এখানে পর্যাপ্ত তথ্য নেই। কমপক্ষে, আমি যাইহোক যাইহোক এটি পোস্ট করছি কারণ এটি নির্বিঘ্নভাবে নিয়ম লঙ্ঘন করে না, এবং "লেজ কল "টিকে অনুকূলিত করে এমন একটি ইন্টারকাল বাস্তবায়ন কেবল স্পেসিফিকেশনকে লঙ্ঘন করবে না, তবে বেশিরভাগ বিদ্যমান প্রোগ্রামগুলিকেও ভেঙে ফেলবে, কারণ ফিরে আসার কারণে "ভুল ফাংশন" হ'ল আইএফ স্টেটমেন্টের সমতুল্য করার প্রধান উপায়।

সি-ইন্টার্কাল দ্বারা উত্পাদিত হিসাবে এখানে ফলাফল ত্রুটি বার্তা:

ICL123I PROGRAM HAS DISAPPEARED INTO THE BLACK LAGOON
    ON THE WAY TO 1
        CORRECT SOURCE AND RESUBNIT

(নোট করুন যে দ্বিতীয় লাইনটি একটি ট্যাবের সাথে ইন্ডেন্ট করা আছে এবং তৃতীয়টি আটটি স্পেসের সাথে রয়েছে This এটি টার্মিনালে সঠিকভাবে দেখা যাচ্ছে বা ট্যাব রয়েছে এমন কোনও প্রোগ্রামে 8 এর গুণমানে স্টপ রয়েছে তবে যাইহোক, মার্কডাউনটির ট্যাব স্টপগুলি বহুগুণে রয়েছে) চারটি, বেশিরভাগ পুরানো প্রোগ্রামগুলি ট্যাবগুলি সম্পর্কে করা অনুমানগুলি লঙ্ঘন করে তাই ত্রুটি বার্তাটি এখানে কিছুটা দূষিত)


ত্রুটি আসলেই কি বলে CORRECT SOURCE AND RESUBNIT? মূল সি-ইন্টার্কাল ত্রুটি বার্তায় কোনও টাইপোর মতো?
আন্ডারাকিস 25'16

1
@ আন্ডারকিস: হ্যাঁ, তা হয়। সেই টাইপগুলি বছরের পর বছর যত্ন সহকারে সংরক্ষণ করা হয়েছে।

3

পাইথ, 3 বাইট

W1w

এটি অনলাইনে চেষ্টা করুন।

W1ঠিক while 1:পাইথনে। লুপের বডিটি এসটিডিআইএন থেকে পঠিত একটি লাইন প্রিন্ট করে, যা কোডটি খালি ইনপুট দিয়ে চালিত হওয়ার পরে দ্বিতীয় পুনরাবৃত্তির জন্য ক্র্যাশ হয়।

যদি #(লুপ-অব-ত্রুটি) ব্যবহার করে লুপগুলি নিষিদ্ধ করা হয় (আমি এটি ধরে নিই) তবে আমি মনে করি এটি এটি সবচেয়ে সংক্ষিপ্ত।


3

পাইথন 3, 29 বাইট

i=1
def x(n):del i;x(i)
x(i)

সত্যিই সহজ। এক্স-তে দ্বিতীয় কল করার পরে, আমি সেখানে নেই, এবং পাইথন এটি সম্পর্কে অভিযোগ করে।


3

ভোল্টেজ , 3 বাইট

#(/

এটি অনলাইন চেষ্টা করুন!

বেশিরভাগ 2 ডি ভাষার মতো, ল্যাবরেথের কোনও সুস্পষ্ট লুপিং নির্মাণ নেই। পরিবর্তে, যে কোনও কোড নির্ধারণ করা হয় যা এটি একাধিকবার কার্যকর করা হয় তা এই ভাষাগুলির লুপ। ল্যাবরেথের ক্ষেত্রে, একটি সরল রৈখিক প্রোগ্রাম একটি লুপ হিসাবে কাজ করে, কারণ নির্দেশিকা নির্দেশক এতে পিছনে পিছনে বাউন্স করবে। প্রোগ্রামটি যদি abc(কিছু কমান্ডের জন্য a, bএবং c) হয় তবে প্রকৃত বাস্তবায়নটি abcbabcbabcb...তাই এটি abcbঅসীম লুপে চলে।

কেন এই বিশেষ প্রোগ্রামটি এই লুপের দ্বিতীয় পুনরাবৃত্তির উপর ক্র্যাশ হয়, স্বতন্ত্র কমান্ডগুলি এখানে কী করে তা এখানে। নোট করুন যে ল্যাবথার স্ট্যাকের নীচে একটি অন্তহীন অসীম পরিমাণ শূন্য রয়েছে:

#   Push stack depth.   [... 0]
(   Decrement.          [... -1]
/   Divide.             [... 0]
(   Decrement.          [... -1]
#   Push stack depth.   [... -1 1]
(   Decrement.          [... -1 0]
/   Divide.             Crashes with division-by-zero error.

3

বাশ, ১১ (সীমান্তরেখা অ-প্রতিযোগিতামূলক)

exec $0 1$@

এই স্ক্রিপ্টটি পুনরাবৃত্তভাবে নিজেকে সম্পাদন করে, 1প্রতিটি পুনরাবৃত্তিতে পাস হওয়া আরগগুলিতে সংযুক্ত করে। আমি মনে করি এটি টিসিও হিসাবে গণ্য হয়েছে কারণ এক্সিকিউটিস প্রক্রিয়াটির স্থানটি পুনরায় ব্যবহার করে তবে স্ট্যাক খায় না। এটি সীমান্তরেখা অ-প্রতিযোগিতামূলক কারণ আমার মেশিনে মারা যাওয়ার প্রায় 10 মিনিট সময় লেগেছে - ওয়াইএমএমভি।


1
exec $0 1$@$@ অনেক দ্রুত শেষ হয় তবে দুটি অক্ষর দীর্ঘ হয়।
জেসেন

3

সেমিডি, 34 বাইট

for /l %i in (0,1,10) do color %i0

এটি %i0 থেকে 10 পর্যন্ত চক্র হবে (প্রাচীন)color কমান্ড 2 (হেক্সা-) দশমিক সংখ্যা রয়েছে এমন কোনও যুক্তি আনন্দের সাথে গ্রহণ করবে। যুক্তি সহ 100এটি ব্যর্থ হবে, সহায়তা বার্তা মুদ্রণ এবং ERRORLEVEL1 এ সেট ।

অন্তত একবার লুপ চলার প্রমাণ: আপনার শেলের রঙ আলাদা হবে!

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.