标签:
Coded triangle numbers
Problem 42
The nth term of the sequence of triangle numbers is given by,tn=1/2n(n+1);so the first ten triangle numbers are:
1, 3, 6, 10, 15, 21, 28, 36, 45, 55, ...
By converting each letter in a word to a number corresponding to its alphabetical position and adding these values we form a word value.
For example,the word value for SKY is 19+11+25=55=t10. If the word value is a triangle number then we shall call the word a triangle word.
Using words.txt, a 16K text file containing nearly two-thousand common English words,how many are triangle words?
三角形数序列中第n项的定义为:tn=1/2n(n+1);因此前十个三角形数是:
1, 3, 6, 10, 15, 21, 28, 36, 45, 55,...
通过将一个单词中每个字母在字母表中的位置值加起来,我们可以将一个单词转换为一个数。例如,单词SKY的值为19+11+25=55=t10。
如果单词的值是个三角形数,我们称这个单词为三角形单词。
words.txt是个16k的txt文本,里面大约有2000多个单词。求在这个文件中,一个有多少个三角形词?
注:题目链接 :https://projecteuler.net/problem=42
words.txt里的单词如图所示:
在这里我对该文本进行了如下的处理
cat words.txt | tr ‘,‘ ‘\n‘ >Problem_42.txt #将文档处理成图1的形式 cat Problem_42.txt | tr -d ‘"‘>words.txt #将文档处理成图2的形式
第一句话是将文档中的‘,‘换成‘\n‘。
第二句话是将文档中的‘“’删除 (-d)(delete)
注:tr命令的用法 自己可以去查资料
具体的代码如下:
#!/bin/bash #2015-10-10 #Coded_Triangle_Numbers.sh #Guth word_num=0; SUM=0; start=$(date +%s)
#cat words.txt | tr ‘,‘ ‘\n‘ >Problem_42.txt #cat Problem_42.txt | tr -d ‘"‘>words.txt while read line do for word in $line do for((i=0;i<${#word};i++)) do var=`printf "%d" "‘${word:$i:i}"` let var=$var-64; let word_num+=$var; done for i in 1 3 6 10 15 21 28 36 45 55 66 78 91 105 120 136 153 171 190 do if [[ $word_num -eq i ]] then let SUM=SUM+1; fi done word_num=0; done done < words.txt echo $SUM end=$(date +%s) difference=$((end - start)) echo Time taken to execute commands is $difference seconds!
Guth 小结:
如果喜欢用编程解决数学问题可以去看看project euler
这学期刚开了一门课:linux操作系统,她很惊艳。
这道题花了我一个下午的时间,刚刚接触她。
许许多多东西都不懂,代码写的也比较笨重。
今天是一次尝试。
希望我能在这条路上越走越远...
标签:
原文地址:http://www.cnblogs.com/Guth/p/4868192.html