有时,晚餐菜单上会有长长的名字。对于服务生来说,写一个能清晰地识别菜肴的缩写要容易得多。
例如,给定以下列表:
beef burger
chicken burger
chicken nuggets缩写c n与chicken nuggets匹配。
缩写bur与beef burger和chicken burger匹配。
编写一个识别一个或多个与缩写匹配的项目的函数程序。
您可以更改此顺序并使用任何合适的数据类型。
Not found缩略语中的每一个词和项目都是分开考虑的。如果缩写词与项目词的开头匹配,则该项可能匹配。如果一个项目的单词中没有一个以任何缩写词开头,则该项不匹配。
缩略语可以按任何顺序排列。
缩略语不能用于匹配多个项目词,而visa则相反。
缩略语只匹配单词的开头。
假设没有任何项将包含另一项的所有单词。例如,永远不会有beef burger和beef cheese burger。
鉴于这一清单:
beef burger
crispy chicken burger
grilled chicken burger
chicken nuggets
chocolate cone
strawberry cone
vanilla cone这些缩写给出了指定的输出:
fish Not found
cones Not found
chicken cone Not found
nilla Not found
v vanilla cone
be beef burger
c n chicken nuggets
b b beef burger
c b c crispy chicken burger
c b crispy,grilled?
bu beef,crispy,grilled?
or beef,crispy chicken,grilled chicken?
ch crispy,grilled,nuggets,cone?
or crispy chicken,grilled chicken,nuggets,cone?这是暗号高尔夫。12天内最短的答案(以字节为单位)赢得了接受。(我本来可以撑上一周的,但我不会为此而来。)
发布于 2015-10-16 22:23:22
它将缩写字符串转换为正则表达式,并尝试匹配搜索列表中的组。
三元运算if和elses为14字节。我尝试将其压缩到一个列表中,然后根据r状态访问其中一个项,但还没有更短的内容。
import re
def s(a,l):
r=[m.group(1)for e in l for m in[re.compile('^('+a.replace(' ','\w+ ')+'\w+)打电话给s(str, list):s('c n', ['chicken burger', 'chicken nuggets', 'cheeseburger'])
>>> chicken nuggets
s('c n', ['chicken burger', 'chicken nuggets', 'cheeseburger', 'chicken nuggets with sauce', 'foobar'])
>>> chicken nuggets
s('c n', ['chicken burger', 'chicken nuggets', 'cheeseburger', 'chicken nuggets with sauce', 'foobar', 'cfoo nbar'])
>>> chicken nuggets,cfoo nbar?).search(e)]if m]
print','.join(r)+'?'if len(r)>1 else r[0]if r else'Not found'打电话给s(str, list):
A7
https://codegolf.stackexchange.com/questions/60863
复制相似问题