Answers:
“无关键字”限制在这里无关紧要。我很确定,如果可能的话,不会通过添加关键字来改善它。
n=2;main(m){n<720&&main(m<2?printf("%d ",n),n:n%m?m-1:n++);}
替代版本:
输出不是很好,但是我喜欢这种printf
滥用。
n=2;main(m){n<720&&main(m<2?printf("%*d",n,n):n%m?m-1:n++);}
两种解决方案中的技巧都是将两个循环(通过递归实现)合并为一个。
n
是下一个潜在素数,m
下一个潜在除数。
在每个递归调用中,我们要么递增n
(同时设置m
为其先前的值),要么递减m
。
Python并非针对此挑战而设计。想要print
吗?那是保留的。好吧,我们如何使用stdout
?好吧,那要花一个import
……你猜对了,保留。好吧...我在Unix上,所以我可以打开文件描述符1,它恰好是stdout。哈克!
人,迭代?除了eval
。当然没有循环,但是我们甚至不能使用def
或定义函数lambda
。而且要加重侮辱的伤害,我们甚至不能使用列表理解!我一直在找借口map(p.__mod__,...)
在代码高尔夫中使用诸如此类的东西……理解总是更好的。到现在为止。
p=1
eval(compile("p+=1;open('/dev/fd/1','w').write('%s '%p*all(map(p.__mod__,range(2,p))));"*720,'','exec'))
现在,你可能会抱怨说exec
是一个关键字,即使我没有使用关键字(我甚至没有eval
的exec
)。好吧,这是一个不使用117个字符的解决方案'exec'
。
p=2
s="eval('('+s*(p<720)+')',open('/dev/fd/1','w').write('%s '%p*all(map(p.__mod__,range(2,p)))),{'p':p+1})";eval(s)
__import__
,但这会花费字符
#define q j*j<k?i%p[j++]||(i++,j=0):printf("%d\n",p[j=0,k++]=i++)
#define A q;q;q;q;q;q;q;q
#define B A;A;A;A;A;A;A;A
#define C B;B;B;B;B;B;B
main(){int i=2,j=0,k=0,p[999];C;C;C;C;C;}
好吧,这是一个快速的第一次尝试。我相信这应该满足要求。我正在使用简单的试验除法来查找素数和使用预处理器构造的展开循环对其进行迭代,直到找到足够的素数为止。调整了重复次数,以便精确打印128个素数。