| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- import os, argparse
- def solve_task(lines):
- messages = []
- for line in lines:
- if line == "":
- continue
- else:
- messages.append(Packet(line))
-
- d1 = Packet("[[2]]")
- d2 = Packet("[[6]]")
- messages.append(d1)
- messages.append(d2)
- messages.sort()
-
- i1 = messages.index(d1)+1
- i2 = messages.index(d2)+1
- print(f"Divider packages at index {i1} and {i2}")
- print(f"Decoder key: {i1*i2}")
- class Packet:
- def __init__(self, line) -> None:
- self.package = eval(line)
-
- def __lt__(self, other):
- return compare(self.package, other.package)
- def compare(left,right):
- if isinstance(left, int) and isinstance(right, int):
- if left == right:
- return "undetermined"
- else:
- return left < right
- elif isinstance(left, int):
- return compare([left], right)
- elif isinstance(right, int):
- return compare(left, [right])
- else:
- for i in range(min(len(left), len(right))):
- comp = compare(left[i], right[i])
- if comp == "undetermined":
- continue
- else:
- return comp
- if len(left) < len(right):
- return True
- elif len(right) < len(left):
- return False
- else:
- return "undetermined"
- def read_lines(filename):
- lines = []
- with open(filename) as infile:
- for raw_line in infile:
- line = raw_line.rstrip()
- lines.append(line)
- return lines
- def parse_arguments():
- parser = argparse.ArgumentParser(description="Script that solves the case",epilog="Have a nice day!")
- parser.add_argument('filename', nargs='?', default="example.txt", help='Input file')
- args = parser.parse_args()
- return args
- def main():
- args = parse_arguments()
- lines = read_lines(args.filename)
- solve_task(lines)
- if __name__ == "__main__":
- main()
|