import json def solution(postContentString, deltasString): postContent = json.loads(postContentString) deltas = json.loads(deltasString) # ------------------------------------- # Loop to each delta action from deltas. # ------------------------------------- for delta in deltas: # ---------------------- # Get delta action data. # ---------------------- try: delta_type = delta['type'] delta_pindex = delta['paragraphIndex'] # --------------------------------------- # Check if delta paragraph index is valid. # --------------------------------------- if delta_pindex < 0 or delta_pindex >= len(postContent['paragraphs']): continue except (KeyError, IndexError) as e: continue # ------------------------------ # Execute update paragraph delta. # ------------------------------ if delta_type == 'updateParagraph': try: delta_paragraph_text = delta['paragraph']['text'] postContent['paragraphs'][delta_pindex]['text'] = delta_paragraph_text except IndexError: continue # ---------------------------- # Execute add paragraph delta. # ---------------------------- elif delta_type == 'addParagraph': try: delta_paragraph = delta['paragraph'] postContent['paragraphs'].insert(delta_pindex, delta_paragraph) # ------------------ # Fix section index. # ------------------ i = delta_pindex while i < len(postContent['sections'][delta_pindex:]) + 1: postContent['sections'][i]['startIndex'] += 1 i += 1 except IndexError: continue # ------------------------------- # Execute delete paragraph delta. # ------------------------------- elif delta_type == 'deleteParagraph': try: postContent['paragraphs'].pop(delta_pindex) # ------------------ # Fix section index. # ------------------ # Fix section indexes after removal. i = delta_pindex while i < len(postContent['sections'][delta_pindex:]) + 1: postContent['sections'][i]['startIndex'] -= 1 i += 1 # Remove any empty section. i = 1 for i, section in enumerate(postContent['sections']): if section['startIndex'] <= 0: postContent['sections'].pop(i) except IndexError: continue # ------------------ # Print out results. # ------------------ try: # ------------------------------------------- # Extract sections and paragraph, after delta. # ------------------------------------------- sections = postContent['sections'] paragraphs = postContent['paragraphs'] # ------------------------ # Find all section indexes. # ------------------------ section_indexes = set() for section in sections: section_indexes.add(section['startIndex']) # --------------------------------------------------- # Loop over paragraphs to create the resulting string. # --------------------------------------------------- res = [] for i, paragraph in enumerate(paragraphs, start=1): if i == len(paragraphs): res.append(f'{paragraph["text"]}') elif i in section_indexes: res.append(f'{paragraph["text"]}\n-\n') else: res.append(f'{paragraph["text"]}\n') except (KeyError, ValueError) as e: print(f'Error: Input data is ill-formatted: {e}') return ''.join(res)