挑战
按字符计数的最短代码,用于输出具有用户输入给定螺旋大小的Ulam's spiral。
乌拉姆螺旋是一种映射质数的方法。螺旋线从位于中心的数字1开始(1不是质数),并围绕它生成一个螺旋线,将所有质数标记为字符'*‘。非质数将打印为空格‘’。
alt text http://liranuna.com/junk/ulam.gif
测试用例
Input:
2
Output:
* *
*
*
Input:
3
Output:
* *
* *
* **
*
*
Input:
5
Output:
* *
* *
* * *
* * *
* ** *
* *
* *
* *
* * 代码计数包括输入/输出(即完整程序)。
发布于 2009-11-28 05:57:59
Golfscript - 92个字符
~.(:S+,:R{S-:|;R{S-:$|>‘*'1/|$.|2/@:d|~)$
97字符
~.(:S+,:R{S-:|;R{S-:$|>‘*'1/|$.|2/@:d|~)${$\%!},!=}%n}%
99个字符
~.( *'1/|$.|2/@:d|~)${$\%!},,{S-}%:R{~):|;R{:$|>‘:S+ !=}%n}%
100个字符
~:S。(+,{S(-}%:R{~):|;R{:$|>‘*'1/|$.|2/@:d|~)${$\%!},!=}%n}%
101个字符
~:S.(+,{S(-}%:R{~):v;R{:$v>:d;' \*'1/[v$.v]2/v~)$<!d^=~:$;:y.\*4\*$-y-)2d\*$y-\*+.1=3\*+:$,2>{$\%!},!=}%n}%发布于 2009-11-27 16:56:36
Python - 203个字符
_________________________________________________________
/x=input();y=x-1;w=x+y;A=[];R=range;k,j,s,t=R(4) \
| for i in R(2,w*w): |
| A+=[(x,y)]*all(i%d for d in R(2,i)) |
| if i==s:j,k,s,t=k,-j,s+t/2,t+1 |
| x+=j;y+=k |
| for y in R(w):print"".join(" *"[(x,y)in A]for x in R(w)) |
\_________________________________________________________/
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||
x=input();y=x-1;w=x+y
A=[];R=range;k,j,s,t=R(4)
for i in R(2,w*w):
A+=[(x,y)]*all(i%d for d in R(2,i))
if i==s:j,k=k,-j;s,t=s+t/2,t+1
x+=j;y+=k
for y in R(w):print"".join(" *"[(x,y)in A]for x in R(w))如何工作
这个想法是用需要打印为'*‘的x,y坐标填充A
该算法从对应于2的单元格开始,因此避免了测试1的素性的特殊情况。
x,y是感兴趣的单元格
j,k跟踪我们是否需要inc或dec x或Y才能到达下一个单元格
S是下一个转角处i的值。
T跟踪s的增量
all( R(2,i)中d的i%d)进行素性检查
最后一行相当笨拙。它遍历所有单元格,并决定是否放置空格或星号
发布于 2009-11-27 10:40:08
Ruby 1.8.7,194个字符
n=2*gets.to_i-1
r=n**2
l,c=[nil]*r,r/2
r.times{|i|l[c]=i+1;c=i==0||l[c-n]&&!l[c+1]?c+1:l[c-1]&&!l[c-n]?c-n:l[c+n]?c-1:c+n}
r.times{|i|print"1"*l[i]!~/^1?$|^(11+?)\1+$/?'*':' ',i%n==n-1?"\n":''}出于某种原因,ruby1.9想在第4行添加另一个空格:
r.times{|i|l[c]=i+1;c=i==0||l[c-n]&&!l[c+1]?c+1:l[c-1]&&!l[c-n]?c-n :l[c+n]?c-1:c+n}https://stackoverflow.com/questions/1805796
复制相似问题