file = open("md1.txt", encoding="utf-8") arr = [] for i in file: arr.append(i.rstrip("\n")) #print(arr) new_arr = [] new_arr.append(f"## **{arr.pop(0)}**") for _ in range(4): del arr[0] stek = [] p = False li_c = False li = False li_c2 = False for s in arr: if "Пример" in s: if p: new_arr.append(f"|||{'<br>'.join(stek).rstrip('<br>')}") else: new_arr.append("<br>".join(stek).rstrip("<br>")) p = True stek = [] new_arr.append(f"### **{s}**") elif p: if s == "Ввод\tВывод": if stek: new_arr.append(f"|||{'<br>'.join(stek).rstrip('<br>')}") new_arr.append("<br>".join(stek).rstrip("<br>")) stek = [] new_arr.append("|Ввод |Вывод|") new_arr.append("|-----|-----|") else: stek.append(s) elif s == "Формат ввода" or s == "Формат вывода" or s == "Примечание": new_arr.append("<br>".join(stek).rstrip("<br>")) stek = [] new_arr.append(f"### **{s}**") else: if s and s[-1] == ":": li_c = True stek.append(s) elif li_c: li_c = False if s == "": li = True new_arr.append("<br>".join(stek) + "<br>") stek = [] elif li: if not li_c2: if s[-1] == ";": li_c2 = True else: li = False stek.append(s) if li_c2: new_arr.append(f"* {s}") if s[-1] == ".": li = False new_arr.append("") li_c2 = False else: stek.append(s) new_arr.append(f"|||{'<br>'.join(stek[:-1]).rstrip('<br>')}") file.close() input_count = stek[-1] if len(input_count.split()) > 1: input_count = [int(i) for i in input_count.split()] elif input_count != "_": input_count = int(input_count) c = 0 for i in range(len(new_arr)): if new_arr[i][:3] == "|||": data = new_arr[i][3:].split("<br>") if input_count == "_": data = f"|{'<br>'.join(data)}||" elif isinstance(input_count, list): in_c = input_count[c] if in_c > 0: if 2 * in_c > len(data): data = f"|{'<br>'.join(data[:in_c])}<br>|{'<br>'.join(data[in_c:])}<br>{'<br>'.join([' '] * (2 * in_c - len(data)))}<br>|" elif 2 * in_c == len(data): data = f"|{'<br>'.join(data[:in_c])}<br>|{'<br>'.join(data[in_c:])}<br>|" else: data = f"|{'<br>'.join(data[:in_c])}<br>{'<br>'.join([' '] * (len(data) - 2 * in_c))}<br>|{'<br>'.join(data[in_c:])}<br>|" else: if -2 * in_c > len(data): data = f"|{'<br>'.join(data[:len(data) + in_c])}<br>{'<br>'.join([' '] * (-2 * in_c - len(data)))}<br>|{'<br>'.join(data[:-1 * in_c])}<br>|" elif -2 * in_c == len(data): data = f"|{'<br>'.join(data[:-1 * in_c])}<br>|{'<br>'.join(data[-1 * in_c:])}<br>|" else: data = f"|{'<br>'.join(data[:len(data) + in_c])}<br>|{'<br>'.join(data[len(data) + in_c:])}<br>{'<br>'.join([' '] * (len(data) - -2 * in_c))}<br>|" c += 1 elif input_count > 0: if 2 * input_count > len(data): data = f"|{'<br>'.join(data[:input_count])}<br>|{'<br>'.join(data[input_count:])}<br>{'<br>'.join([' '] * (2 * input_count - len(data)))}<br>|" elif 2 * input_count == len(data): data = f"|{'<br>'.join(data[:input_count])}<br>|{'<br>'.join(data[input_count:])}<br>|" else: data = f"|{'<br>'.join(data[:input_count])}<br>{'<br>'.join([' '] * (len(data) - 2 * input_count))}<br>|{'<br>'.join(data[input_count:])}<br>|" else: if -2 * input_count > len(data): data = f"|{'<br>'.join(data[:len(data) + input_count])}<br>{'<br>'.join([' '] * (-2 * input_count - len(data)))}<br>|{'<br>'.join(data[:-1 * input_count])}<br>|" elif -2 * input_count == len(data): data = f"|{'<br>'.join(data[:-1 * input_count])}<br>|{'<br>'.join(data[-1 * input_count:])}<br>|" else: data = f"|{'<br>'.join(data[:len(data) + input_count])}<br>|{'<br>'.join(data[len(data) + input_count:])}<br>{'<br>'.join([' '] * (len(data) - -2 * input_count))}<br>|" new_arr[i] = data for i in range(len(new_arr)): if new_arr[i] and (new_arr[i][0] == "|" or new_arr[i][0] == "#"): continue elems = new_arr[i].split("<br>") # ВЫДЕЛАЕТ ОТДЕЛЬНЫЕ БУКВЫ del_ind = [] for j in range(len(elems) - 1): if len(elems[j]) == 1 and elems[j] == elems[j + 1][0]: del_ind.append(j) if del_ind: for j in del_ind[::-1]: if j: buff = elems.pop(j + 1) if elems[j - 1][-1] == ".": elems[j] = "$" + buff[0] + "$" + buff[1:] else: elems[j - 1] = elems[j - 1] + "$" + buff[0] + "$" + buff[1:] del elems[j] # ВЫДЕЛЯЕТ ВЫРАЖЕНИЯ del_ind = [] for j in range(len(elems)): if not elems[j]: continue string = elems[j].split() first_word = string[0] if len(first_word) <= j and ''.join(elems[j - len(first_word):j]) == first_word: f = False signs = ["+", "-", "*", "/", "%", "=", "<", ">", "≤", "≥"] for sign in signs: if sign in first_word: f = True if not f: continue del_ind.append([count for count in range(j - len(first_word), j)]) if del_ind: for j in del_ind[::-1]: ind = j[-1] + 1 buff = elems[ind].split() if elems[j[0] - 1][-1] == ".": elems[ind] = "$" + buff[0] + "$ " + " ".join(buff[1:]) for k in j[::-1]: if k: del elems[k] else: elems[j[0] - 1] = elems[j[0] - 1] + "$" + buff[0] + "$ " + ' '.join(buff[1:]) del elems[ind] for k in j[::-1]: if k: del elems[k] # ВЫДЕЛЯЕТ ДРУГИЕ ВЫРАЖЕНИЯ del_ind = [] for j in range(len(elems) - 1): if not elems[j]: continue eq = elems[j].split()[0] f = False signs = ["+", "-", "*", "/", "%", "=", "<", ">", "≤", "≥"] for num in range(10): signs.append(str(num)) for sign in signs: if sign in eq: f = True if not f or len(eq) == 1: continue print(eq) if ")" in eq: eq = eq[:eq.index(")")] if " " in eq: eq = eq[:-1] if elems[j - 1] == elems[j + 1]: f = False for ind in range(j - 3, -1, -1): if eq == "".join(elems[ind:j - 1]): f = True break if not f: continue del_ind.append([count for count in range(ind, j - 1)] + [j - 1, False]) else: f = False for ind in range(j - 2, -1, -1): if eq == "".join(elems[ind:j]): f = True break if not f: continue del_ind.append([count for count in range(ind, j)] + [True]) if del_ind: for j in del_ind[::-1]: if j[-1]: buff = elems.pop(j[-2] + 1) if ")" in buff: ind = buff.index(")") elems[j[0] - 1] = elems[j[0] - 1] + "$" + buff[:ind] + "$" + buff[ind:] else: elems[j[0] - 1] = elems[j[0] - 1] + "$" + buff + "$" for k in j[::-1][1:]: del elems[k] else: buff = elems.pop(j[-2] + 1) elems[j[0] - 1] = elems[j[0] - 1] + "$" + buff[:-1] + "^" + elems[j[-2]] + "$" elems[j[0] - 1] = elems[j[0] - 1] + elems[j[-2] + 2][1:] del elems[j[-2] + 2] del elems[j[-2] + 1] del elems[j[-2]] for k in j[::-1][2:]: del elems[k] # ДЕЛАЕТ $x_i$ del_ind = [] for j in range(len(elems) - 4): if [elems[j] + " ", elems[j + 1]] == [elems[j + 2], elems[j + 3]] and elems[j + 4] == "\u200b": del_ind.append([j, j + 1]) if del_ind: for j in del_ind[::-1]: if j: buff = f"${elems[j[0]]}_{elems[j[1]]}$" if j[0] != 0: elems[j[0] - 1] = elems[j[0] - 1] + buff + elems[j[1] + 4][1:] else: elems[j[0]] = buff + elems[j[1] + 4][1:] for count in range(4, -1, -1): del elems[j[1] + count] if j[0] != 0: del elems[j[0]] new_arr[i] = "<br>".join(elems) new_file = open("md1.txt", "w+", encoding="utf-8") for s in new_arr: new_file.write(s + "\n") new_file.close() print(*new_arr, sep="\n")