class aminosav:
    def __init__(self,lst):
        self.az=lst[0]
        self.b =lst[1]
        self.C =lst[2]
        self.H =lst[3]
        self.O =lst[4]
        self.N =lst[5]
        self.S =lst[6]
   
    def atomtomeg(self):
        return  self.C*12 + self.H*1 + self.O*16 + self.N*14 + self.S*32
   
    def szotar(self):
        return {'C':self.C,'H':self.H,'O':self.O,'N':self.N,'S':self.S}

matrix=[]
   
def kiir(ssz,sz):
    print('********************************************************************')
    print(f'* {ssz}. feladat - {sz}')
    print('********************************************************************')
       
def F1():
    kiir(1, 'Adatok beolvasása...')
    fbe=open('aminosav.txt','r')
   
    i=1
    tmp=[]
    for sor in fbe:         # 1 2 3 4 5 6 7
        if i<7:
            tmp.append(sor.strip())
            i+=1
        else:
            tmp.append(sor.strip())     # 7. elem itt kerül bele
            tmp[2:]=map(int,tmp[2:])
            matrix.append(aminosav(tmp))
            tmp.clear()
            i=1
           
    print(len(matrix))
   
def F2():
    for amin in matrix:
        print(f'{amin.az} {amin.atomtomeg()}')
   
def F3():
    kiir(3,'Atomtömegek rendezetten')
    m_sorted=sorted(matrix, key=lambda x:x.atomtomeg())
    for amin in m_sorted:
        print(f'{amin.az} {amin.atomtomeg()}')
   
def F4():
    kiir(4,'BSA összegképlete...')
    global bsa
    bsa=[sor.strip() for sor in open('bsa.txt','r')]
    atom={'C':0,'H':0,'O':0,'N':0,'S':0}
    for elem in bsa:
        for amin in matrix:
            if elem==amin.b:
                for k, v in amin.szotar().items():
                    atom[k]+=v
   
    kapcsolodas=len(bsa)-1
    atom['H']-=2*kapcsolodas
    atom['O']-=kapcsolodas
    for k,v in atom.items():
        print(f'{k} {v}',end=' ')
    print()

def F5():
    kiir(5,'Hasítás során keletkező leghosszabb lánc...')
    # a Tirozin (Y), Fenilalanin (W) és a Triptofán (F) után hasít
    hasit={'Y','W','F'}
    maxh=[0]*3
    kezdete=1
    for i, elem in enumerate(bsa,start=1):
        if elem in hasit:
            vege=i
            hossz=vege-kezdete+1
            if hossz>maxh[0]:
                maxh[0]=hossz
                maxh[1]=kezdete
                maxh[2]=vege
            kezdete=vege+1
    print(f'Leghosszabb lánc: {maxh[0]}')
    print(f'.........kezdete: {maxh[1]}')
    print(f'............vége: {maxh[2]}')
             
def F6():
    kiir(6,'Másik hasítás során keletkező első lánc vizsgálata...')
    # Arginin (R) után hasít, de csak akkor, ha Alinin (A) vagy Valin (V) követi
    hasit={'RA','RV'}
    for i in range(len(bsa)-1):
        if bsa[i]+bsa[i+1] in hasit:
            elso=bsa[:i+1]
            C=elso.count('C')
            break
    print(f'A hasítás során keletkező első fehérjelánc részletben:\n{C} Cisztein (C) található.')
       
F1()
# F2()
F3()
F4()
F5()
F6()
