因为PPCG上没有足够的xkcd .

挑战和上面一样--给定一个菜单和一个总价,你需要找到客户点了什么。
菜单将以以下格式作为文本文件提供:
Name:Price
Name:Price到菜单文件的路径和总价应该通过argv或STDIN提供。如果您愿意,菜单可以通过STDIN/argv提供(而不是换行符,用逗号分隔每个项目)。
输出应该是一个值列表。如果有多个答案,输出所有答案。
菜单:
Burger:12.60
Pepsi:3.50
Lobster Thermidore:33.10
Ice Cream:23.00总价:68.70
产出如下:
Burger
Lobster Thermidore
Ice Cream给出一个未知问题的最快的代码获胜。速度将被取五次并平均。
发布于 2014-10-05 12:39:34
那么,让我们从“最天真的算法”作为某种参考解决方案开始:
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] "data.txt"
68.70Burger
Lobster Thermidore
Ice CreamO(2^N * N)- N (当然)
为了反映新的制胜标准,我把金牌打得很低:
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 (在一行上用空格分隔)。
https://codegolf.stackexchange.com/questions/38542
复制相似问题