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

  • TunaCowboy@lemmy.world
    link
    fedilink
    arrow-up
    1
    ·
    edit-2
    19 hours ago

    python

    solution
    import re
    import aoc
    
    def setup():
        return (aoc.get_lines(2), 0)
    
    def safe(data):
        order = 0 if data[0] < data[1] else 1
        for i in range(0, len(data) - 1):
            h = data[i]
            t = data[i + 1]
            d = abs(h - t)
            if d not in [1, 2, 3] or (order == 0 and h >= t) or (
                    order == 1 and h <= t):
                return False
        return True
    
    def one():
        lines, acc = setup()
        for l in lines:
            if safe([int(x) for x in re.findall(r'\d+', l)]):
                acc += 1
        print(acc)
    
    def two():
        lines, acc = setup()
        for l in lines:
            data = [int(x) for x in re.findall(r'\d+', l)]
            for i in range(len(data)):
                if safe(data[:i] + data[i + 1:]):
                    acc += 1
                    break
        print(acc)
    
    one()
    two()