Давайте розглянемо типовий цикл, який зазвичай виконує 8 ітерацій:
for (int x=0; x<8; ++x);
Ви повинні зробити це нескінченним!
Це конкурс на популярність для всіх мов, які підтримують таку форму for
циклу. Тож рішення з найвищим балом (upvotes мінус downvotes) виграє.
Якщо ваша мова має іншу форму 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. Це краще з належним критерієм виграшу.