Chúng ta hãy xem một vòng lặp điển hình, thường thực hiện 8 lần lặp:
for (int x=0; x<8; ++x);
Bạn phải làm cho nó vô hạn!
Đây là một cuộc thi phổ biến cho tất cả các ngôn ngữ hỗ trợ hình thức for
vòng lặp như vậy . Vì vậy, giải pháp với số điểm cao nhất (upvotes trừ downvotes) sẽ thắng.
Nếu ngôn ngữ của bạn có dạng for
vòng lặp khác, nhưng bạn chắc chắn, bạn có thể làm cho một cái gì đó tuyệt vời với nó, hãy đăng câu trả lời và đánh dấu nó là không thể lọc. Tôi bảo lưu quyền mở rộng phạm vi của các cấu trúc và ngôn ngữ có sẵn, nhưng nó sẽ không bao giờ bị thu hẹp, vì vậy đừng sợ bỏ các giải pháp đúng trước đây.
Giải pháp là gì?
Giải pháp bao gồm hai chương trình.
Chương trình đầu tiên là một chương trình sạch sẽ . Đây là chương trình điển hình trong ngôn ngữ của bạn với for
vòng lặp thực hiện 8 lần lặp. Nó phải là chương trình bình thường, bất kỳ nhà phát triển nào cũng có thể viết. Không có bất kỳ hack đặc biệt cho mục đích chuẩn bị. Ví dụ:
int main()
{
for (int x=0; x<8; ++x);
return 0;
}
Chương trình thứ hai được tăng cường. Chương trình này nên chứa tất cả các mã từ chương trình sạch và một số mã bổ sung. Có số lượng điểm mở rộng hạn chế , xem phần quy tắc hoàn chỉnh để biết chi tiết. Một chương trình tăng cường cho chương trình sạch ở trên có thể được
inline bool operator < (const int &a, const int &b)
{
return true;
}
int main()
{
for (int x=0; x<8; ++x);
return 0;
}
Đó chỉ là một ví dụ (không thể biên dịch được trong C ++) để hiển thị một ý tưởng. Chương trình tăng cường chính xác thực sự phải được biên dịch, làm việc và có vòng lặp vô hạn.
Hoàn thành quy tắc
Cả hai chương trình:
- Bất kỳ ngôn ngữ với sự hỗ trợ của các
for
vòng lặp như vậy là ok. - Cơ thể vòng lặp phải trống. Chính xác hơn, bạn có thể đặt một số đầu ra hoặc mã khác vào vòng lặp, nhưng hành vi vòng lặp sẽ giống nhau trong trường hợp vòng lặp trống.
Chương trình sạch:
Vòng lặp sử dụng bộ đếm số nguyên hoặc số và thực hiện 8 lần lặp:
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++
Các loại do người dùng xác định không được phép.
- Sử dụng thuộc tính (ngoại trừ biến toàn cục) thay cho biến vòng lặp không được phép.
Khai báo biến có thể ở bên trong hoặc bên ngoài vòng lặp. Mã sau là ok:
int x; for(x=0; x<8; ++x);
Có thể sử dụng tiền tố hoặc tăng tiền tố.
Giới hạn vòng lặp
8
nên được viết dưới dạng hằng số mà không lưu vào hằng số hoặc biến. Nó được thực hiện để ngăn các giải pháp dựa trên khai báo biến hoặc hằng bằng 8, sau đó gán lại, ghi đè hoặc phủ bóng nó bằng giá trị khác:const double n = 8; int main() { const double n = 9007199254740992; for (double x=0; x<n; ++x); return 0; }
Chương trình mở rộng:
- Phải chứa tất cả các mã từ sạch.
- Nên mở rộng chương trình sạch với số lượng điểm mở rộng hạn chế.
- Phải thực hiện cùng một
for
vòng lặp như một vòng lặp vô hạn.
Đặt vòng lặp vào một cấu trúc vô hạn khác là không ổn. - Thời gian chạy hoặc biên dịch mã thời gian biên dịch được cho phép miễn là đại diện văn bản của nó là không thay đổi.
- Đặt công trình vào một chuỗi và chuyển đến
eval
không được phép.
Điểm mở rộng:
- Bất cứ nơi nào bên ngoài đoạn có mã sạch, bao gồm các tệp khác hoặc các cụm khác.
for
tuyên bố (như một mảnh duy nhất -for
xây dựng và cơ thể của nó) phải được giữ nguyên.- Khai báo biến phải được giữ nguyên.
- Bất kỳ vị trí nào giữa các câu lệnh đơn giản đều có thể được sử dụng làm điểm mở rộng.
- Nếu và chỉ khi biến được khai báo bên ngoài vòng lặp và không có giá trị ngay lập tức, thì phép gán đó có thể được thêm vào.
/* 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: Nếu có thể, vui lòng cung cấp một liên kết đến IDE trực tuyến.
java.lang.Integer
? 2. Điều này sẽ tốt hơn với một tiêu chí chiến thắng thích hợp.