Давайте рассмотрим типичный цикл, который обычно выполняет 8 итераций:
for (int x=0; x<8; ++x);
Вы должны сделать это бесконечным!
Это конкурс популярности для всех языков, которые поддерживают такую форму for
цикла. Таким образом, решение с наивысшим баллом (положительные отзывы минус отрицательные) побеждает.
Если у вашего языка есть другая форма for
цикла, но вы уверены, что вы можете сделать что-то классное с ним, не стесняйтесь опубликовать ответ и пометить его как неконкурентный. Я оставляю за собой право увеличивать объем доступных конструкций и языков, но он никогда не будет сокращен, так что не бойтесь отбрасывать ранее правильные решения.
Что такое решение?
Решение состоит из двух программ.
Первая программа - это чистая программа. Это типичная программа на вашем языке с for
циклом из 8 итераций. Это должна быть нормальная программа, написать любой разработчик. Никаких специальных взломов для целей подготовки. Например:
int main()
{
for (int x=0; x<8; ++x);
return 0;
}
Вторая программа дополнена. Эта программа должна содержать весь код из чистой программы и некоторый дополнительный код. Количество точек расширения ограничено , подробности см. В полном разделе правил. Дополненная программа для чистой выше может быть
inline bool operator < (const int &a, const int &b)
{
return true;
}
int main()
{
for (int x=0; x<8; ++x);
return 0;
}
Это просто пример (не компилируемый в C ++), чтобы показать идею. Настоящая правильная дополненная программа должна быть компилируемой, работающей и имеющей бесконечный цикл.
Полные правила
Обе программы:
- Любой язык с поддержкой таких
for
циклов в порядке. - Тело цикла должно быть пустым. Точнее, вы можете поместить некоторый вывод или другой код в цикл, но поведение цикла должно быть таким же в случае пустого цикла.
Чистая программа:
Цикл использует целочисленный или числовой счетчик и выполняет 8 итераций:
for (int x=0; x<8; ++x); // C, C++, C# for (var x=0; x<8; ++x); // C#, Javascript for (auto x=0; x<8; ++x); // C, C++ for (auto signed x=0; x<8; ++x); // C, C++ for (register int x=0; x<8; ++x); // C, C++
Пользовательские типы запрещены.
- Использование свойства (кроме глобальной переменной) вместо переменной цикла запрещено.
Объявление переменной может быть внутри или снаружи цикла. Следующий код в порядке:
int x; for(x=0; x<8; ++x);
Можно использовать префикс или постфиксный инкремент.
Предел цикла
8
должен быть записан как константный литерал без сохранения в именованную константу или переменную. Это сделано для предотвращения решений, основанных на объявлении переменной или константы равной 8, а затем переназначении, переопределении или дублировании ее другим значением:const double n = 8; int main() { const double n = 9007199254740992; for (double x=0; x<n; ++x); return 0; }
Дополненная программа:
- Должен содержать весь код из чистого.
- Следует расширить чистую программу в ограниченном количестве точек расширения.
- Должен выполнять тот же
for
цикл, что и сам бесконечный цикл.
Размещение цикла в другой бесконечной конструкции не нормально. - Исправление кода во время выполнения или во время компиляции допускается, если его текстовое представление не изменяется.
- Размещение конструкции в виде строки и переход к ней
eval
запрещен.
Точки расширения:
- Везде за пределами фрагмента с чистым кодом, включая другие файлы или другие сборки.
for
Выписка (как единое целое -for
конструкция и ее тело) должны быть оставлены без изменений.- Объявление переменной должно быть одинаковым.
- Любое место между простыми утверждениями может быть использовано в качестве точки расширения.
- Если и только если переменная была объявлена вне цикла и без немедленного присвоения значения, такое присваивание может быть добавлено.
/* extension point here */
int main()
/* extension point here */
{
/* extension point here */
int x /* extension point for assignment here */;
/* extension point here */
for (x=0; x<8; ++x);
/* extension point here */
return 0;
/* extension point here */
}
/* extension point here */
int main()
{
/* BEGIN: No changes allowed */ int x = 0; /* END */
/* extension point here */
/* BEGIN: No changes allowed */ for (x=0; x<8; ++x); /* END */
return 0;
}
PS: Если возможно, предоставьте ссылку на онлайн IDE.
java.lang.Integer
? 2. Это было бы лучше при правильном критерии выигрыша.