(希望今天仍然是你的感恩节)
你的感恩节晚餐有火鸡,但你不知道如何均匀分配。问题是,有些人吃得比其他人多,所以你需要找到解决办法。
将有两项投入。第一个将是各种人的艺术。
o
o \|/
\|/ |
| |
/ \ / \每个人占3列的宽度。每个人都由一列空格隔开。每个人的最顶端都是一个o。在o下面,由x中的1和-1抵消,分别是\和/。从o到输入中的第二行到最后一行都是|,每个人的数量是它们的“高度”。你需要从每个人身上提取的唯一数据就是他们的“身高”。
总会有至少一个人。每个人都至少有2米高.程序应处理的最大高度至少为64。
如果您希望输入填充空格形成一个矩形,请在您的答案中指定这一点。
第二个输入是火鸡。火鸡不是真正的火鸡,更多的是火鸡的NxM尺寸。如果第二个输入是3x2,那么火鸡的尺寸为3*2,总面积为6。
输出可能是一个列表,也可能是您语言最接近的替代方案(例如Array)。您还可以输出一个字符串,其中的值由空格分隔。
每个人的值应该按照输入的顺序输出。
你的目标是把火鸡的区域划分给人们。
一个示例场景:
假设他们是两个人,身高分别为3和6。如果有5x3火鸡的话。需要分发的火鸡的总面积是15。
现在你会怎么把它分发给每个人?下面是操作步骤:
the_persons_height
TurkeyForAPerson = -------------------- * turkey_area
sum_of_all_heights这意味着,对于第一个身高为3的人,他们将得到3/9*15火鸡,或者5,第二个身高为6的人,他们将得到6/9*15或10火鸡。
输出必须仅由数字和.组成,除非您选择了奖金。在这种情况下,它只能由数字、空格()和斜杠(/)组成。
输入:
6x5
o
|
o \|/
\|/ |
| |
| |
/ \ / \输出:
11.25 18.75-20%的奖励:你输出一个分数(必须简化),不管它是混合的还是不适当的。
这是密码-高尔夫,所以最短的代码以字节为单位获胜!
发布于 2015-12-06 09:32:06
mc*vXzG\*dsN=N-/R\|C.z0这在在线版本中不起作用,因为它使用eval来确定火鸡的大小。
mc*vXzG\*dsN=N-/R\|C.z0 implicit: z = first input line
.z read all other lines
C transpose them
/R\| count the "|"s in each column
- 0 remove 0s in this list (columns with no "|"s)
=N assign the resulting list to N
m map each value d in N to:
XzG\* replace every letter in z with a "*"
v evaluate the result (does the multiplication)
* d multiply with d
c sN divide by sum(N)发布于 2015-11-27 16:55:38
我数我在元后的建议,所以它不是固定的,但是的,这里。

需要用空格填充输入。
我数着头,从人头所在的线上得到人的大小。
发布于 2015-11-26 19:24:53
function o=f(t,p);p=char(strsplit(p,'\n'));a=sum(p(:,2:4:end)=='|');o=rats(prod(sscanf(t,'%dx%d'))*a/sum(a));这是一个MATLAB函数,它接受两个输入,第一个是火鸡大小的字符串(例如'8x4' ),第二个是包含人的字符串。它返回一个字符串,其中包含每个人的不正确的分数。
这可能要小得多,但新的线条变得棘手。MATLAB可以轻松地对每一行使用;作为分隔符来转换字符串,但是尝试使用换行符很困难,花费25个字符:
p=char(strsplit(p,'\n')); % Converts the input person string to a 2D array实际上,获取人员的数量是相当容易的:
a=sum(p(:,2:4:end)=='|');从第二列开始,每第四列就有一列(这将是所有的人身体所在的列),然后将其转换为一个包含1's的数组(其中有身体位)和0's (没有)。最后,它对列进行求和,从而得到包含每个人大小的一维数组a。
prod(sscanf(t,'%dx%d'))*a/sum(a)接下来,我们从%dx%d格式的输入字符串中提取火鸡的大小,即一个数字然后'x‘然后另一个数字。得到的两个数字的数组相乘得到火鸡面积。
这是乘以每个人的身高,也除以所有的人的总高度,得到每一个人的部分作为十进制数。
rats(...)最后一步,限定奖金-这一点使代码6个字符更长,但奖金仿冒22,所以它是值得的。rats()是一个很好的函数,它将一个十进制数转换成一个简化的不正确的分数(精确到13 d.p.)。给它一个十进制数数组(即每个人的数量)将返回一个字符串,其中包含每个人的分数,然后用空格分隔。
假设rats()的输出增加了多个空格,但问题并不是说不能--只是说字符串必须只包含数字、‘’和'/‘。
这是示例的输出(我添加了引号以防止空格被删除,而不是在实际输出中):
' 45/4 75/4 '示例用法:
f('6x5',[' o ' 10 ' | ' 10 ' o \|/' 10 '\|/ | ' 10 ' | | ' 10 ' | | ' 10 '/ \ / \'])产出:
' 45/4 75/4 '它也在在线Octave解释器上工作(尽管有警告)。你可以试试,这里。该链接指向已在文件中定义了f函数的工作区。因此,您应该能够在提示符下输入上面的示例用法。
https://codegolf.stackexchange.com/questions/64878
复制相似问题