Давайте розглянемо типовий цикл, який зазвичай виконує 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. Це краще з належним критерієм виграшу.