Day 3: Mull It Over
Megathread guidelines
- Keep top level comments as only solutions, if you want to say something other than a solution put it in a new post. (replies to comments can be whatever)
- You can send code in code blocks by using three backticks, the code, and then three backticks or use something such as https://topaz.github.io/paste/ if you prefer sending it through a URL
FAQ
- What is this?: Here is a post with a large amount of details: https://programming.dev/post/6637268
- Where do I participate?: https://adventofcode.com/
- Is there a leaderboard for the community?: We have a programming.dev leaderboard with the info on how to join in this post: https://programming.dev/post/6631465
I did part 2 live with the python interactive shell. I deleted all the stuff where I was just exploring ideas.
part 1:
import re def multiply_and_add(data: "str") -> int: digit_matches = re.findall(r"mul\(\d{0,3},\d{0,3}\)", data) result = 0 for _ in digit_matches: first = _.split("(")[1].split(")")[0].split(",")[0] second = _.split("(")[1].split(")")[0].split(",")[1] result += int(first) * int(second) return result with open("input") as file: data = file.read() answer = multiply_and_add(data) print(answer)
part 2:
Python 3.11.2 (main, Aug 26 2024, 07:20:54) [GCC 12.2.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import solution2 <re.Match object; span=(647, 651), match='do()'> >>> from solution2 import * >>> split_on_dont = data.split("don't()") >>> valid = [] >>> valid.append(split_on_dont[0]) >>> for substring in split_on_dont[1:]: ... subsubstrings = substring.split("do()", maxsplit=1) ... for subsubstring in subsubstrings[1:]: ... valid.append(subsubstring) ... >>> answer = 0 >>> for _ in valid: ... answer += multiply_and_add(_) ... >>> answer 103811193