Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class LinkedList:
- def __init__(self, array):
- self.first = Node("", 1, None, None)
- current_el = self.first
- for element in array:
- if current_el.value == element:
- current_el.count += 1
- else:
- current_el.next_el = Node(element, 1, current_el, None)
- current_el = current_el.next_el
- @staticmethod
- def insert_before(insertable_el, count_insertable_el, el_in_array):
- node = Node(insertable_el, count_insertable_el, el_in_array.past_el, el_in_array)
- if el_in_array.past_el is not None:
- el_in_array.past_el.next_el = node
- el_in_array.past_el = node
- @staticmethod
- def insert_after(insertable_el, count_insertable_el, el_in_array):
- node = Node(insertable_el, count_insertable_el, el_in_array, el_in_array.next_el)
- if el_in_array.next_el is not None:
- el_in_array.next_el.past_el = node
- el_in_array.next_el = node
- @staticmethod
- def delete_char(char):
- left = char.past_el
- left.next_el = char.next_el
- right = char.next_el
- if right is not None:
- right.past_el = left
- if left.value == right.value:
- LinkedList.union(left, right)
- return left
- @staticmethod
- def union(left, right):
- left.count += right.count
- left.next_el = right.next_el
- if right.next_el is not None:
- right.next_el.past_el = left
- def __str__(self):
- text_in_list = []
- current_el = self.first.next_el
- while current_el is not None:
- text_in_list.append(current_el.value * current_el.count)
- current_el = current_el.next_el
- return "".join(text_in_list)
- class Node:
- def __init__(self, value, count, past_el, next_el):
- self.value = value
- self.count = count
- self.past_el = past_el
- self.next_el = next_el
- def main():
- initial_code = input()
- code_mutants = LinkedList(initial_code)
- message_about_modifiers = input()
- modifiers = dict()
- for letter in message_about_modifiers:
- if letter in modifiers.keys():
- modifiers[letter] += 1
- else:
- modifiers[letter] = 1
- for letter_in_alp in sorted(modifiers.keys(), reverse=True):
- current_el = code_mutants.first.next_el
- while True:
- if letter_in_alp < current_el.value:
- code_mutants.insert_before(letter_in_alp, modifiers[letter_in_alp], current_el)
- break
- elif letter_in_alp > current_el.value:
- if current_el.next_el is None:
- if modifiers[letter_in_alp] % 2 == 0:
- break
- else:
- code_mutants.insert_after(letter_in_alp, 1, current_el)
- break
- else:
- current_el = current_el.next_el
- else:
- if current_el.next_el is None or current_el.next_el.value < letter_in_alp:
- if current_el.count <= modifiers[letter_in_alp]:
- modifiers[letter_in_alp] -= current_el.count
- current_el = code_mutants.delete_char(current_el)
- if modifiers[letter_in_alp] == 0:
- break
- else:
- current_el.count -= modifiers[letter_in_alp]
- break
- else:
- current_el.count += modifiers[letter_in_alp]
- break
- print(str(code_mutants))
- if __name__ == "__main__":
- main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement