首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >秋葵餐厅

秋葵餐厅
EN

Code Golf用户
提问于 2014-10-04 22:47:48
回答 1查看 334关注 0票数 1

因为PPCG上没有足够的xkcd .

挑战

挑战和上面一样--给定一个菜单和一个总价,你需要找到客户点了什么。

菜单将以以下格式作为文本文件提供:

代码语言:javascript
复制
Name:Price
Name:Price

到菜单文件的路径和总价应该通过argv或STDIN提供。如果您愿意,菜单可以通过STDIN/argv提供(而不是换行符,用逗号分隔每个项目)。

输出应该是一个值列表。如果有多个答案,输出所有答案。

示例

菜单:

代码语言:javascript
复制
Burger:12.60
Pepsi:3.50
Lobster Thermidore:33.10
Ice Cream:23.00

总价:68.70

产出如下:

代码语言:javascript
复制
Burger
Lobster Thermidore
Ice Cream

给出一个未知问题的最快的代码获胜。速度将被取五次并平均。

EN

回答 1

Code Golf用户

回答已采纳

发布于 2014-10-05 12:39:34

Python2-朴素实现- 224

那么,让我们从“最天真的算法”作为某种参考解决方案开始:

代码语言:javascript
复制
import itertools

path = input()
total = input()

with open(path) as f:
    menu = map(lambda l: l.split(':'), f.read().split('\n'))

names, prices = zip(*menu)
prices = map(float, prices)

for i in range(len(menu)):
    for comb in itertools.combinations(range(len(menu)), i):
        if sum(prices[c] for c in comb) == total:
            for i in comb:
                print names[i] 

输入:

代码语言:javascript
复制
"data.txt"
68.70

输出:

代码语言:javascript
复制
Burger
Lobster Thermidore
Ice Cream

复杂性:

代码语言:javascript
复制
O(2^N * N)

- N (当然)

编辑:

为了反映新的制胜标准,我把金牌打得很低:

代码语言:javascript
复制
from itertools import*
S=str.split
f,t=S(input())
m=[S(l,':')for l in S(open(f).read(),'\n')]
R=range(len(m))
F=float
for i in R:
 for C in combinations(R,i):
  if sum(F(m[c][1])for c in C)==F(t):
   for j in C:print m[j][0]

输入格式更改为data.txt 68.70 (在一行上用空格分隔)。

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

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

复制
相关文章

相似问题

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