Banach-Tarski悖论指出,给定3维空间中的球,您可以将球分解为有限数量的点子集。然后可以将这些不相交的点集重新组合以产生两个初始球副本。从理论上讲,您将拥有两个相同的球。
重新组装的过程仅包括移动上述点子集并旋转它们,而不改变其空间形状。只需五个不相交的子集即可完成此操作。
根据定义,不相交集没有公共元素。其中A
和B
是初始球的任意两个点子集,而A
和之间的公共元素B
是一个空集。在以下等式中显示。
对于下面的不交集,公共成员形成一个空集。
挑战
编写一个程序,该程序可以输入ASCII“ ball”,并输出重复的“ ball”。
输入值
这是输入球示例:
##########
###@%$*.&.%%!###
##!$,%&?,?*?.*@!##
##&**!,$%$@@?@*@&&##
#@&$?@!%$*%,.?@?.@&@,#
#,..,.$&*?!$$@%%,**&&#
##.!?@*.%?!*&$!%&?##
##!&?$?&.!,?!&!%##
###,@$*&@*,%*###
##########
每个球体均以井号(#
)勾勒,并填充以下任意字符:.,?*&$@!%
。每个输入将为22x10字符(宽度乘高度)。
创建重复项
首先,根据其在中的索引为球内的每个点赋予一个编号的点.,?*&$@!%
。这是上面的示例,曾经编号:
##########
###7964151998###
##86295323431478##
##5448269677374755##
#75637896492137317572#
#21121654386679924455#
##1837419384568953##
##85363518238589##
###2764574294###
##########
然后,将每个点上移一个(九个变为一):
##########
###8175262119###
##97316434542589##
##6559371788485866##
#86748917513248428683#
#32232765497781135566#
##2948521495679164##
##96474629349691##
###3875685315###
##########
最后,每个新的点值都将转换回其相应的字符:
##########
###!.@&,$,..%###
##%@?.$*?*&*,&!%##
##$&&%?@.@!!*!&!$$##
#!$@*!%.@&.?,*!*,!$!?#
#?,,?,@$&*%@@!..?&&$$#
##,%*!&,.*%&$@%.$*##
##%$*@*$,%?*%$%.##
###?!@&$!&?.&###
##########
输出量
这两个球然后以这种形式并排输出(在赤道处用四个空格隔开):
########## ##########
###@%$*.&.%%!### ###!.@&,$,..%###
##!$,%&?,?*?.*@!## ##%@?.$*?*&*,&!%##
##&**!,$%$@@?@*@&&## ##$&&%?@.@!!*!&!$$##
#@&$?@!%$*%,.?@?.@&@,# #!$@*!%.@&.?,*!*,!$!?#
#,..,.$&*?!$$@%%,**&&# #?,,?,@$&*%@@!..?&&$$#
##.!?@*.%?!*&$!%&?## ##,%*!&,.*%&$@%.$*##
##!&?$?&.!,?!&!%## ##%$*@*$,%?*%$%.##
###,@$*&@*,%*### ###?!@&$!&?.&###
########## ##########
注意:移动点值和后面的字符是重新组合点子集(字符分组)所执行的旋转的象征。