ลองมาดูในลูปทั่วไปซึ่งโดยปกติจะทำซ้ำ 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
ลูปนั้นก็โอเค - ร่างกายลูปจะต้องว่างเปล่า แม่นยำยิ่งขึ้นคุณสามารถวางผลลัพธ์หรือโค้ดอื่น ๆ ลงในลูปได้ แต่พฤติกรรมลูปควรเหมือนกันในกรณีที่ว่างเปล่าลูป
โปรแกรมทำความสะอาด:
Loop ใช้ตัวนับจำนวนเต็มหรือตัวนับและดำเนินการซ้ำ 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. สิ่งนี้จะดีกว่าด้วยเกณฑ์การชนะที่เหมาะสม