def std_update(grades_filename, ar_filename):
    # ini
    n_est = n_ok = 0
    
    with open(ar_filename, 'r') as fin:
        # ini read
        d = {}
        fin.readline()
        fin.readline()
        for line in fin:
            # read
            lineL = line.strip().split(',')
            # construct
            d[lineL[0]] = lineL[1:]

    errorL = []
    with open(grades_filename, 'r') as fin:
        fin.readline()
        fin.readline()
        for line in fin:
            # read & convert
            lineL = line.strip().split(',')
            sin = lineL[0]
            if sin in d:
                # compute
                subject = grades_filename.split('_')[2]
                avg = compute_avg_grade(lineL[1:])
                # update
                d[sin].extend([subject, str(avg)])
                n_ok += 1
            else:
                errorL.append(sin)
            n_est += 1
        
    with open(ar_filename, 'w') as fout:
        fout.write('IDN,NAME,GROUP,SUBJECTS\n')
        fout.write('=======================\n')
        for sin, restL in d.items():
            newlineL = [sin] + restL
            newline = ','.join(newlineL) + '\n'
            fout.write(newline)
                         
    return n_est, n_ok, errorL
    
def compute_avg_grade(str_gradesL):
    gradesL = [float(g) for g in str_gradesL]
    gradesL.remove(min(gradesL))
    return round(sum(gradesL) / len(gradesL), 2)
