高尔夫代码:蜂巢

编程入门 行业动态 更新时间:2024-10-09 20:25:30
本文介绍了高尔夫代码:蜂巢的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

按字符数计数的最短代码,它将根据用户输入生成蜂箱.

The shortest code by character count that will generate a beehive from user input.

一个蜂箱定义为一个六边形网格,用户输入的大小为两个大于零的正数(无需验证输入).第一个数字(W)表示蜂箱的宽度-或-每行上有多少个六边形.第二个数字(H)代表蜂箱的高度-或-每列上有多少个六边形.

A beehive is defined a a grid of hexagons in a size inputted by the user as two positive numbers greater than zero (no need to validate input). The first number (W) represents the width of the beehive - or - how many hexagons are on each row. The second number (H) represents the height of the beehive - or - how many hexagons are on each column.

一个六边形由三个ASCII字符组成:_,/和\,以及三行:

A Single hexagon is made from three ASCII characters: _, / and \, and three lines:

__ / \ \__/

六边形彼此完成:蜂箱的第一列将为低",第二列将为高-交替并重复以形成W六边形的相同图案.将重复H次以形成总共WxH个六边形.

Hexagons complete each other: the first column of the beehive will be 'low', and the second will be high - alternating and repeating in the same pattern forming W hexagons. This will be repeated H times to form a total of WxH hexagons.

Input: 1 1 Output: __ / \ \__/

Input: 4 2 Output: __ __ __/ \__/ \ / \__/ \__/ \__/ \__/ \ / \__/ \__/ \__/ \__/

Input: 2 5 Output: __ __/ \ / \__/ \__/ \ / \__/ \__/ \ / \__/ \__/ \ / \__/ \__/ \ / \__/ \__/

Input: 11 3 Output: __ __ __ __ __ __/ \__/ \__/ \__/ \__/ \__ / \__/ \__/ \__/ \__/ \__/ \ \__/ \__/ \__/ \__/ \__/ \__/ / \__/ \__/ \__/ \__/ \__/ \ \__/ \__/ \__/ \__/ \__/ \__/ / \__/ \__/ \__/ \__/ \__/ \ \__/ \__/ \__/ \__/ \__/ \__/

代码计数包括输入/​​输出(即完整程序).

Code count includes input/output (i.e full program).

推荐答案

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)

Last edit: Saved one character replacing -($W%2) with 0-$W%2 (thanks A. Rex)

说明:

对于宽度W和高度H,输出为2 + 2 * H行长和3 * W + 1个字符宽,在输出的中间有很多重复.

For width W and height H, the output is 2+2 * H lines long and 3 * W+1 characters wide, with a lot of repetition in the middle of the output.

为方便起见,我们将$W设为3 * W +1,即以字符为单位的输出宽度.

For convenience, we let $W be 3 * W + 1, the width of the output in characters.

第一行由模式" __"组成,重复W/2 == $W/6次.

The top line consists of the pattern " __", repeated W/2 == $W/6 times.

偶数行由重复模式"\__/ "组成,该模式被截断为$W个字符.输出的第二行是一种特殊情况,其中第二行的第一个字符应为空格而不是\.

The even numbered lines consist of the repeating pattern "\__/ ", truncated to $W characters. The second line of output is a special case, where the first character of the second line should be a space instead of a \.

奇数行由重复模式"/ \__"组成,该模式被截断为$W个字符.

The odd numbered lines consist of the repeating pattern "/ \__", truncated to $W characters.

我们构造一个字符串:" " . "__/ \" x 99.请注意,此字符串的开头是第二行的期望输出.对于奇数行,此行从位置3开始是期望的输出,对于偶数行,该行从位置6开始.

We construct a string: " " . "__/ \" x 99. Note that the beginning of this string is the desired output for the second line. This line starting at position 3 is the desired output for the odd lines, and starting at position 6 for the even numbered lines.

map调用的LIST参数以0开头,后跟(3,6)的H个重复. map调用创建一个从适当位置开始并且为$W = 3 * W + 1个字符长的子字符串的列表.

The LIST argument to the map call begins with 0 and is followed by H repetitions of (3,6). The map call creates a list of the substrings that begin at the appropriate positions and are $W = 3 * W + 1 characters long.

在打印结果之前,还需要进行另一项调整.如果W为奇数,则在第二行($P[0])上有一个额外的字符,需要将该字符chop断开.如果W是偶数,则底行($P[-1])上还有一个多余的字符可以切.

There is one more adjustment to make before printing the results. If W is odd, then there is an extra character on the second line ($P[0]) that needs to be chopped off. If W is even, then there is an extra character on the bottom line ($P[-1]) to chop.

更多推荐

高尔夫代码:蜂巢

本文发布于:2023-11-29 09:34:31,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1646019.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:蜂巢   高尔夫   代码

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!