Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import re
- from itertools import product, chain
- text = re.sub(r"[^\d\n*.]", ".", open(0).read())
- vertical_null = [
- r" [\d*.] [\d*.] \. \. \. [\d*.] [\d*.] ",
- ]
- vertical_options = [
- r" [\d*.] \. ( \d ) \. \. [\d*.] [\d*.] ",
- r" [\d*.] [\d*.] \. ( \d ) \. [\d*.] [\d*.] ",
- r" [\d*.] [\d*.] \. \. ( \d ) \. [\d*.] ",
- r" \. ( \d \d ) \. \. [\d*.] [\d*.] ",
- r" [\d*.] \. ( \d \d ) \. [\d*.] [\d*.] ",
- r" [\d*.] [\d*.] \. ( \d \d ) \. [\d*.]",
- r" [\d*.] [\d*.] \. \. ( \d \d ) \. ",
- r"( \d \d \d ) \. \. [\d*.] [\d*.] ",
- r" \. ( \d \d \d ) \. [\d*.] [\d*.] ",
- r" [\d*.] \. ( \d \d \d ) \. [\d*.] ",
- r" [\d*.] [\d*.] \. ( \d \d \d ) \. ",
- r" [\d*.] [\d*.] \. \. ( \d \d \d )",
- ]
- vertical_special = [
- r" [\d*.] \. ( \d ) \. ( \d ) \. [\d*.] ",
- r" \. ( \d \d ) \. ( \d ) \. [\d*.] ",
- r"( \d \d \d ) \. ( \d ) \. [\d*.] ",
- r" [\d*.] \. ( \d ) \. ( \d \d ) \. ",
- r" [\d*.] \. ( \d ) \. ( \d \d \d )",
- r" \. ( \d \d ) \. ( \d \d ) \. ",
- r"( \d \d \d ) \. ( \d \d ) \. ",
- r" \. ( \d \d ) \. ( \d \d \d )",
- r"( \d \d \d ) \. ( \d \d \d )",
- ]
- left_null = [
- r" [\d*.] [\d*.] \. ",
- ]
- left_options = [
- r"( \d \d \d )",
- r" \. ( \d \d )",
- r" \. \. ( \d )",
- ]
- right_null = [
- r" \. [\d*.] [\d*.] ",
- ]
- right_options = [
- r"( \d ) \. \. ",
- r"( \d \d ) \. ",
- r"( \d \d \d )",
- ]
- option_products = [
- product(vertical_options, left_options, right_null , vertical_null ),
- product(vertical_options, left_null , right_options, vertical_null ),
- product(vertical_options, left_null , right_null , vertical_options),
- product(vertical_null , left_options, right_null , vertical_options),
- product(vertical_null , left_null , right_options, vertical_options),
- product(vertical_null , left_options, right_options, vertical_null ),
- product(vertical_special, left_null , right_null , vertical_null ),
- product(vertical_null , left_null , right_null , vertical_special),
- ]
- pattern = []
- for above, left, right, below in chain.from_iterable(option_products):
- above, left, right, below = above.replace(" ", ""), left.replace(" ", ""), right.replace(" ", ""), below.replace(" ", "")
- pattern.append(rf"(?:(?<={above}.{{134}}{left})\*(?={right}.{{134}}{below}))")
- pattern = "|".join(pattern)
- pattern = rf"(?s)(?:{pattern})"
- pattern = re.compile(pattern)
- res = re.findall(pattern, text)
- print(sum(int(x) * int(y) for x, y in [(*filter(None, x),) for x in res]))
Advertisement
Add Comment
Please, Sign In to add comment