[-] Hammerheart@programming.dev 1 points 9 months ago

What do you think it is?

[-] Hammerheart@programming.dev 1 points 9 months ago

How does that work?

[-] Hammerheart@programming.dev 1 points 1 year ago

My first insinct was similar, add line breaks to the do and dont modifiers. But I got toa caught up thinking id have to keep track of the added characters, I wound up just abusing split()-

[-] Hammerheart@programming.dev 1 points 1 year ago

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
[-] Hammerheart@programming.dev 1 points 1 year ago

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.

[-] Hammerheart@programming.dev 1 points 1 year ago
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)
[-] Hammerheart@programming.dev 1 points 2 years ago

Vimgolf is really cool, thanks for sharing

[-] Hammerheart@programming.dev 1 points 2 years ago

What a great read! Thanks so much for sharing this.

[-] Hammerheart@programming.dev 1 points 2 years ago

In case this thread turns up a google search, or anyone is keeping score, I think I more or less managed to achieve what I wanted by putting this is in my config:

assign [class="Firefox-esr"]  "2"
exec wezterm -e cmus
 exec swaymsg [app_id="org.wezfurlong.wezterm"] focus
 exec swaymsg move container to workspace "10"
 exec firefox

the only thing i don't love is that if quit cmus, it closes the window instead of bringing me back to the shell. maybe i have so chain commands or something, i don't know. i'm happy to have made it this far. Another thing is I don't know if it's possible to distinguish between the specific instance of wezterm that's running cmus, and the other one i want running on workspace 1.

[-] Hammerheart@programming.dev 1 points 2 years ago

I want my terminal to start on workspace one. Since this is default behavior of adding 'exec ' to my sway config, this requirement is satisfied. I also want Firefox to start up on workspace 2. And I would like another terminal to open on workspace 10, but to automatically run cmus, a terminal music player.

[-] Hammerheart@programming.dev 1 points 2 years ago

I picked the same second and third choice, dont feel too bad.

[-] Hammerheart@programming.dev 1 points 2 years ago

This is what i did, started using vim motions in pycharm. I use nvm for small edits, but plan to make it my daily driver soon.

view more: โ€น prev next โ€บ

Hammerheart

0 post score
0 comment score
joined 2 years ago