language-agnostic - Code Golf : Easter Spiral

标签 language-agnostic code-golf rosetta-stone spiral

还有什么比螺旋更适合 Easter Code Golf 类(class)的呢?
好吧,我几乎猜到了一切。

挑战

按字符数计算的最短代码,用于显示由星号 ('*') 组成的漂亮 ASCII 螺旋。

输入是一个数字, R ,这将是螺旋的 x 尺寸。另一个维度 (y) 始终为 R-2 。该程序可以假设 R 始终为奇数且 >= 5。

一些例子:

Input
    7
Output

*******
*     *
* *** *
*   * *
***** *                   

Input
    9
Output

*********
*       *
* ***** *
* *   * *
* *** * *
*     * *
******* *

Input
   11
Output

***********
*         *
* ******* *
* *     * *
* * *** * *
* *   * * *
* ***** * *
*       * *
********* *

代码计数包括输入/​​输出(即完整程序)。 允许任何语言。

我轻松击败的 303 个字符长的 Python 示例:

import sys;
d=int(sys.argv[1]);
a=[d*[' '] for i in range(d-2)];
r=[0,-1,0,1];
x=d-1;y=x-2;z=0;pz=d-2;v=2;
while d>2:
    while v>0:
        while pz>0:
            a[y][x]='*';
            pz-=1;
            if pz>0:
                x+=r[z];
                y+=r[(z+1)%4];
        z=(z+1)%4; pz=d; v-=1;
    v=2;d-=2;pz=d;
for w in a:
    print ''.join(w);

现在,进入螺旋......

最佳答案

Python (2.6):156 个字符

r=input()
def p(r,s):x=(i+1)/2;print "* "*x+("*" if~i%2 else" ")*(r-4*x)+" *"*x+s
for i in range(r/2):p(r,"")
for i in range((r-1)/2-1)[::-1]:p(r-2," *")

感谢您的评论。我删除了无关的空格并使用了 input()。我仍然更喜欢在命令行上获取参数的程序,因此这里的版本仍然使用 176 个字符的 sys.argv:

import sys
r=int(sys.argv[1])
def p(r,s):x=(i+1)/2;print "* "*x+("*" if~i%2 else" ")*(r-4*x)+" *"*x+s
for i in range(r/2):p(r,"")
for i in range((r-1)/2-1)[::-1]:p(r-2," *")

说明

将螺旋线切成两个几乎相等的部分,顶部和底部,顶部一行比底部大:

***********
*         *
* ******* *
* *     * *
* * *** * *

* *   * * *
* ***** * *
*       * *
********* *

观察顶部部分如何漂亮且对称。观察底部如何在右侧有一条垂直线,但在其他方面与顶部非常相似。请注意顶部每隔一行的图案:每一侧的星星数量不断增加。请注意,中间的每一行都与之前的锯完全一样,只是它用星星填充了中间区域。

函数 p(r,s) 打印出宽度为 r 的螺旋顶部的第 i 行,并将后缀 s 贴在末尾。请注意,i 是一个全局变量,尽管它可能并不明显!当 i 为偶数时,它会用空格填充行的中间,否则用星星填充。 (~i%2 是获得 i%2==0 效果的一种令人讨厌的方法,但实际上根本没有必要,因为我应该简单地交换“*”和“”。)我们首先绘制顶部随着 i 的增加,绘制螺旋线的行,然后我们用 i 减少的方式绘制底部的行。我们将 r 降低 2 并添加后缀“*”以获得右侧的星星列。

关于language-agnostic - Code Golf : Easter Spiral,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2563561/

相关文章:

code-golf - 家庭邮件合并( Code Golf )

language-agnostic - Code Golf - π 天

math - Code Golf : Mathematical expression evaluator (that respects PEMDAS)

regex - Code Golf : Regex parser

language-agnostic - Code Golf : Playing Cubes

language-agnostic - Code Golf : Hourglass

algorithm - 调度,贪心算法

language-agnostic - 不存在 "game specific"库的游戏编程

javascript - 有向循环图遍历算法 (JavaScript)

language-agnostic - 自动化测试订单