首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >艺术广场仿射分形

艺术广场仿射分形
EN

Code Golf用户
提问于 2015-05-17 14:53:28
回答 1查看 741关注 0票数 9

编写最小的程序,你可以创建仿射分形。您可以使用任何您认为可以产生与下面规则相同的结果的方法。您不必从建议的方法中使用任何想法!

您的程序将接受两个输入,第一个输入以从0到7的三位数字074格式定义模式,第二个输入将定义大小,3将为8x8,4将为16x16等等(2^n)。您的程序必须输出所有大小从0 (1x1)到至少5 (32x32)的正确结果。如果它为更高的数字产生任何输出,那么它必须是正确的,也就是说,它必须产生到一定大小的正确输出,但是如果它是错误的,则不产生超过该大小的输出。您可以假设最大大小为15 (32768x32768),因为对于ASCII art (1GB)来说,这已经是一个疯狂的大小了!

8x8模式如下所示(规则160)。最左边的数字将是块A,中间数字(请不要粗鲁的想法!)用于块B,最右边的数字用于块C.若要构造分形,请在两个维数中将其缩小一半,并应用块的旋转/镜像规则。若要缩小模式,请将其均匀划分为2x2区域。每个区域要么有3个可见字符,要么就没有。如果有可见字符,则在较小块中的适当位置放置字符,否则放置空格。规则0-3不镜像,规则4-7镜像.规则04不旋转,15顺时针旋转90度,26旋转180度,37顺时针旋转270度。按所示顺序将三个街区缝合在一起,左上角为A,左下角为B,右下角为C

代码语言:javascript
复制
 AAA    
AA A    
AA      
A       
BBB CC  
B BBC   
  BBCCC 
   B CCC

按规则编号缩小、旋转和镜像:

代码语言:javascript
复制
 0       1       2       3       4       5       6       7  
----    ----    ----    ----    ----    ----    ----    ----
AA       BAA    CCB        C    C        BCC    AAB       AA
A       BB A     CBB      CC    CC      BBC     A BB       A
BBC     CC         A    A BB    BB A    A         CC     CBB
 BCC    C         AA    AAB      BAA    AA         C    CCB 

规则:

  1. 不镜像,顺时针旋转90度
  2. 不镜像,顺时针旋转180度
  3. 不镜像,顺时针旋转270度
  4. 镜像但未旋转
  5. 镜像然后顺时针旋转90度
  6. 镜像然后顺时针旋转180度
  7. 镜像然后顺时针旋转270度
  8. 规则0:未镜像,未旋转

镜像总是先完成,然后通过空白角对角线进行,例如规则0和规则4:

代码语言:javascript
复制
 0       4  
----    ----
AA /    C  /
A /     CC/ 
BBC     BB A
/BCC    /BAA

按照上述顺序,只有规则160在上面的模式中使用。在转换被应用和块拼接在一起之后,它看起来就像下面的样子,除了我把每个块彼此间隔在一个空格之外。您的代码中不会有这个额外的空间。如果您将它与“父”图像进行比较,您将看到它具有相同位置上的可见字符。

代码语言:javascript
复制
 BAA
BB A
CC  
C   

AAB  AA  
A BB A   
  CC BBC 
   C  BCC

另一种在不缩小的情况下生成图像的方法如下:从一个字符开始:

代码语言:javascript
复制
X

为这三个块中的每个块应用转换(没有,因为它只有一个字符),并将这些块缝合在一起:

代码语言:javascript
复制
X
XX

再次为这三个块中的每个块应用转换:

代码语言:javascript
复制
1 
--
XX
X 

6     0 
--    --
XX    X 
 X    XX

把它们缝在一起:

代码语言:javascript
复制
XX
X 
XXX 
 XXX

再次为这三个块中的每个块应用转换:

代码语言:javascript
复制
 1  
----
 XXX
XX X
XX  
X   

 6       0  
----    ----
XXX     XX  
X XX    X   
  XX    XXX 
   X     XXX

把它们缝在一起:

代码语言:javascript
复制
 XXX    
XX X    
XX      
X       
XXX XX  
X XXX   
  XXXXX 
   X XXX

您可以对图案的可见部分使用任何可打印字符(0x21-0x7E),但空白只使用空格字符(0x20)。尾随空格是允许的,但必须在整个正方形之外没有空格(即对于一个8x8正方形,不能有超过第8列的字符)。

有512个不同的规则,但其中一些规则产生了相同的模式。另外,任何只包含04的模式都会产生Sierpinski三角形(8个不同的规则)。

您可以随意发布您最喜欢的模式和生成模式的规则。如果需要,请确保大小至少为3 (8x8),以区别于类似的规则。

EN

回答 1

Code Golf用户

发布于 2018-02-11 03:46:17

Dyalog经典,47字节

代码语言:javascript
复制
⊃(⊂⍪⍕#){,/⍪⌿↑1 ¯2↑¨⊂⍺{⍉∘⊖⍣⍺⌽⍉⍣(⍺>3)⌽⍵}¨⍵}⍣⎕⍨⍎¨⍞

在网上试试!

票数 0
EN
页面原文内容由Code Golf提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codegolf.stackexchange.com/questions/50342

复制
相关文章

相似问题

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