首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Code Golf: Ulam螺旋

Code Golf: Ulam螺旋
EN

Stack Overflow用户
提问于 2009-11-27 05:42:31
回答 10查看 4.4K关注 0票数 27

挑战

按字符计数的最短代码,用于输出具有用户输入给定螺旋大小的Ulam's spiral

乌拉姆螺旋是一种映射质数的方法。螺旋线从位于中心的数字1开始(1不是质数),并围绕它生成一个螺旋线,将所有质数标记为字符'*‘。非质数将打印为空格‘’。

alt text http://liranuna.com/junk/ulam.gif

测试用例

代码语言:javascript
复制
Input:
    2
Output:
    * *
      *
    *  
    
Input:
    3
Output:
    *   *
     * * 
    *  **
     *   
      *  
      
Input:
    5
Output:
        * *  
     *     * 
    * *   *  
       * * * 
      *  ** *
     * *     
    *   *    
     *   *   
    *     *  

代码计数包括输入/输出(即完整程序)。

EN

回答 10

Stack Overflow用户

回答已采纳

发布于 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个字符

代码语言:javascript
复制
 ~:S.(+,{S(-}%:R{~):v;R{:$v>:d;' \*'1/[v$.v]2/v~)$<!d^=~:$;:y.\*4\*$-y-)2d\*$y-\*+.1=3\*+:$,2>{$\%!},!=}%n}%
票数 8
EN

Stack Overflow用户

发布于 2009-11-27 16:56:36

Python - 203个字符

代码语言:javascript
复制
  _________________________________________________________
 /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)进行素性检查

最后一行相当笨拙。它遍历所有单元格,并决定是否放置空格或星号

票数 28
EN

Stack Overflow用户

发布于 2009-11-27 10:40:08

Ruby 1.8.7,194个字符

代码语言:javascript
复制
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行添加另一个空格:

代码语言:javascript
复制
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}
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1805796

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档