0042 编码三角数
* * * *
拉格朗日计划
* * * *
编码三角数

第n个三角数是$t_n=n(n+2)/2$,前十个三角数依次是$1, 3, 6, 10, 15, 21, 28, 36, 45, 55, \ldots$

定义每个英语字母的价值为其在字母表中的位置次序,例如A的价值是1,Z的价值是26。

单词的价值是其组成字母的价值之和,例如SKY的价值是$19+11+25=55=t_{10}$。

若一个单词的价值是三角数,就称该单词是三角单词。在words.txt中共有将近两千个常用单词,其中有多少个三角单词?

本题难度:



解答

首先生成足够多的三角数(我取了100个),然后计算每个单词的价值并检查其是否在列表中,结果是$162$。

with open("042_words.txt") as f:
  for line in f:
    words=[w[1:-1] for w in line.split(",")]

t=set([n*(n+1)/2 for n in range(1,101)])

print sum(sum(ord(a)-64 for a in w) in t for w in words)