让我们看一个典型的循环,该循环通常执行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.最好采用适当的获胜标准。