Day 2: Red-Nosed Reports
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://blocks.programming.dev 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/22323136
- 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
def is_safe(report: list[int]) -> bool: global removed acceptable_range = [_ for _ in range(-3,4) if _ != 0] diffs = [] if any([report.count(x) > 2 for x in report]): return False for i, num in enumerate(report[:-1]): cur = num next = report[i+1] difference = cur - next diffs.append(difference) if difference not in acceptable_range: return False if len(diffs) > 1: if diffs[-1] * diffs[-2] <= 0: return False return True with open('input') as reports: list_of_reports = reports.readlines()[:-1] count = 0 failed_first_pass = [] failed_twice = [] for reportsub in list_of_reports: levels = [int(l) for l in reportsub.split()] original = levels.copy() if is_safe(levels): safe = True count += 1 else: failed_first_pass.append(levels) for report in failed_first_pass: print(report) working_copy = report.copy() for i in range(len(report)): safe = False working_copy.pop(i) print("checking", working_copy) if is_safe(working_copy): count += 1 safe = True break else: working_copy = report.copy() print(count)
this took me so fucking long and in the end i just went for brute force anyway. there are still remnants of some of previous, overly complicated, failed attempts, like the hideous
global removed
. In the end, I realized I was fucking up by using remove() instead of pop(), it was causing cases with duplicates where the removal of one would yield a safe result to count as unsafe.