让我们来看看一个典型的循环,它通常执行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应该编写为常量文本,而不保存到指定的常量或变量。它的目的是防止基于声明变量或常数等于8的解决方案,然后重分配、重写或用其他值隐藏它: const double n= 8;int main() { const double n= 9007199254740992;for (double x=0;xfor循环,itself.将循环放置到另一个无限构造中是不行的。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的链接。
发布于 2016-11-21 22:07:36
这只是一个标准的倒计时循环。
n = 8
while n != 0:
n -= 1
print("done")import ctypes
ctypes.cast(id(8), ctypes.POINTER(ctypes.c_int))[6] = 9
n = 8
while n != 0:
n -= 1
print("done")它使用int缓存将8重新定义为9,这实际上使n -= 1成为无操作,因为9-1 = 8只会再次将n设置为9,从而导致无限循环。
您可以在联机这里中看到int缓存(虽然显然没有无限循环,因为它是在线的)。
发布于 2016-11-21 21:56:55
在python中执行8次的标准方法是:
for i in range(8):
# Do something
pass但是,如果我们将范围生成器函数覆盖为无限产生1,它就变成了一个无限循环.
def range(x):
while 1: yield 1
for i in range(8):
# Infinite loop
pass我们可以更进一步,创建一个生成器函数,它不是无限地产生1,而是永远计算在内:
def range(x):
i = 0
while 1: yield i; i+=1
for i in range(8):
# Counting from 0 to infinity
pass发布于 2016-11-21 21:18:15
编辑:删除显式变量声明,否则它将被吊起并创建一个不可配置的window.x属性(除非在REPL控制台中逐行运行)。
解释:
利用以下事实:任何全局作用域变量也是window对象的属性,并将"window.x“属性重新定义为常值为1。
for(x=0; x<8; x+=1) console.log(x);Object.defineProperty(window,'x',{value:1});
for(x=0; x<8; x+=1) console.log(x);注意:要在Node.js中完成这项工作,只需将“窗口”替换为“全局”(在Node.js 6.8.0中测试)
https://codegolf.stackexchange.com/questions/100663
复制相似问题