首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >一堆重量

一堆重量
EN

Code Golf用户
提问于 2018-04-26 16:32:50
回答 5查看 911关注 0票数 13

挑战:

您将获得一堆权重的ASCII图像作为输入,并且必须输出该堆的组合重量。

格式:

有5个不同的重量,重量1,2,5,10,20 帕塞人 (或其他一些任意单位)。

重量按升序排列如下:

代码语言:javascript
复制
1:   __
    |__|

2:   ______
    |______|

5:   ______
    |      |
    |______|

10:  ______________
    |              |
    |______________|

20:  ____________________
    |                    |
    |____________________|

称重将对称放置(如示例图像),而不一定按排序顺序排列。在适用情况下,称重将共享边界:

测试用例:

您也可以使用所有单一权重作为测试用例。

代码语言:javascript
复制
   __
 _|__|_
|______|
|      |
|______|
1 + 2 + 5 = 8
代码语言:javascript
复制
 ____________________
|                    |
|____________________|
   |              |
   |______________|
        _|__|_
       |______|
       |      |
       |______|          
20 + 10 + 1 + 2 + 5 = 38 
代码语言:javascript
复制
 ______
|______|
|______|
|______|
|______|
2 + 2 + 2 + 2 = 8

附加规则:

  • 您可能不会承担额外的前导空间。最大的重量将一直向左。
  • 您可以假设尾随空格和换行符。
  • 你可以假设最大的10个重量
  • 您可以接受可选格式的输入,但不能替换其他字符。

这是密码-高尔夫,所以每种语言以字节表示的最短代码都是赢家。我们一如既往地鼓励解释。

EN

回答 5

Code Golf用户

发布于 2018-04-26 17:05:26

Python 2,77字节

代码语言:javascript
复制
lambda x:sum(i/21*x.count('|'+i%21*' _'[i<50]+'|')for i in[23,48,69,224,440])

在网上试试!

[i/21, i%21, ' _'[i<50] for i in [23,48,69,224,440]]将生成以下三叉[1, 2, '_'], [2, 6, '_'], [3, 6, ' '], [10, 14, ' '], [20, 20, ' '],表示每个权重的权重、长度和底部的字符,用于对每个权重进行唯一的单行表示。

由于第三重将与第二重重叠,所以我用它的身体(_ -> )替换了它的底部,并将值降为3 (它将计算基座为2,将身体计算为3,从而产生5)

票数 4
EN

Code Golf用户

发布于 2018-04-26 17:22:15

JavaScript (Node.js),73字节

代码语言:javascript
复制
x=>x.replace(/\|.*\|/g,s=>u+=s.length/4*(s[1]<1?s[21]?29/11:1.5:1),u=0)|u

在网上试试!

票数 3
EN

Code Golf用户

发布于 2018-04-27 05:16:47

Python 3,76字节

代码语言:javascript
复制
lambda t:sum([1,2,3,5,5,9,11][len(x)//4+(x<'_')]for x in t.split('|')[1::2])

在网上试试!

怎么做?

代码语言:javascript
复制
sum([1,2,3,5,5,9,11][len(x)//4+(x<'_')]for x in t.split('|')[1::2])
                                                t.split('|')         - split ascii art into pieces
                                                            [1::2])  - weights are at odd indexes
                                       for x in                      - iterates over the weights
                     len(x)//4                                       - map widths to 0,1,3,5,7
                              +(x<'_')                               - add 1 if the first row of 2-row weight
    [1,2,3,5,5,9,11][                 ]                              - value of each part of a weight
sum(                                                              )  - add 'em all up
票数 2
EN
页面原文内容由Code Golf提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

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

复制
相关文章

相似问题

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