Locked. This question and its answers are
locked,因为该问题是题外话,但具有历史意义。它目前不接受新的答案或互动。
挑战
字符计数最短的代码,它将根据用户输入生成 hive 。
hive 定义为六边形网格,用户输入的大小为两个大于零的正数(无需验证输入)。第一个数字(
W
)代表 hive 的宽度-或-每行有多少个六边形。第二个数字(
H
)代表 hive 的高度-或-每列上有多少个六边形。
单个六边形由三个ASCII字符组成:
_
,
/
和
\
以及三行:
__
/ \
\__/
六边形彼此完成: hive 的第一列将为“低”,第二列将为高-交替并重复以形成W六边形的相同模式。这将重复H次以形成总共WxH的六边形。
测试用例:
Input:
1 1
Output:
__
/ \
\__/
Input:
4 2
Output:
__ __
__/ \__/ \
/ \__/ \__/
\__/ \__/ \
/ \__/ \__/
\__/ \__/
Input:
2 5
Output:
__
__/ \
/ \__/
\__/ \
/ \__/
\__/ \
/ \__/
\__/ \
/ \__/
\__/ \
/ \__/
\__/
Input:
11 3
Output:
__ __ __ __ __
__/ \__/ \__/ \__/ \__/ \__
/ \__/ \__/ \__/ \__/ \__/ \
\__/ \__/ \__/ \__/ \__/ \__/
/ \__/ \__/ \__/ \__/ \__/ \
\__/ \__/ \__/ \__/ \__/ \__/
/ \__/ \__/ \__/ \__/ \__/ \
\__/ \__/ \__/ \__/ \__/ \__/
代码计数包括输入/输出(即完整程序)。
Perl,99个字符
@P=map{$/.substr$".'__/ \\'x99,$_,$W||=1+3*pop}0,(3,6)x pop;
chop$P[0-$W%2];print" __"x($W/6),@P
最后编辑:保存了一个字符,用
-($W%2)
替换
0-$W%2
(感谢A. Rex)
说明:
对于宽度W和高度H,输出为2 + 2 * H行长和3 * W + 1个字符宽,在输出的中间有很多重复。
为了方便起见,我们将
$W
设置为3 * W + 1,即以字符为单位的输出宽度。
第一行由
" __"
模式组成,重复W / 2 ==
$W/6
次。
偶数行由重复模式
"\__/ "
组成,该模式被截断为
$W
字符。输出的第二行是一种特殊情况,其中第二行的第一个字符应为空格而不是
\
。
奇数行由重复模式
"/ \__"
组成,该模式被截断为
$W
字符。
我们构造一个字符串:
" " . "__/ \" x 99
。请注意,此字符串的开头是第二行的期望输出。对于奇数行,此行从位置3开始是期望的输出,对于偶数行,该行从位置6开始是期望的输出。
map
调用的LIST参数以0开头,后跟(3,6)的H个重复。
map
调用创建一个子字符串列表,这些子字符串从适当的位置开始,并且
$W
= 3 * W + 1个字符长。
在打印结果之前,还需要进行另一项调整。如果W为奇数,则第二行上还有一个额外的字符(
$P[0]
),需要将其分隔为
chop
。如果W是偶数,则底行上还有一个额外的字符(
$P[-1]
)要砍。
我是一名优秀的程序员,十分优秀!