来自维基百科:
递归缩略词是指它所代表的表达式本身的首字母缩略词。
您的目标是检查字符串是否是递归缩略词。
您还必须给虚词。为了简单起见,每个单词都可以看作是一个虚词。
f("RPM Package Manager") => { true, [] }
f("Wine is not an emulator") => { true, ["an"] }
f("GNU is not Unix") => { true, ["is"] }
f("Golf is not an acronym") => { false }
f("X is a valid acronym") => { true, ["is","a","valid","acronym"] }
你可以给出一个完整的程序或函数。
输入字符串可以从STDIN中提取,也可以作为函数参数。
输出结果可以是真/假,0/1,是/否.
如果这是递归缩略词(即使列表是空的),则必须给出函数单词列表(列表的任何格式都是有效的)。您不必保留虚词的大写。
这是一个密码-高尔夫,最短的代码获胜。
发布于 2014-05-26 06:26:08
不是我不喜欢雷克斯。就是我不认识他们。
def f(x):
s=x.lower().split();w=list(s[0][1:]);s=s[1:];o=[]
if not w:return 1,s
[w.pop(0)if i[0]==w[0]else o.append(i)for i in s]
return(0,)if w else(1,o)
哦,我也有一个不打高尔夫球的版本:
def acronym(string):
scentence = string.lower().split()
word = scentence[0][1:]
scentence = scentence[1:]
over = []
if not word: return 1, scentence
for item in scentence:
if item[0] == word[0]:
word = word[1:]
else:
over.append(item)
if word:
return 0,
return 1,over
发布于 2014-05-26 12:20:04
f=s=>(r=(a=s.toUpperCase(i=1).split(' ')).map((w,c)=>c?a[0][i]==w[0]?(i++,''):w:''),a[0].length==i?1+r:0)
在Firefox的浏览器控制台中输入函数,然后调用该函数,如下所示:
f('ABC Black Cats') // 1,,
f('ABC is Black Cats') // 1,IS,,
f('ABC Clapping Cats') // 0
发布于 2014-05-27 01:37:05
这是有史以来第一次尝试高尔夫。考虑到这么长的关键字,我认为python不是最好的语言。而且,我不认为这个函数是万无一失的。它适用于OP的输入,但我相信我可以想出例外情况。
def f(s):
w=s.lower().split();r=list(w[0]);return(True,[x for x in w if x[0]not in r])if len(r)==1 or[x for x in[y[0]for y in w]if x in r]==r else False
https://codegolf.stackexchange.com/questions/28609
复制相似问题