Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #The nth term of the sequence of triangle numbers is given by,
- #tn = (n(n+1))/2; 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 (right click and 'Save Link/Target As...'), a 16K text
- #file containing nearly two-thousand common English words,
- #how many are triangle words?
- #An integer x is triangular if and only if 8x + 1 is a square.
- #Source: http://en.wikipedia.org/wiki/Triangular_number
- #Section: Triangular roots and tests for triangular numbers
- import string
- def isPerfectSquare(n):
- if n < 0:
- return False
- result = int(n**0.5)
- return result*result == n
- def isTriangle(n):
- return isPerfectSquare((8*n)+1)
- def namesFile2List(fileName):
- namesHandle = open(fileName,'r')
- namesString = namesHandle.readline()
- namesHandle.close()
- namesListTemp = namesString.split(',')
- namesList = []
- for i in namesListTemp:
- namesList.append(i.strip('"'))
- return namesList
- def createUCCoder():
- coderDict = {}
- upperCase = string.ascii_uppercase
- for i in range(len(upperCase)):
- coderDict[upperCase[i]] = i+1
- return coderDict
- namesList = namesFile2List('words.txt')
- coderDict = createUCCoder()
- numOfTriWords = 0
- for name in namesList:
- wordValue = 0
- for letter in name:
- wordValue += coderDict[letter]
- if isTriangle(wordValue):
- numOfTriWords += 1
- print numOfTriWords
Advertisement
Add Comment
Please, Sign In to add comment