首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >感恩节火鸡

感恩节火鸡
EN

Code Golf用户
提问于 2015-11-26 16:36:22
回答 6查看 601关注 0票数 10

(希望今天仍然是你的感恩节)

你的感恩节晚餐有火鸡,但你不知道如何均匀分配。问题是,有些人吃得比其他人多,所以你需要找到解决办法。

输入

将有两项投入。第一个将是各种人的艺术。

代码语言:javascript
复制
     o
 o  \|/
\|/  |
 |   |
/ \ / \

ascii技术规范

每个人占3列的宽度。每个人都由一列空格隔开。每个人的最顶端都是一个o。在o下面,由x中的1-1抵消,分别是\/。从o到输入中的第二行到最后一行都是|,每个人的数量是它们的“高度”。你需要从每个人身上提取的唯一数据就是他们的“身高”。

总会有至少一个人。每个人都至少有2米高.程序应处理的最大高度至少为64。

如果您希望输入填充空格形成一个矩形,请在您的答案中指定这一点。

第二个输入是火鸡。火鸡不是真正的火鸡,更多的是火鸡的NxM尺寸。如果第二个输入是3x2,那么火鸡的尺寸为3*2,总面积为6。

输出

输出可能是一个列表,也可能是您语言最接近的替代方案(例如Array)。您还可以输出一个字符串,其中的值由空格分隔。

每个人的值应该按照输入的顺序输出。

挑战

你的目标是把火鸡的区域划分给人们。

一个示例场景:

假设他们是两个人,身高分别为36。如果有5x3火鸡的话。需要分发的火鸡的总面积是15

现在你会怎么把它分发给每个人?下面是操作步骤:

代码语言:javascript
复制
                    the_persons_height
TurkeyForAPerson = -------------------- * turkey_area
                    sum_of_all_heights

这意味着,对于第一个身高为3的人,他们将得到3/9*15火鸡,或者5,第二个身高为6的人,他们将得到6/9*1510火鸡。

输出

输出必须仅由数字和.组成,除非您选择了奖金。在这种情况下,它只能由数字、空格()和斜杠(/)组成。

完整示例

输入:

代码语言:javascript
复制
6x5
     o 
     | 
 o  \|/
\|/  | 
 |   | 
 |   | 
/ \ / \

输出:

代码语言:javascript
复制
11.25 18.75

奖金

-20%的奖励:你输出一个分数(必须简化),不管它是混合的还是不适当的。

评分

这是密码-高尔夫,所以最短的代码以字节为单位获胜!

EN

回答 6

Code Golf用户

回答已采纳

发布于 2015-12-06 09:32:06

Pyth,23字节

代码语言:javascript
复制
mc*vXzG\*dsN=N-/R\|C.z0

这在在线版本中不起作用,因为它使用eval来确定火鸡的大小。

解释:

代码语言:javascript
复制
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)
票数 3
EN

Code Golf用户

发布于 2015-11-27 16:55:38

LabVIEW,67 Bytes

我数我在元后的建议,所以它不是固定的,但是的,这里。

需要用空格填充输入。

我数着头,从人头所在的线上得到人的大小。

票数 4
EN

Code Golf用户

发布于 2015-11-26 19:24:53

MATLAB 109*80% = 87.2字节

代码语言:javascript
复制
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个字符:

代码语言:javascript
复制
p=char(strsplit(p,'\n')); % Converts the input person string to a 2D array

实际上,获取人员的数量是相当容易的:

代码语言:javascript
复制
a=sum(p(:,2:4:end)=='|');

从第二列开始,每第四列就有一列(这将是所有的人身体所在的列),然后将其转换为一个包含1's的数组(其中有身体位)和0's (没有)。最后,它对列进行求和,从而得到包含每个人大小的一维数组a

代码语言:javascript
复制
prod(sscanf(t,'%dx%d'))*a/sum(a)

接下来,我们从%dx%d格式的输入字符串中提取火鸡的大小,即一个数字然后'x‘然后另一个数字。得到的两个数字的数组相乘得到火鸡面积。

这是乘以每个人的身高,也除以所有的人的总高度,得到每一个人的部分作为十进制数。

代码语言:javascript
复制
rats(...)

最后一步,限定奖金-这一点使代码6个字符更长,但奖金仿冒22,所以它是值得的。rats()是一个很好的函数,它将一个十进制数转换成一个简化的不正确的分数(精确到13 d.p.)。给它一个十进制数数组(即每个人的数量)将返回一个字符串,其中包含每个人的分数,然后用空格分隔。

假设rats()的输出增加了多个空格,但问题并不是说不能--只是说字符串必须只包含数字、‘’和'/‘。

这是示例的输出(我添加了引号以防止空格被删除,而不是在实际输出中):

代码语言:javascript
复制
'     45/4          75/4     '

示例用法:

代码语言:javascript
复制
f('6x5',['     o ' 10 '     | ' 10 ' o  \|/' 10 '\|/  | ' 10 ' |   | ' 10 ' |   | ' 10 '/ \ / \'])

产出:

代码语言:javascript
复制
'     45/4          75/4     '

它也在在线Octave解释器上工作(尽管有警告)。你可以试试,这里。该链接指向已在文件中定义了f函数的工作区。因此,您应该能够在提示符下输入上面的示例用法。

票数 3
EN
页面原文内容由Code Golf提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codegolf.stackexchange.com/questions/64878

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档