Tugas Anda adalah untuk menulis sebuah program penuh atau fungsi yang tidak mengambil input dan menjalankan jenis loop ( while
, for
, foreach
, do
, do-while
, do-loop
, goto
, rekursi, dll) yang akan berakhir dalam menyebabkan kesalahan, yang berarti bahwa program harus berhenti sendiri berjalan dan keluar.
Aturan:
- Kesalahan harus merupakan kesalahan run-time, pengecualian tidak tertangani, atau apa pun yang membuat program berakhir dengan sendirinya.
- Kesalahan harus menghasilkan berhenti dan keluar dari program tanpa memanggil secara eksplisit
exit;
(atau setara) di beberapa titik. - Pesan seperti
Warning:
,,Notice:
dll, yang tidak menyebabkan program berakhir dengan sendirinya tidak valid. Misalnya dalam pembagian PHP dengan nol menghasilkanWarning
pesan tetapi program tidak akan berhenti dan akan tetap berjalan, ini bukan jawaban yang valid. - Loop harus menjalankan setidaknya satu siklus penuh. Dengan kata lain kesalahan bisa terjadi mulai dari siklus kedua dan selanjutnya. Ini untuk menghindari kesalahan menggunakan sintaksis kode yang salah: kode harus benar secara sintaksis.
- Perulangan dapat menjadi tak terbatas (contoh
for(;;);
) jika menghormati aturan yang disebutkan di atas, tetapi harus tidak lebih dari 2 menit untuk mengakhiri sendiri dalam kesalahan run-time. - Rekursi tanpa Optimasi Panggilan Ekor tidak valid ( 1 , 2 ).
- Ini adalah kode-golf sehingga kode terpendek menang.
- Celah standar dilarang.
Contoh C # ( tes online ):
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
Papan peringkat:
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>
Terima kasih kepada Martin Ender untuk Cuplikan Leaderboard
for(a;b;c)d;
, setelah pernyataan mana yang mengakhiri siklus pertama? Apakah sah untuk melanggar pernyataan pertamac
?a, b, d, c, b, d, c, ...
,b
adalah awal dari siklus, dan harus dijalankan setidaknya untuk kedua kalinya.Jawaban:
MATL ,
51 byteIde diambil dari jawaban CJam @ MartinEnder
Cobalah online!
Versi lama
Cobalah online!
sumber
Python, 16 byte
Pendekatan 0 divisi yang tidak menarik:
Iterasi pertama menghitung
1 / 1
, yang berfungsi dengan baik. Iterasi kedua mencoba untuk menghitung0 / 0
, menghasilkanZeroDivisionError
dilemparkan.17 byte (favorit pribadi)
Awalnya,
i=1
yang benar, jadi loop dimasukkan.Pertama kali loop dijalankan, variabel
i
dihapus.Ini berarti bahwa, yang kedua kalinya,
i
bukan lagi sebuah variabel dan karenanya evaluasinya gagalNameError: name 'i' is not defined.
Solusi 15 byte lainnya adalah
def _():_()
(baris baru)_()
, karena Python tidak mengoptimalkan rekursi ekor. Namun, ini melanggar aturan # 6.sumber
while i
denganwhile 1
karena mencoba untuk menghapusi
lagi;del
trik dengan built-in untuk mencukur beberapa:while 1:del id
.del id
tidak berfungsi. Anda tidak dapat menghapus bawaan seperti itu .Jelly ,
32 byteMembunuh dirinya sendiri dengan kehabisan memori. Lokal melakukannya setelah ~ 100 detik.
Cobalah online! (sertifikat kematian di laci Debug )
Bagaimana itu bekerja
Beberapa iterasi pertama menghasilkan:
Setelah itu, menjadi sangat buruk, sangat cepat.
sumber
V , 2 byte
Cobalah online!
Ini adalah tantangan sempurna untuk V karena saya sudah melakukan itu sepanjang waktu! Faktanya, V bahkan tidak memiliki kondisional, ia hanya memiliki fungsi yang dapat memecah kesalahan. Dalam hal ini,
ò
berarti "ulangi selamanya" danl
berarti "bergerak ke kanan".Dalam buffer kosong (tanpa input) ini akan merusak pass pertama dan tidak menghasilkan output. Jika ada yang input, akan merusak setelah kami bergerak posting karakter terakhir dari input, dan output semua input (membuat ini juga program kucing)
sumber
l
berarti "bergerak ke kanan"? Bukan "movel
eft"?JavaScript (ES6), 13 byte
Ini adalah fungsi rekursif yang berjalan dengan baik sekali, lalu melempar
ReferenceError: a is not defined
dan berhenti.Berikut adalah versi 15-byte non-ES6:
Ini berjalan baik sekali, lalu melempar
TypeError: i is undefined
dan berhenti.sumber
Bash 4.2, 22 byte
Tidak berfungsi di TIO karena memiliki Bash 4.3, dan bug yang saya andalkan akhirnya diperbaiki.
Verifikasi
Ini macet setelah program mencoba untuk menghitung 2 63 mod -1 , yang macet di Bash 4.2 dan versi yang lebih lama karena bug yang dikenal.
sumber
PHP,
22212018 byteIni bergantung pada PHP yang memungkinkan seseorang untuk memberikan nama fungsi ke variabel dan mencoba menjalankannya.
Ini hanya menggabungkan nama
pi
fungsi dua kali. Ini membunuh PHP denganFatal Error: Uncaught Error: Call to undefined function pipi() in [...][...]
.Ini berfungsi mirip dengan jawaban lama saya.
Jawaban lama, 20 byte
PHP memungkinkan Anda untuk menambah karakter, menggunakan operator increment. Ini hanya berfungsi pada
a-z
jangkauan, tetapi cukup.Saya percaya ini memenuhi semua poin yang diperlukan dan loop tidak berjalan sekali.
Anda dapat melihat apakah karena Anda akan mendapatkan kesalahan
Fatal error: Function name must be a string
.Cara kerjanya, langkah demi langkah:
pi
untuk$x
.Karena
pi
sedang digunakan sebagai konstanta, PHP akan memeriksa jika ada.Karena tidak, PHP menampilkan pesan peringatan
Use of undefined constant pi - assumed 'pi'
(Pada dasarnya: karena konstanta tidak ada, diasumsikan sebagai string)$x()
.Karena
$x
memiliki nilaipi
, itu akan menjalankan fungsinyapi()
.$x
.$x
sekarang memiliki π, bukanpi
$x()
.Karena
$x
memiliki π, ia akan menjalankan fungsinya3.14159...()
.Fatal Error
.Terima kasih kepada @Titus untuk menemukan
pi()
fungsinya, menyelamatkan saya 1 byte!sumber
$x
untukabt
sebelum tubuh loop berjalan. Anda bisa memperbaikinya dengan menambah setelah loop.for($x=abs;;++$x)echo$x,$x();
untuk menguji. Seharusnya terlihatabs0abt Fatal error[...]
. Atau serupa.pi
bukanabs
. Itu bahkan tidak menghasilkan peringatan sebelum melemparkan fatal._
ini didefinisikan dalam beberapa sistem, tetapi tidak dapat diandalkan. Tetapi terima kasih telah menemukan itu!GNU sed ,
15 135 bytes-2 Terima kasih seshoumara
-8 Terima kasih kepada zeppelin
Ini dengan cepat kehabisan memori:
sumber
s:a\?:&a:g
? Ini 1 byte lebih sedikit dan menggandakan ukuran pola per iterasi juga.echo -n | sed 's:a\?:&a:g'
dan tidak mendapat hasil. Itu akan sama dengansed 's::a:'
yang tidak cocok dengan apa pun.echo -n
benar-benar tidak ada yang dilewatkan ke sed, tetapi sed tidak dapat memulai tanpa input oleh desain. Periksa tautan meta ini untuk melihat bahwa ituecho|sed
adalah cara yang diterima untuk memulai dan tantangan yang menerapkan aturan tidak ada input.R,
22 25 22 2018 byteSunting: Terima kasih kepada @Mego karena telah menunjukkan bahwa R tidak mendukung pengoptimalan panggilan ekor.
Sunting4: Menemukan solusi yang lebih pendek yang sederhana namun cukup rumit.
Jawabannya menggunakan variabel kebenaran boolean bawaan,
T
yang dikurangi dengan tak terbatas dalam loop berulang. Fungsils()
ini disebut setiap iterasi yang mencantumkan semua objek di lingkungan saat ini. Namun, argumen pertamaname
menentukan dari lingkungan mana untuk membuat daftar objek. Dari dokumentasi-R kami menemukan bahwa:Ini terutama berarti bahwa dalam iterasi pertama kita menjalankan
ls(-1)
yang akan kembalicharacter(0)
(standar ketika mencoba mengakses elemen yang tidak adaeverything-except-the-first
dari objek tipe karakter apa pun). Selama iterasi kedua,T
dikurangi oleh dua dan selanjutnya kami memanggills(-3)
yang pada gilirannya mengembalikan kesalahan:Ini karena kami mencoba membuat daftar
everything-except-the-third
elemen tetapi lingkungan lokal hanya berisi variabelT
pada titik ini (dengan demikian,ls()
akan mengembalikan daftar panjang1
pada iterasi ini) dan kesalahan dikembalikan.sumber
Befunge-93, 3 byte (mungkin 1 atau 0)
Cobalah online!
Pada iterasi pertama loop, stack kosong, yang setara dengan semua nol. Operasi
!
(bukan) dengan demikian mengubah tumpukan bagian atas menjadi 1, dan operasi%
(modulo) menghitung 0 mod 1, meninggalkan 0.!
Operasi berikutnya mengubah 0 ke 1 sebelum penghitung program membungkus dan memulai loop lagi.Pada iterasi kedua,
!
operasi pertama mengubah 1 yang sekarang di atas tumpukan menjadi 0.%
Operasi kemudian menghitung 0 mod 0, yang menghasilkan pembagian dengan kesalahan nol pada penerjemah referensi, dan dengan demikian menghentikan program.Ada juga jawaban 1 byte yang lebih membosankan, meskipun saya tidak yakin apakah ini dianggap valid.
Cobalah online!
"
Perintah ini memulai string, sehingga setiap ruang pada sisa baris didorong ke tumpukan sampai penghitung program membungkus dan menemukan"
lagi menutup string. Maka perlu membungkus kedua kalinya untuk mengulangi proses memulai string lain dan mendorong 79 spasi lain ke stack. Akhirnya ini akan kehabisan memori (perilaku penerjemah referensi) atau menghasilkan stack overflow.Sekarang jika Anda ingin benar-benar menjalankan aturan, ada juga solusi nol byte secara teknis.
Jika Anda mengambil putusan ini untuk mengartikan bahwa penerjemah mana pun mendefinisikan bahasa (seperti yang dilakukan banyak orang di sini), maka kita dapat mengasumsikan saat itu bahwa bahasa Befunge ditentukan oleh penerjemah ini . Dan salah satu "fitur" dari juru bahasa itu adalah bahwa ia mendorong nilai yang tidak ditentukan ke tumpukan untuk setiap loop dari playfield saat menjalankan program kosong. Diberi cukup waktu akhirnya akan kehabisan memori.
Seberapa cepat itu terjadi tergantung pada kecepatan komputer, memori yang tersedia, dan browser yang digunakan. Di komputer saya, saya menemukan bahwa Microsoft Edge bekerja paling baik, tetapi bahkan "hanya" menggunakan 500MB setelah dua menit. Tidak sampai sekitar tanda lima belas menit (dengan beberapa gigabyte digunakan) Edge memutuskan untuk membunuh proses dan menyegarkan tab. Jadi tidak mungkin untuk membuatnya di bawah batas waktu dua menit, tetapi dengan kondisi yang tepat yang belum tentu keluar dari pertanyaan.
sumber
SALAH, 8 byte
Saya sangat suka bahasa ini.
Ini mendorong a
1
, lalu[$][.]#
loop sementara$
true (duplikat tumpukan) dan (.
) menampilkannya. Penerjemah ini lumpuh setelah1
cetakan tunggal (bukti loop berjalan setidaknya satu kali.) Tampaknya ada bug dalam penafsir ini. Program 9-byte berikut harus bekerja di semua penerjemah yang memenuhi syarat:sumber
.
mengosongkan tumpukan data, sementara di loop kedua$
mencoba untuk menduplikasi elemen atas tumpukan kosong, yang seharusnya mengarah pada kesalahan (well, penerjemah saya tidak ). Versi kedua tidak boleh valid karena bahkan tidak menyelesaikan loop pertama karena sudah mencoba mengakses tumpukan kosong sebelum waktunya.C, 21 byte
Di sini
i
dijamin untuk memulai sebagai0
.Dapat dikonfirmasi bahwa ini berjalan sekali seperti ini:
Yang, di mesin saya, menghasilkan:
Solusi rekursif terpendek yang dapat saya temukan adalah 22 byte :
gcc
hanya melakukan eliminasi panggilan ekor pada-O2
atau lebih tinggi, pada titik mana kita perlu memanggil fungsi sepertiputs
untuk mencegah semuanya dioptimalkan. Konfirmasi bahwa ini berfungsi:Berikut ini adalah program lengkap, yang mengasumsikan bahwa ia dipanggil tanpa argumen baris perintah, sebesar 22 byte :
yang setara dengan fungsi dengan panjang yang sama:
sumber
MATLAB, 18 byte
Ini dapat dijalankan sebagai skrip:
Iterasi pertama baik-baik saja, karena
j(1)
itu adil1
. Iterasi kedua lumpuh dengan kesalahan array di luar batas,j(2)
melebihi dimensij
, yang merupakan array 1x1.Ini juga dapat dijalankan sebagai skrip, tetapi hanya berfungsi saat pertama kali Anda menjalankannya. Namun, itu adalah penyalahgunaan konstanta MATLAB yang cukup lucu yang saya pikir saya akan memasukkannya. Ini juga 18 byte.
Saat dijalankan di ruang kerja yang variabelnya
i
belum didefinisikan, ini diasumsikani
sebagai unit imajiner, jadii/i = 1
. Di loop pertama, tugasi={}
membuat array sel kosong yang disebuti
. Pada iterasi kedua, loop keluar dengan "Operator tidak ditentukan '/' untuk argumen input tipe 'sel'."sumber
j(2)
biasanya akan memberikan matriks 2-oleh-2 dengan0+1i
Perl 6 , 13 byte
Mengindeks integer literal dalam infinite loop.
Bergantung pada fakta bahwa pada nilai skalar, sintaks pengindeksan array dapat digunakan dengan indeks
0
(mengembalikan nilai itu sendiri), tetapi melemparkanIndex out of range
kesalahan untuk indeks lainnya.sumber
QBasic, 17 byte
Kode ini sangat aneh.
Bagaimana itu bekerja
Dalam QBasic, variabel diinisialisasi. Variabel reguler tanpa akhiran tipe apa pun, seperti di
i
sini, diinisialisasi ke nol.Kecuali jika Anda mencoba untuk menyalin ke variabel itu seperti sebuah array ... dalam hal ini, itu adalah array dari 11 nol. *
Oleh karena itu, pertama kali melalui loop,
i
adalah0
dana
merupakan array.a(i)
memberikan elemen nol dari array (yang0
). Semua baik dan bagus. Kami mengaturi
ke11
dan loop. Tapi sekarang11
bukan indeks yang valid untuk arraya
, dan program berhentiSubscript out of range
.Versi 19 byte yang lebih baik menunjukkan apa yang terjadi:
Ini akan mencetak
0
sebelas kali sebelum kesalahan.* Secara konseptual, ini adalah array 10 elemen. Sebagian besar hal dalam QBasic adalah 1-diindeks, tetapi array tidak, mungkin karena alasan implementasi. Untuk membuat segala sesuatunya berfungsi seperti yang diharapkan oleh para programmer, QBasic membuat entri tambahan sehingga Anda dapat menggunakan indeks 1 hingga 10. Namun indeks 0 masih dapat diakses dengan sempurna. Sosok pergi.
sumber
i=1+a(i)
?i=i+1+a(i)
. Kalau tidak, indeks tidak akan pernah naik1
, yang bukan merupakan kesalahan.Haskell, 15 byte
f"a"
berjalan secara rekursif melalui string "a" dengan menjatuhkan char pertama dan akhirnya gagal pada akhirnya denganNon-exhaustive patterns in function f
pengecualian, karenaf
hanya ditentukan untuk string yang tidak kosong.sumber
C #,
7138 byteKarena Anda memberikan contoh dalam C # di sini versi lain golf
Dan terima kasih kepada pinkfloydx33
Lebih pendek daripada
Parse.ToString()
dan bahkan daripada yangParse($"{c--}")
saya buang secara mentalchecked
karena kata kunci terlalu panjang. Sulit itu tentu saja lebih pendek dariParse(c.ToString())
Jawaban asli
Ini akan memulai
c=0
kemudian pengurangan itu, ketikac=-1
parauint.Parse
akan menyebabkan:Versi tidak dikoleksi dan memverifikasi bahwa loop berjalan setidaknya sekali
sumber
for(int c=0;;)uint.Parse($"{c--}");
checked{for(uint c=1;;)c--;}
CJam , 4 byte
Cobalah online!
Iterasi pertama dari
{}g
loop kosong muncul1
, yang memberitahu itu untuk melanjutkan. Iterasi kedua mencoba memunculkan kondisional lain, tetapi tumpukan kosong, sehingga program macet.sumber
rakitan x86 (AT&T sintaks), 40 byte
Deklarasikan fungsi f yang membagi 1 dengan 1 pada iterasi pertama kemudian mencoba untuk membagi 0 dengan 0 dan kesalahan.
sumber
CJam, 4 byte
P`
menghasilkan string3.141592653589793
.:~
mengevaluasi setiap karakter.3
adalah kode yang valid di CJam yang hanya mengembalikan 3. Dalam iterasi berikutnya,.
menyebabkan kesalahan karena memerlukan angka atau operator yang mengikutinya.sumber
Ruby, 14 Bytes
Keluar karena
ZeroDivisionError: divided by 0
$. The current input line number of the last file that was read
Ruby Docs
sumber
> <> , 3 byte
Coba di sini!
Penjelasan
sumber
Batch,
2220 bytePenjelasan
Ini adalah infinite loop yang menambahkan
1
ke string yang awalnya kosong. Akhirnya ini akan melewati panjang string maksimum 8192 dan crash. Di komputer saya, ini membutuhkan waktu sekitar 30 detik.sumber
JavaScript, 9 byte
Ini berjalan sekali, lalu melempar
ReferenceError: i is not defined
yang menghentikan loop.Mengambil contoh berikut, apakah
<increment>
akhir dari siklus pertama atau awal dari siklus kedua?1 / Aku melihatnya
Setelah berpindah dari baris 0 ke baris 3 lalu kembali ke baris 0, rasanya seperti siklus penuh telah selesai.
Itu akan
<increment>
menjadi awal dari siklus kedua.- Siklus pertama:
<init>
-><test>
-><statement>
- Siklus kedua:
<increment>
-><test>
-><statement>
2 /
While
setaraDalam setara ini
while
yang<increment>
adalah akhir dari siklus pertama dan rasanya seperti itu sama denganfor
.Itu akan membuat
<increment>
akhir dari siklus pertama.- Siklus pertama:
<test>
-><statement>
-><increment>
- Siklus kedua:
<test>
-><statement>
-><increment>
3 / Pernyataan dijumpai dua kali
Siklus penuh selesai ketika sebuah pernyataan dijumpai dua kali.
Pernyataan pertama yang ditemui dua kali adalah
<test>
.Itu akan membuat
<increment>
akhir dari siklus pertama.- Siklus pertama:
<test>
-><statement>
-><increment>
- Siklus kedua:
<test>
-><statement>
-><increment>
4 / Ini pengaturan
The
<init>
hanya menyiapkan apa saja yang diperlukan untuk siklus pertama.The
<increment>
hanya menyiapkan apa saja yang diperlukan untuk siklus kedua.Itu akan
<increment>
menjadi awal dari siklus kedua.- Siklus pertama:
<init as a setup>
-><test>
-><statement>
- Siklus kedua:
<increment as a setup>
-><test>
-><statement>
Spesifikasi Bahasa ECMAScript® 2016
Runtime of
for(<init>;<test>;<increment>)<statement>;
Ada tiga bentuk, jadi saya mengambil yang terpendek di sini, tidak ada perbedaan:
- Apapun
<init>
itu bukan bagian dari iterasi pertama.- Apa yang relevan ada di ForBodyEvaluation.
Rincian ForBodyEvaluation (
<test>
,<increment>
,<statement>
, «», labelSet)6 / Aku melihatnya
Siklus penuh menjalankan penuh bagian berulang.
Itu akan membuat
<increment>
akhir dari siklus pertama.- Siklus pertama:
<test>
-><statement>
-><increment>
/ Dengan kata lain dari baris 3 ke baris 13- Siklus kedua:
<test>
-><statement>
-><increment>
/ Dengan kata lain dari baris 3 ke baris 137 / A cycle adalah iterasi
Sebuah siklus dimulai dengan
CreatePerIterationEnvironment
.Jadi ketika
CreatePerIterationEnvironment
ditemui siklus baru dimulai, dengan demikian mengakhiri yang sebelumnya.Itu akan
<increment>
menjadi awal dari siklus kedua.- Siklus pertama:
<test>
-><statement>
/ Dengan kata lain dari baris 1 ke baris 9- Siklus kedua:
<increment>
-><test>
-><statement>
/ Dengan kata lain dari perulangan baris 10 hingga baris 9Apakah
<increment>
akhir dari siklus pertama atau awal dari siklus kedua?sumber
for(a;b;c)d;
kira-kira setara dengana;while(b){d;c;}
, saya cenderung mengatakan bahwa kesalahan masih terlempar pada iterasi pertama (sebelum kondisi loop diperiksa untuk kedua kalinya).INTERCAL , 12 byte
Cobalah online!
NEXT
adalah perintah aliran kontrol utama INTERCAL-72. (Kemudian revisi diperkenalkanCOME FROM
, yang menjadi lebih terkenal, tetapi itu tidak ada dalam versi asli bahasa tersebut; dan semua implementasi INTERCAL yang telah selesai, saya menyadari dukunganNEXT
untuk kompatibilitas mundur, dengan semua kecuali satu yang memungkinkan dukungan untuk itu secara default. Jadi Saya tidak merasa perlu nama INTERCAL-72 khusus dalam judul.)Saat menggunakan
NEXT
untuk membentuk lingkaran, Anda seharusnya menggunakanRESUME
atauFORGET
untuk membebaskan ruang yang digunakan untuk mengingat di mana program telah;RESUME
secara surut membuatnyaNEXT
menjadi sesuatu yang mirip dengan pemanggilan fungsi (meskipun Anda dapat kembali dari fungsi selain yang Anda gunakan) sementaraFORGET
membuatnya menjadi sesuatu yang lebih mirip dengan pernyataan GOTO. Jika Anda tidak melakukan keduanya (dan program ini tidak), program akan macet setelah 80 iterasi (perilaku ini sebenarnya ditentukan dalam spesifikasi INTERCAL).Agak ambigu apakah ini dianggap sebagai rekursi yang tidak terikat (tidak diizinkan dalam pertanyaan); Anda tentu saja dapat menggunakan semacam ini
NEXT
untuk mengimplementasikan pemanggilan fungsi, yang dalam hal ini akan secara efektif menjadi fungsi rekursif, tetapi tidak ada informasi yang cukup di sini untuk menentukan apakah kita melakukan pemanggilan fungsi atau tidak. Setidaknya, saya tetap memposting ini karena tidak melanggar aturan, dan implementasi INTERCAL yang mengoptimalkan "tail call" tidak hanya akan melanggar spesifikasi, tetapi juga menyebabkan sebagian besar program yang ada rusak, karena kembali dari "fungsi yang salah" adalah cara utama untuk melakukan yang setara dengan pernyataan IF.Inilah pesan kesalahan yang dihasilkan, seperti yang dihasilkan oleh C-INTERCAL:
(Perhatikan bahwa baris kedua diindentasi dengan tab, dan yang ketiga dengan delapan spasi. Ini terlihat benar di terminal, atau di hampir semua program yang memiliki penghentian tab pada kelipatan 8. Namun, Penurunan harga memiliki penghentian tab di kelipatan dari empat, melanggar asumsi yang dibuat oleh kebanyakan program yang lebih lama tentang tab, jadi pesan kesalahannya sedikit salah format di sini.)
sumber
CORRECT SOURCE AND RESUBNIT
? Seperti dalam salah ketik pada pesan kesalahan C-INTERCAL asli?Pyth, 3 byte
Cobalah online.
W1
hanyawhile 1:
dengan Python. Badan loop mencetak baris yang dibaca dari STDIN, yang macet untuk iterasi kedua ketika kode dijalankan dengan input kosong.Jika loop menggunakan
#
(loop-hingga-error) dilarang (saya berasumsi demikian), saya pikir ini adalah yang terpendek yang bisa didapat.sumber
Python 3, 29 byte
Sangat sederhana. Pada panggilan kedua ke x, saya tidak ada di sana, dan Python mengeluh tentang hal itu.
sumber
Labirin , 3 byte
Cobalah online!
Seperti kebanyakan bahasa 2D, Labyrinth tidak memiliki konstruksi perulangan eksplisit. Sebaliknya, kode apa pun yang ditata sedemikian rupa sehingga dijalankan beberapa kali berturut-turut adalah loop dalam bahasa-bahasa ini. Untuk kasus Labyrinth, program linier sederhana bertindak sebagai loop, karena penunjuk instruksi akan memantul ke sana kemari. Jika programnya adalah
abc
(untuk beberapa perintaha
,b
danc
), maka eksekusi yang sebenarnya akanabcbabcbabcb...
berjalanabcb
di infinite loop.Adapun mengapa program khusus ini crash pada iterasi kedua dari loop ini, di sini adalah apa yang dilakukan perintah individu. Perhatikan bahwa tumpukan Labyrinth berisi jumlah nol tak terbatas yang tersirat di bagian bawah:
sumber
Bash, 11 (Borderline tidak bersaing)
Script ini secara rekursif mengeksekusi dirinya sendiri, menambahkan
1
argumen yang diteruskan pada setiap iterasi. Saya pikir ini dianggap sebagai TCO karena exec menggunakan kembali ruang proses tetapi tidak memakan tumpukan. Ini adalah batas yang tidak bersaing karena butuh sekitar 10 menit sebelum terbunuh di mesin saya - YMMV.sumber
exec $0 1$@$@
berakhir jauh lebih cepat tetapi dua karakter lebih lama.cmd, 34 byte
Ini akan menggilir
%i
dari 0 hingga 10. Perintah (kuno)color
akan dengan senang hati menerima argumen apa pun yang memiliki 2 (hexa) angka desimal. Dengan argumen100
itu akan gagal, mencetak pesan bantuan dan pengaturanERRORLEVEL
ke 1.Bukti loop berjalan setidaknya sekali: Warna shell Anda akan berbeda!
sumber