Ваша задача состоит в том, чтобы написать полную программу или функцию , которая не принимает никакого ввода и запускает любой тип цикла ( while
, for
, foreach
, do
, do-while
, do-loop
, goto
, рекурсия и т.д.) , который закончится в возникновении ошибки, а это означает , что программа должна остановить себя бег и Выход.
Правила:
- Ошибка должна быть ошибкой во время выполнения, необработанным исключением или чем-то, что приводит к завершению самой программы.
- Ошибка должна вызывать остановку и выход из программы без явного
exit;
(или эквивалентного) вызова в какой-то момент. - Сообщения типа
Warning:
,Notice:
и т. Д., Которые не приводят к завершению программы, являются недействительными. Например, в PHP деление на ноль выдаетWarning
сообщение, но программа не остановится и все равно будет работать, это неверный ответ. - Цикл должен выполняться как минимум один полный цикл. Другими словами, ошибка может произойти, начиная со второго цикла и далее. Это делается для того, чтобы избежать возникновения ошибки при использовании неправильного синтаксиса кода: код должен быть синтаксически правильным.
- Цикл может быть даже бесконечным (пример
for(;;);
), если он соблюдает вышеупомянутые правила, но должен занять не более 2 минут, чтобы завершиться ошибкой во время выполнения. - Рекурсия без Tail Call Optimization недействительна ( 1 , 2 ).
- Это код-гольф, поэтому выигрывает самый короткий код.
- Стандартные лазейки запрещены.
Пример 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
Leaderboard:
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>
Спасибо Мартину Эндеру за фрагмент таблицы лидеров
for(a;b;c)d;
, после чего постановка заканчивается первым циклом? Допустимо ли нарушать первую оценкуc
утверждения?a, b, d, c, b, d, c, ...
,b
это начало цикла, и должен быть запущен по крайней мере , во второй раз.Ответы:
MATL ,
51 байтИдея взята из CJam ответа @ MartinEnder
Попробуйте онлайн!
Старая версия
Попробуйте онлайн!
источник
Python, 16 байт
Неинтересный подход с 0 делением:
Первая итерация вычисляет
1 / 1
, которая отлично работает. Вторая итерация пытается вычислить0 / 0
, в результате чегоZeroDivisionError
выбрасывается.17 байт (личный фаворит)
Первоначально,
i=1
что является правдой, поэтому цикл введен.При первом запуске цикла переменная
i
удаляется.Это означает, что, во второй раз,
i
больше не является переменной и, следовательно, его оценка не удается сNameError: name 'i' is not defined.
Другое 15-байтовое решение будет
def _():_()
(новая строка)_()
, потому что Python не оптимизирует хвостовую рекурсию. Однако это нарушает правило № 6.источник
while i
с ,while 1
потому что он пытается удалитьi
снова;del
трюк с встроенным сбрить еще несколько:while 1:del id
.del id
не работает. Вы не можете удалить встроенные таким образом .Желе ,
32 байтаУбивает себя, исчерпав память. Локально делает это через ~ 100 секунд.
Попробуйте онлайн! (свидетельство о смерти в ящике отладки )
Как это устроено
Первые несколько итераций дают:
После этого это становится очень уродливым, очень быстрым.
источник
V , 2 байта
Попробуйте онлайн!
Это идеальный вызов для V, потому что я уже делаю это все время! На самом деле, V даже не имеет никаких условных выражений, у него есть только функции, которые выходят из строя при ошибке. В этом случае
ò
означает «повторить навсегда» иl
означает «двигаться вправо».В пустом буфере (без ввода) это прервется при первом проходе и не даст вывода. Если есть вход, он сломается , как только мы переходим выкладываю последний символ ввода и вывода всех входных данных (делая это также программу для кошек)
источник
l
значит «двигайся вправо»? Не "двигайсяl
наверх"?JavaScript (ES6), 13 байт
Это рекурсивная функция, которая нормально работает один раз, затем выдает
ReferenceError: a is not defined
и завершает работу.Вот 15-байтовая версия без ES6:
Это работает нормально один раз, затем бросает
TypeError: i is undefined
и выходит.источник
Баш 4.2, 22 байта
Не работает в TIO, потому что он имеет Bash 4.3, и ошибка, на которую я полагаюсь, была окончательно исправлена.
верификация
Это происходит сбой, когда программа пытается вычислить 2 63 mod -1 , что приводит к сбою в Bash 4.2 и более старых версиях из-за известной ошибки.
источник
PHP,
22212018 байтЭто опирается на PHP, позволяющий дать имя функции переменной и попытаться запустить ее.
Это просто объединяет имя
pi
функции дважды. Это убивает PHP сFatal Error: Uncaught Error: Call to undefined function pipi() in [...][...]
.Это работает как мой старый ответ.
Старый ответ, 20 байт
PHP позволяет увеличивать символы, используя оператор приращения. Работает только на
a-z
дальности, но достаточно.Я считаю, что это удовлетворяет всем необходимым пунктам, и цикл действительно запускается один раз.
Вы можете увидеть, потому что вы получите ошибку
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
.Спасибо @Titus за то, что нашли
pi()
функцию, сэкономив мне 1 байт!источник
$x
доabt
того, как тело цикла запускается. Вы можете исправить это, увеличивая после цикла.for($x=abs;;++$x)echo$x,$x();
тестирование. Это должно показатьabs0abt Fatal error[...]
. Или похожие.pi
вместоabs
. Это даже не дает предупреждение, прежде чем он бросает роковой._
определена в некоторых системах, но она ненадежна. Но спасибо, что нашли это!GNU sed ,
15 135 байт-2 благодаря сешумаре
-8 благодаря дирижаблю
Это быстро заканчивается памятью:
источник
s:a\?:&a:g
? Он меньше на 1 байт и также удваивает размер шаблона за одну итерацию.echo -n | sed 's:a\?:&a:g'
и не получил выходной. Это было бы так же, как то,sed 's::a:'
что не соответствует ничему.echo -n
sed ничего не передается в sed, но sed не может начаться без ввода дизайна. Проверьте эту мета-ссылку, чтобы увидеть, чтоecho|sed
это приемлемый способ запуска sed для вызовов, вызывающих правило отсутствия ввода.R,
22 25 22 2018 байтРедактировать: Спасибо @Mego за указание, что R не поддерживает оптимизацию хвостового вызова.
Edit4: нашел еще более короткое решение, простое, но довольно сложное.
В ответе используется встроенная логическая переменная truey,
T
которая бесконечно уменьшается в повторяющемся цикле. Функцияls()
вызывается на каждой итерации, в которой перечислены все объекты в текущей среде. Тем не менее, первый аргументname
указывает, из какой среды, из какого списка объектов. Из R-документации мы находим, что:Это в основном означает, что в первой итерации мы запускаем,
ls(-1)
который должен возвращатьcharacter(0)
(стандартный при попытке получить доступ к несуществующемуeverything-except-the-first
элементу любого объекта символьного типа). Во время второй итерацииT
уменьшается на два, и мы впоследствии вызываем,ls(-3)
что, в свою очередь, возвращает ошибку:Это потому, что мы пытаемся перечислить
everything-except-the-third
элемент, но локальная среда содержит только переменнуюT
в этой точке (как таковая,ls()
будет возвращать список длины1
на этой итерации), и возвращается ошибка.источник
Befunge-93, 3 байта (возможно 1 или 0)
Попробуйте онлайн!
На первой итерации цикла стек пуст, что является эквивалентом всех нулей. Операция
!
(not), таким образом, преобразует верхнюю часть стека в 1, а%
операция (modulo) вычисляет 0 mod 1, оставляя 0. Следующая!
операция преобразует это 0 в 1 до того, как счетчик программ обернется и снова начнет цикл.На второй итерации первые
!
операции преобразуют 1, который сейчас находится на вершине стека, в 0. Затем%
операция вычисляет 0 mod 0, что приводит к ошибке деления на ноль в эталонном интерпретаторе и, таким образом, завершает программу.Есть также более скучный 1-байтовый ответ, хотя я не уверен, что это считается действительным.
Попробуйте онлайн!
Эта
"
команда запускает строку, поэтому каждый пробел в оставшейся части строки помещается в стек до тех пор, пока счетчик программы не перевернется и не встретит"
снова закрывающую строку. Затем нужно будет обернуть его во второй раз, чтобы повторить процесс, начинающий другую строку и помещающий в стек еще 79 пробелов. В конечном итоге это либо исчерпает память (поведение эталонного интерпретатора), либо приведет к переполнению стека.Теперь, если вы действительно хотите придерживаться правил, технически есть решение с нулевым байтом.
Если вы принимаете это постановление для обозначения того, что любой интерпретатор определяет язык (как многие здесь делают), то мы можем предположить, что язык Befunge определен этим интерпретатором . И одна из «особенностей» этого интерпретатора заключается в том, что он помещает неопределенное значение в стек для каждого цикла игрового поля при выполнении пустой программы. Если у вас будет достаточно времени, в конце концов не хватит памяти.
Как быстро это произойдет, будет зависеть от скорости компьютера, доступной памяти и используемого браузера. На моей машине я обнаружил, что Microsoft Edge работает лучше всего, но даже тогда он «только» использовал 500 МБ через две минуты. Только после пятнадцатиминутной отметки (с использованием нескольких гигабайт) Эдж решил убить процесс и обновить вкладку. Так что вряд ли удастся сделать это в течение двухминутного срока, но с правильными условиями, которые не обязательно могут быть исключены.
источник
ЛОЖЬ, 8 байтов
Мне очень нравится этот язык.
Это нажимает на a
1
, затем[$][.]#
зацикливается, пока$
true (дублирует вершину стека) и (.
) выводит его. Этот интерпретатор аварийно завершает работу после того, как сингл1
напечатан (свидетельство того, что цикл запущен хотя бы один раз). Кажется, это ошибка в этом интерпретаторе. Следующая 9-байтовая программа должна работать во всех совместимых интерпретаторах:источник
.
очищает стек данных, а во втором цикле$
пытается дублировать верхний элемент пустого стека, что должно привести к ошибке (ну, мой интерпретатор делает ). Вторая версия не должна быть действительной, потому что она даже не завершает первый цикл, потому что она уже пытается получить доступ к пустому стеку преждевременно.C, 21 байт
Здесь
i
гарантированно начать как0
.Можно подтвердить, что это работает так:
Что на моей машине приводит к:
Самое короткое рекурсивное решение, которое я могу найти, составляет 22 байта :
gcc
только исключение хвостового вызова на уровне-O2
или выше, и в этот момент нам нужно вызвать функцию, похожуюputs
на предотвращение оптимизации всего объекта. Подтверждение, что это работает:Ниже приведена полная программа, которая предполагает, что она вызывается без аргументов командной строки, в 22 байта :
что эквивалентно функции той же длины:
источник
MATLAB, 18 байт
Это можно запустить как скрипт:
Первая итерация в порядке, так как
j(1)
это просто1
. Вторая итерация завершается с ошибкой выхода за пределы массива, котораяj(2)
превышает размерыj
, равные массиву 1x1.Это также можно запустить как скрипт, но он работает только при первом запуске. Тем не менее, это довольно смешное злоупотребление предопределенными константами MATLAB, и я решил включить его. Это также 18 байтов.
При запуске в рабочей области, в которой переменная
i
еще не определена, предполагается,i
что это мнимая единица, поэтомуi/i = 1
. В первом цикле присваиваниеi={}
создает пустой массив ячеек с именемi
. На второй итерации цикл завершается с «неопределенным оператором» / для входных аргументов типа «ячейка».источник
j(2)
обычно0+1i
Perl 6 , 13 байт
Индексирует целочисленный литерал в бесконечном цикле.
Полагается на то, что для скалярных значений синтаксис индексации массива может использоваться с индексом
0
(возвращая само значение), но выдаетIndex out of range
ошибку для любого другого индекса.источник
QBasic, 17 байт
Этот код очень странный.
Как это устроено
В QBasic переменные предварительно инициализированы. Обычная переменная без суффикса типа, как
i
здесь, предварительно инициализируется нулем.За исключением случаев, когда вы пытаетесь вписать в эту переменную как массив ... в этом случае это массив из 11 нулей. *
В первый раз через цикл, следовательно,
i
есть0
иa
есть массив.a(i)
дает нулевой элемент массива (который есть0
). Все хорошо. Мы установилиi
в11
и петли. Но теперь11
это недопустимый индекс для массиваa
, и программа останавливается сSubscript out of range
.19-байтовая версия, которая лучше показывает, что происходит:
Это напечатает
0
одиннадцать раз перед ошибкой.* Концептуально это массив из 10 элементов. Большинство вещей в QBasic являются 1-индексированными, а массивы - нет, возможно, по причинам реализации. Чтобы программисты работали так, как ожидалось, QBasic добавляет дополнительную запись, так что вы можете использовать индексы от 1 до 10. Индекс 0, тем не менее, все еще идеально доступен. Пойди разберись.
источник
i=1+a(i)
?i=i+1+a(i)
. В противном случае индекс никогда не поднимется выше1
, что не является ошибкой.Haskell, 15 байт
f"a"
запускается рекурсивно через строку «a», отбрасывая первый символ, и в конце концов завершается с ошибкой в конце, заNon-exhaustive patterns in function f
исключением того, чтоf
определено только для непустых строк.источник
C #,
7138 байтТак как вы привели пример в C # здесь другая версия игры в гольф
И благодаря Pinkfloydx33
Короче
Parse.ToString()
и даже меньше, чемParse($"{c--}")
я мысленно бросил,checked
потому что это слишком длинное ключевое слово. Это, конечно, короче, чемParse(c.ToString())
Оригинальный ответ
Это запустит
c=0
затем уменьшить его, когда будет вызвать:c=-1
uint.Parse
Неуправляемая версия и проверка того, что цикл запускается хотя бы один раз
источник
for(int c=0;;)uint.Parse($"{c--}");
checked{for(uint c=1;;)c--;}
CJam , 4 байта
Попробуйте онлайн!
Первая итерация пустого
{}g
цикла выдает сообщение о том1
, что он должен продолжаться. Вторая итерация пытается выдвинуть другое условие, но стек пуст, поэтому программа вылетает.источник
сборка x86 (AT & T синтаксис), 40 байт
Объявляет функцию f, которая делит 1 на 1 на своей первой итерации, затем пытается разделить 0 на 0 и ошибки.
источник
CJam, 4 байта
P`
генерирует строку3.141592653589793
.:~
оценивает каждого персонажа.3
является допустимым кодом в CJam, который просто возвращает 3. На следующей итерации.
вызывает ошибку, потому что для этого требуется цифра или оператор после нее.источник
Рубин, 14 байт
Выходы из-за
ZeroDivisionError: divided by 0
$. The current input line number of the last file that was read
Рубиновые Документы
источник
> <> , 3 байта
Попробуй это здесь!
объяснение
источник
Пакет,
2220 байтовобъяснение
Это бесконечный цикл, который добавляет
1
к изначально пустой строке. В конечном итоге это пройдет максимальную длину строки 8192 и произойдет сбой. На моей машине это занимает около 30 секунд.источник
JavaScript, 9 байт
Это выполняется один раз, затем бросает,
ReferenceError: i is not defined
что останавливает цикл.Возьмем в качестве примера следующее:
<increment>
конец первого цикла или начало второго цикла?1 / Я вижу это
После перехода от строки 0 к строке 3 и возврата к строке 0 создается ощущение, что полный цикл завершен.
Это сделало бы
<increment>
начало второго цикла.- Первый цикл:
<init>
-><test>
-><statement>
- Второй цикл:
<increment>
-><test>
-><statement>
2 /
While
эквивалентВ этой эквивалентной
while
КНИГЕ<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>
это не часть первой итерации.- Что актуально в ForBodyEvaluation.
Детали ForBodyEvaluation (
<test>
,<increment>
,<statement>
, «», labelSet)6 / Я вижу это
Полный цикл, полный цикл повторной части.
Это сделало бы
<increment>
конец первого цикла.- Первый цикл:
<test>
-><statement>
-><increment>
/ Другими словами от строки 3 до строки 13- Второй цикл:
<test>
-><statement>
-><increment>
/ Другими словами от строки 3 до строки 137 / цикл - это итерация
Цикл начинается с
CreatePerIterationEnvironment
.Таким образом, когда
CreatePerIterationEnvironment
встречается, начинается новый цикл, заканчивая тем самым предыдущий.Это сделало бы
<increment>
начало второго цикла.- Первый цикл:
<test>
-><statement>
/ Другими словами от строки 1 до строки 9- Второй цикл:
<increment>
-><test>
-><statement>
/ Другими словами от строки 10 до цикла 9Является ли
<increment>
конец первого цикла или начало второго цикла?источник
for(a;b;c)d;
это примерно эквивалентноa;while(b){d;c;}
, я склонен сказать, что ошибка все еще генерируется в первой итерации (до того, как условие цикла проверяется во второй раз).INTERCAL , 12 байт
Попробуйте онлайн!
NEXT
является основной командой управления потоком INTERCAL-72. (Позже были представлены ревизииCOME FROM
, которые стали более известными, но их не было в оригинальной версии языка; и во всех законченных реализациях INTERCAL мне известна поддержкаNEXT
обратной совместимости, причем все, кроме одной, поддерживают ее по умолчанию. Я не чувствую необходимости называть INTERCAL-72 конкретно в названии.)При использовании
NEXT
для формирования цикла, вы должны использоватьRESUME
илиFORGET
для того, чтобы освободить пространство, которое он использует, чтобы запомнить, где была программа;RESUME
задним числом превращает этоNEXT
во что-то похожее на вызов функции (хотя вы можете возвращаться из функций, отличных от той, в которой вы находитесь), тогда какFORGET
превращает это во что-то более похожее на оператор GOTO. Если вы этого не сделаете (а эта программа этого не делает), то программа завершится сбоем после 80 итераций (это поведение фактически указано в спецификации INTERCAL).Несколько сомнительно, считается ли это неограниченной рекурсией (запрещено в вопросе); Вы, конечно, можете использовать этот вид
NEXT
для реализации вызова функции, в этом случае это будет рекурсивная функция, но здесь недостаточно информации, чтобы определить, делаем ли мы вызов функции или нет. По крайней мере, я отправляю это в любом случае, потому что это не однозначно нарушает правила, а реализация INTERCAL, которая оптимизировала «хвостовой вызов», не только нарушила бы спецификацию, но и привела бы к разрыву большинства существующих программ, потому что возврат из «неправильная функция» - это основной способ сделать эквивалент оператора IF.Вот результирующее сообщение об ошибке, сгенерированное C-INTERCAL:
(Обратите внимание, что вторая строка имеет отступ с табуляцией, а третья - с восемью пробелами. Это выглядит правильно в терминале или почти во всех программах, у которых табуляция останавливается с кратными 8. Однако у Markdown есть табуляции с кратными В-четвертых, нарушая допущения, которые большинство старых программ делают относительно вкладок, поэтому сообщение об ошибке здесь немного искажено.)
источник
CORRECT SOURCE AND RESUBNIT
? Как в опечатке в исходном C-INTERCAL сообщении об ошибке?Pyth, 3 байта
Попробуйте онлайн.
W1
простоwhile 1:
в Python. Тело цикла печатает строку, считанную из STDIN, которая вылетает во второй итерации, когда код запускается с пустым вводом.Если использование циклов
#
(loop-till-error) запрещено (я так полагаю), я думаю, что это самый короткий путь, который он может получить.источник
Python 3, 29 байт
Действительно просто. При втором вызове x меня там нет, и Python жалуется на это.
источник
Лабиринт , 3 байта
Попробуйте онлайн!
Как и большинство 2D-языков, Labyrinth не имеет явных циклических конструкций. Вместо этого любой код, который выложен так, что он выполняется несколько раз подряд, является циклом в этих языках. Для случая Лабиринта простая линейная программа действует как цикл, потому что указатель инструкции будет подпрыгивать туда-сюда. Если программа
abc
(для некоторых командa
,b
аc
), то фактическое выполнение будетabcbabcbabcb...
так она работаетabcb
в бесконечном цикле.Что касается того, почему эта конкретная программа дает сбой на второй итерации этого цикла, вот что делают отдельные команды. Обратите внимание, что стек Лабиринта содержит неявное бесконечное количество нулей внизу:
источник
Баш, 11 (граница неконкурентная)
Этот скрипт рекурсивно выполняет сам себя, добавляя
1
аргументы, передаваемые на каждой итерации. Я думаю, что это считается TCO, потому что exec повторно использует пространство процесса, но не поглощает стек. Это неконкурентный рубеж, потому что прошло около 10 минут, прежде чем меня убили на моей машине - YMMV.источник
exec $0 1$@$@
заканчивается намного быстрее, но на два символа длиннее.cmd, 34 байта
Это будет цикл
%i
от 0 до 10. (Древняя)color
команда с радостью примет любой аргумент, который имеет 2 (шестнадцатеричные) десятичные цифры. С аргументом100
он потерпит неудачу, распечатав сообщение справки и установивERRORLEVEL
1.Доказательство того, что цикл запущен хотя бы один раз: цвет вашей оболочки будет другим!
источник