绘制Peano曲线


13

介绍

在几何学中,Peano曲线是Giuseppe Peano在1890年发现的第一个空间填充曲线示例。Peano曲线是从单位间隔到单位平方的连续的连续函数,但不是内射的。Peano受到Georg Cantor的早期结果的启发,认为这两个集合具有相同的基数。由于此示例,一些作者使用短语“ Peano曲线”更笼统地指代任何空间填充曲线。

挑战

该程序采用一个整数输入n,并输出代表nPeano曲线第th次迭代的图形,该图形从该图像最左侧所示的侧面2开始: Peano曲线的三个迭代

输入值

n给出Peano曲线迭代次数的整数。可选,其他输入在“奖金”部分中描述。

输出量

nPeano曲线的第三次迭代的图形。工程图可以是ASCII艺术图,也可以是“真实”工程图,以最简单或最短的时间为准。

规则

  • 输入和输出可以任何方便的格式给出(为您的语言/解决方案选择最合适的格式)。
  • 无需处理负值无效输入
  • 完整的程序或功能都是可以接受的。
  • 如果可能,请提供一个在线测试环境的链接,以便其他人可以尝试您的代码!
  • 禁止出现标准漏洞
  • 这是因此所有常用的高尔夫规则都适用,并且最短的代码(以字节为单位)获胜。

奖金

由于这不应该是在公园散步(至少使用我能想到的大多数语言),因此可为以下各项奖励积分:

  • -100字节,如果您的代码生成的Peano曲线构造的gif达到n
  • -100字节,如果您的代码为任何矩形绘制了空间填充曲线(显然,Peano曲线仅适用于正方形)。您可以假设输入采用以下形式:n l wwhere n具有与之前相同的含义(迭代次数),但是where lw成为绘制曲线的矩形的长度和宽度。如果为l == w,这将成为规则的Peano曲线。

负分数是允许的(但有可能...)。

编辑

请在的解决方案中包含程序的输出n == 3 (l == w == 1)


1
欢迎来到PPCG :)乍一看,这似乎是一个不错的第一个挑战。尽管感觉很熟悉,但我认为我可能想到的挑战是ASCII艺术。但是请注意,我们强烈反对奖金,并且会有高尔夫语言可以在不到100个字节的范围内实现这一目标。而且,最重要的是,您需要一个获胜标准。鉴于您的奖金从解决方案的分数中减去字节,我怀疑您打算将其作为代码高尔夫
毛茸茸的

4
是的,我认为奖金不是一个好主意,尤其是因为至少有两个具有动画功能的,以ASCII艺术为重点的golflangs

2
哦,还有什么会n被用于,如果lw投入??????????? 并会皮亚诺曲线是一个特殊的情况下-这不是唯一的空间填充曲线,使一些算法可能要specialcase它
ASCII-仅

2
此外,是什么阻止了任何人针对非正方形尺寸制作平凡的空间填充曲线(只是来回曲折)
仅使用ASCII格式,

7
代码挑战中的奖金是编写挑战时应避免的共识之一。我建议您删除它们,然后决定将其作为挑战的标准版本。
lirtosiast

Answers:


6

Mathematica,得分60-100-100 = -140

Graphics[PeanoCurve@a~Reverse~3~Scale~#2]~Animate~{a,1,#,1}&

纯功能。以n{l, w}(宽度和高度)作为输入,并给出动画图形作为输出。它首先使用创建n阶Peano曲线PeanoCurve。由于l = w的情况仍然需要创建Peano曲线,因此我们将表达式翻转到3级,类似于DavidC的答案;对于lw,我们仅Scale画出矩形的曲线。这条曲线仍然会充满空间,满足第二个奖励。对于第一笔奖金,我们将Animate其用于所有尺寸。请注意,OP表示这与DavidC的区别足够大,可以保证其自己的答案。为结果Ñ = 3, = 瓦特 = 1如下:


非常好!(方向也正确)
DavidC

13

GFA基本3.51(雅达利ST),156个 134 124字节

.LST格式的手动编辑列表。所有行都以结尾CR,包括最后一行。

PRO f(n)
DR "MA0,199"
p(n,90)
RET
PRO p(n,a)
I n
n=n-.5
DR "RT",a
p(n,-a)
DR "FD4"
p(n,a)
DR "FD4"
p(n,-a)
DR "LT",a
EN
RET

展开并评论

PROCEDURE f(n)      ! main procedure, taking the number 'n' of iterations
  DRAW "MA0,199"    !   move the pen to absolute position (0, 199)
  p(n,90)           !   initial call to 'p' with 'a' = +90
RETURN              ! end of procedure
PROCEDURE p(n,a)    ! recursive procedure taking 'n' and the angle 'a'
  IF n              !   if 'n' is not equal to 0:
    n=n-0.5         !     subtract 0.5 from 'n'
    DRAW "RT",a     !     right turn of 'a' degrees
    p(n,-a)         !     recursive call with '-a'
    DRAW "FD4"      !     move the pen 4 pixels forward
    p(n,a)          !     recursive call with 'a'
    DRAW "FD4"      !     move the pen 4 pixels forward
    p(n,-a)         !     recursive call with '-a'
    DRAW "LT",a     !     left turn of 'a' degrees
  ENDIF             !   end
RETURN              ! end of procedure

输出示例

豌豆-gfa


10

Perl 6、117字节

{map ->\y{|map {(((++$+y)%2+$++)%3**(y+$^v,*/3...*%3)??$^s[$++%2]!!'│')xx$_*3},<┌ ┐>,$_,<└ ┘>,1},^$_}o*R**3

在线尝试!

0索引。返回Unicode字符的2D数组。基本思想是对于较低的行,表达式

(x + (x+y)%2) % (3 ** trailing_zeros_in_base3(3*(y+1)))

产生图案

|....||....||....||....||..  % 3
..||....||....||....||....|  % 3
|................||........  % 9
..||....||....||....||....|  % 3
|....||....||....||....||..  % 3
........||................|  % 9
|....||....||....||....||..  % 3
..||....||....||....||....|  % 3
|..........................  % 27

对于较高的行,表达式为

(x + (x+y+1)%2) % (3 ** trailing_zeros_in_base3(3*(y+3**n)))

说明

{ ... }o*R**3  # Feed $_ = 3^n into block

map ->\y{ ... },^$_  # Map y = 0..3^n-1

|map { ... },<┌ ┐>,$_,<└ ┘>,1  # Map pairs (('┌','┐'),3^n) for upper rows
                               # and (('└','┘'),1) for lower rows.
                               # Block takes items as s and v

( ... )xx$_*3  # Evaluate 3^(n+1) times, returning a list

 (++$+y)%2  # (x+y+1)%2 for upper rows, (x+y)%2 for lower rows
(         +$++)  # Add x
                   (y+$^v,*/3...*%3)  # Count trailing zeros of 3*(y+v) in base 3
                3**  # nth power of 3
               %  # Modulo
??$^s[$++%2]  # If there's a remainder yield chars in s alternately
!!'│'         # otherwise yield '│'

6

K(ngn / k)37 27 26字节

{+y,(|'y:x,,~>+x),x}/1,&2*

在线尝试!

返回一个布尔矩阵

|'y是特定于ngn / k的语法。其他方言则要求a :使每个动词动词单音:|:'y


1
为了使输出更加美观,请突出显示所有出现的内容(如果您的浏览器支持)
user202729

3
@ user202729完成-在页脚中不影响字节数
ngn

5

Wolfram语言83 36字节,(可能是-48字节,带奖金)

从11.1版开始,PeanoCurve它是内置的。

我原始的,笨拙的提交浪费了很多字节,GeometricTransformation并且ReflectionTransform.

alephalpha建议使用此简化版本。 Reverse需要正确定向输出。

Graphics[Reverse/@#&/@PeanoCurve@#]&

示例36个字节

Graphics[Reverse/@#&/@PeanoCurve@#]&[3]

豌豆曲线


奖金

如果这有资格获得100 pt的奖金,则权重为52-100 = -48。该代码[5]不算在内,仅算纯函数。

Table[Graphics[Reverse/@#&/@PeanoCurve@#]&@k{k,#}&[5]

顺序


Graphics[Reverse/@#&/@PeanoCurve@#]&
alephalpha

拥有一个可以自己计算Peano曲线的函数有点像在作弊,但我还是将其视为公认的答案,因为它仍然令人印象深刻;)。@ LegionMammal978我认为您应该发布自己的答案,我认为它与众不同,足以保证接受它作为获奖答案。
Peiffap '18年


4

HTML + SVG + JS,224个 213字节

输出是水平镜像的。

n=>document.write(`<svg width=${w=3**n*9} height=${w}><path d="M1 ${(p=(n,z)=>n--&&(p(n,-z,a(a(p(n,-z,d+=z)),p(n,z))),d-=z))(n*2,r=d=x=y=1,a=_=>r+=`L${x+=~-(d&=3)%2*9} ${y+=(2-d)%2*9}`)&&r}"fill=#fff stroke=red>`)

在线尝试!(打印HTML)


3

徽标,89个字节

to p:n:a
if:n>0[rt:a
p:n-1 0-:a
fw 5
p:n-1:a
fw 5
p:n-1 0-:a
lt:a]end
to f:n
p:n*2 90
end

@Arnauld的Atari BASIC答案端口。要使用,请执行以下操作

reset
f 3

3

Stax,19 个字节

∩▐j>♣←╙~◘∩╗╢\a╘─Ràô

运行并调试

输出为3:

███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ █
█ ███ ███ █ █ ███ ███ █ █ ███ ███ █ █ ███ ███ █ █ ███
█         █ █         █ █         █ █         █ █    
█ ███ ███ █ █ ███ ███ █ █ ███ ███ █ █ ███ ███ █ █ ███
███ █ █ ███ ███ █ █ ███ ███ █ █ ███ ███ █ █ ███ ███ █
    █ █         █ █         █ █         █ █         █
███ █ █ ███ ███ █ █ ███ ███ █ █ ███ ███ █ █ ███ ███ █
█ ███ ███ ███ ███ ███ ███ ███ ███ █ █ ███ ███ ███ ███
█                                 █ █                
█ ███ ███ ███ ███ ███ ███ ███ ███ █ █ ███ ███ ███ ███
███ █ █ ███ ███ █ █ ███ ███ █ █ ███ ███ █ █ ███ ███ █
    █ █         █ █         █ █         █ █         █
███ █ █ ███ ███ █ █ ███ ███ █ █ ███ ███ █ █ ███ ███ █
█ ███ ███ █ █ ███ ███ █ █ ███ ███ █ █ ███ ███ █ █ ███
█         █ █         █ █         █ █         █ █    
█ ███ ███ █ █ ███ ███ █ █ ███ ███ █ █ ███ ███ █ █ ███
███ ███ ███ ███ █ █ ███ ███ ███ ███ ███ ███ ███ ███ █
                █ █                                 █
███ ███ ███ ███ █ █ ███ ███ ███ ███ ███ ███ ███ ███ █
█ ███ ███ █ █ ███ ███ █ █ ███ ███ █ █ ███ ███ █ █ ███
█         █ █         █ █         █ █         █ █    
█ ███ ███ █ █ ███ ███ █ █ ███ ███ █ █ ███ ███ █ █ ███
███ █ █ ███ ███ █ █ ███ ███ █ █ ███ ███ █ █ ███ ███ █
    █ █         █ █         █ █         █ █         █
███ █ █ ███ ███ █ █ ███ ███ █ █ ███ ███ █ █ ███ ███ █
█ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.