Trikotniška Vsota

Trikotniška Vsota

Avtor: Petra Velikanje

Besedilo naloge

The nth term of the sequence of triangle numbers is given by, tn = ½n(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 (right click and 'Save Link/Target As...'), a 16K text file containing nearly two-thousand common English words, how many are triangle words?

Opis problema in ideja rešitve

Sestaviti moram program, ki bo na dani datoteki poiskal vse besede, katerih seštevek črk bo trikotno število. Črke spremenimo glede na položaj v abecedi. Ideja rešitve je taka da napišem program, ki bo šel čez datoteko in pri tem računal vsoto posamezne besede.

Razlaga algoritma

Naloge sem se lotila tako da sem znotraj metode trikotniskaBeseda(), ki dobi za parameter ima datoteke, definirala abecedo. To sem naredila tako, da črke podala v seznamu. Isto sem naredila za števila 1 do 26. Nato sem izračunala še trikotniška števila. Predpostavila sem, da vsota besede ne bo večja od 500-tega trikotniškega števila. Nato sem najprej iz datoteke prebrala vse besede in jih shranila v seznam. Nato šla s for zanko čez seznam in vsako črko spremenila v število in števila seštevala. Dobila sem seznam vsot. Na koncu pa sem z for zanko pogledala koliko je vsot je enakih kot trikotniška števila. Pri tem sem definirala tudi števec, ki se je povečeval če je bila kakšna vsota enaka trikotniškemu številu.

Testranje programa

Koda v Pythonu

 def trikotniskaBeseda(imeDatoteke):
    '''Funkcija trikotniskaBeseda() nam prešteje trikotniške besede, ki so podane v
        datoteki, ki jo funkcija dobi za parameter.'''
    abeceda=['A','B','C','D','E','F','G','H','I','J','L','K','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z']
    pretvorba=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26]
    stevila=[]
    for i in range(1,500):#naredimo seznam prvih 500 trikotniških števil.
        a=int((i/2)*(i+1))
        stevila.append(a)
    sez=[]
    sez1=[]
    niz=''
    stevilo=0
    with open (imeDatoteke) as f:#iz txt datoteke preberemo vse besede v seznam sez
        for line in f:
            sez.append(line)
    vsota=0
    for j in sez[0]:#Gremo skozi seznam in vsako črko spremenimo v število in besedo spremenimo v vsoto.
                    #dobimo seznam vsot.
        if j in abeceda:
            vsota+=pretvorba[abeceda.index(j)]
        else:
            sez1.append(vsota)
            vsota=0
    for k in sez1:#nazadje pa še pregledamo ali je vsota trikotniško število. to naredimo tako, da
                #da se s for zanko sprehodimo skozi seznam vsot in pri tem povečujemo števec trikotnih števil.
        if k in stevila:
            stevilo+=1
    return stevilo

Testiranje programa

0%
0%