总览
编写一个程序,在给出编码分形的位模式后,再打印出简单的分形模式,再加上分代的每代比例因子和世代数。
说明
这是Sierpinski地毯的ASCII表示形式:
第0代:
#
第1代:
# # #
# #
# # #
第2代:
# # # # # # # # #
# # # # # #
# # # # # # # # #
# # # # # #
# # # #
# # # # # #
# # # # # # # # #
# # # # # #
# # # # # # # # #
ASCII Sierpinski地毯的n + 1代由一个包含8个n代副本的3x3网格组成,但缺少网格的中心元素。
因此,因为它是使用3x3网格定义的,并且每一代的宽度和高度都增大了3倍,所以可以说它的比例因子是3。
我们可以为Sierpinski地毯定义位模式,方法是将3x3网格中的元素从0到8进行编号(从上到下,从左到右),并在n + 1代包含一个整数的情况下设置整数的相应位。在那个网格位置的第n代的副本:
bit: place value: bit pattern: bit value:
0 1 2 1 2 4 1 1 1 1 2 4
3 4 5 8 16 32 1 0 1 8 0 32
6 7 8 64 128 256 1 1 1 64 128 256
integer value = 1 + 2 + 4 + 8 + 32 + 64 + 128 + 256 = 495
对于比例因子2,位模式将如下排列:
0 1
2 3
等等。
您的任务是编写一个程序,以这种形式接受位模式,比例因子(例如,Sierpinski Carpet为3)和世代号,并输出ASCII分形。
输入项
您的程序应按以下顺序接受3个整数:位模式,比例因子(范围从2到5,包括端值)和世代计数(范围从0到5,包括端值)。
您不需要对这些值执行任何输入验证,并且如果程序适用于大于指定范围的值,则完全可以。
输入可以任何形式传递(元组,逗号/以空格分隔的列表等)
输出量
程序应输出一个分形,该分形由以下#
字符组成:定义该分形的位置后跟一个空格,未定义该分形的位置后加一个空格,并在每行末尾添加换行符,以打印出来或返回字符串从功能。
例子
输入:
495,3,3
输出(Sierpinski Carpet第三代):
# # # # # # # # # # # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # #
# # # # # # # # # # # #
# # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # #
# # # # # # # # # # # #
# # # # # # # # # # # # # # # # # #
# # # # # # # # # # # #
# # # # # # # #
# # # # # # # # # # # #
# # # # # # # # # # # # # # # # # #
# # # # # # # # # # # #
# # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # #
# # # # # # # # # # # #
# # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # # # # # # # # # # #
输入:
7,2,5
输出(Sierpinski Triangle):
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # #
# # # # # # # #
# # # # # # # # # # # # # # # #
# # # # # # # #
# # # # # # # #
# # # #
# # # # # # # # # # # # # # # #
# # # # # # # #
# # # # # # # #
# # # #
# # # # # # # #
# # # #
# # # #
# #
# # # # # # # # # # # # # # # #
# # # # # # # #
# # # # # # # #
# # # #
# # # # # # # #
# # # #
# # # #
# #
# # # # # # # #
# # # #
# # # #
# #
# # # #
# #
# #
#
输入:
325,3,3
输出(Cantor Dust):
# # # # # # # #
# # # # # # # #
# # # # # # # #
# # # # # # # #
# # # # # # # #
# # # # # # # #
# # # # # # # #
# # # # # # # #
输入项
186,3,3
输出(Vicsek分形):
#
# # #
#
# # #
# # # # # # # # #
# # #
#
# # #
#
# # #
# # # # # # # # #
# # #
# # # # # # # # #
# # # # # # # # # # # # # # # # # # # # # # # # # # #
# # # # # # # # #
# # #
# # # # # # # # #
# # #
#
# # #
#
# # #
# # # # # # # # #
# # #
#
# # #
#
输入:
279,3,3
输出(不对称分形的示例):
# # # # # # # # # # # # # # # # # # # # # # # # # # #
# # # # # # # # #
# # # # # # # # #
# # # # # # # # #
# # #
# # #
# # # # # # # # #
# # #
# # #
# # # # # # # # #
# # #
# # #
# # #
#
#
# # #
#
#
# # # # # # # # #
# # #
# # #
# # #
#
#
# # #
#
#
等等
笔记:
- 这是代码高尔夫球,所以最短答案以字节为单位
- 您的程序可以是独立程序,也可以是使用3个输入参数调用并返回(或打印)字符串的函数
- 即使对于0的位模式,也将生成0定义为
#
(#
后跟一个空格)。 - 最后一行的尾随换行符是可选的,但允许,每行中的尾随空格也可以。
279,3,3
?
"##"
为"# "
。我看到您的示例中包含了行尾的一个尾随空格,这是必需的吗?。根据最后一条规则,我认为它是可选的,但是对于第0代您需要尾随空格的事实使我感到奇怪。另外,我认为您应该指出允许的最大空白和换行符。作为一个极端的例子,我总是可以从2 * 5 ^ 6空间的5 ^ 6 = 15625行数组开始,然后替换#
s。在大多数输入情况下,这是大量未使用的空白