Chais

joined 2 years ago
[–] Chais@sh.itjust.works 11 points 5 days ago (1 children)

Someone clearly had a fun photo shoot. 😄

[–] Chais@sh.itjust.works 5 points 1 week ago

Microsoft can't be trusted

[–] Chais@sh.itjust.works 10 points 1 week ago

People want to travel to the USA still? Bizarre.

[–] Chais@sh.itjust.works 1 points 1 week ago (1 children)

The reason I compare them to autocomplete is that they're token predictors, just like autocomplete.
They take your prompt and predict the first word of the answer. Then they take the result and predict the next word. Repeat until a minimum length is reached and the answer seems complete. Yes, they're a tad smarter than autocorrect, but they understand just as little of the text they produce. The text will be mostly grammatically correct, but they don't understand it. Much like a compiler can tell you if your code is syntactically correct, but can't judge the logic.

[–] Chais@sh.itjust.works 0 points 2 weeks ago

Getting an explanation is one thing, getting a complete solution is another. Even if you then verify with a more suited tool. It's still not your solution and you didn't fully understand it.

[–] Chais@sh.itjust.works 14 points 2 weeks ago* (last edited 1 week ago) (6 children)

Or, and hear me out on this, you could actually learn and understand it yourself! You know? The thing you go to university for?
What would you say if, say, it came to light that an engineer had outsourced the statical analysis of a bridge to some half baked autocomplete? I'd lose any trust in that bridge and respect for that engineer and would hope they're stripped of their title and held personally responsible.

These things currently are worse than useless, by sometimes being right. It gives people the wrong impression that you can actually rely on them.

Edit: just came across this MIT study regarding the cognitive impact of using LLMs: https://arxiv.org/abs/2506.08872

[–] Chais@sh.itjust.works 4 points 2 weeks ago

Spezifisch die CSU. Es gibt kein Niveau das die nicht unterbieten.

[–] Chais@sh.itjust.works 1 points 2 weeks ago (2 children)

Not sure where you take the N from. Plus it's needlessly derogatory. How about FMAGA instead? Because F MAGA!

[–] Chais@sh.itjust.works 5 points 2 weeks ago (1 children)

Wouldn't that be a great use case for a QR-code?

[–] Chais@sh.itjust.works 1 points 3 weeks ago* (last edited 3 weeks ago) (1 children)

Didn't weigh them before drying because they were still on the branches. But post drying the flowers were very brittle and in the swamp bags the hygrometer initially showed <30% humidity. It eventually crept up to ~55% over the two week cure, thanks to the Boveda packs.

[–] Chais@sh.itjust.works 2 points 3 weeks ago

Well, Wile E. Coyote, no? Road Runner just runs away.

[–] Chais@sh.itjust.works 1 points 3 weeks ago

Ist ein schönes Land. Aber die Leute… 🙄

 

First tent-grow. Zkittlez OG Auto from Barney's Farm. Today marks day 70 since putting the seed into the peat pad. I expect maybe a week more. Two, tops.

12
Stuck on day 6, part 2 (sh.itjust.works)
submitted 6 months ago* (last edited 6 months ago) by Chais@sh.itjust.works to c/advent_of_code@programming.dev
 

I'm not looking for a solution or even code, just a hint. Here's what I currently do:

  1. Add the current position and heading to the recorded path
  2. Check if turning right would lead back onto the recorded path in the same direction we walked it before
  3. Check if the next field is obstructed
    1. If so, turn right
    2. Repeat until no longer blocked
  4. Update current position

This approach works fine for the unit test, but yields a result too low for the puzzle input. I tried adding recursion to the party check, but even 20 levels of recursion didn't sufficiently increase the amount of options found, suggesting I'm missing a mechanism to identify them.

Any clues?

Current state of affairs:

from math import sumprod
from operator import add
from pathlib import Path


def parse_input(input: str) -> list[list[int]]:
    return input.strip().splitlines()


def find_guard(world: list[list[int]]) -> tuple[int]:
    for y, line in enumerate(world):
        x = line.find("^")
        if x > -1:
            return (y, x)
    return (-1, -1)  # No guard


def turn(heading: tuple[int]) -> tuple[int]:
    mat = [(0, 1), (-1, 0)]
    return tuple([sumprod(col, heading) for col in mat])


def step(pos: tuple[int], heading: tuple[int]) -> tuple[int]:
    return tuple(map(add, pos, heading))


def is_blocked(world: list[list[str]], guard: tuple[int], heading: tuple[int]) -> bool:
    pos = step(guard, heading)
    try:
        return world[pos[0]][pos[1]] == "#"
    except IndexError:
        return False


def cast_ray(
    world: list[list[int]], start: tuple[int], heading: tuple[int]
) -> list[tuple[int]]:
    pos = step(start, heading)
    ray = []
    try:
        while world[pos[0]][pos[1]] != "#":
            ray.append(pos)
            pos = step(pos, heading)
    except IndexError:
        # Left the world
        ...
    return ray


def part_one(input: str) -> int:
    world = parse_input(input)
    guard = find_guard(world)
    heading = (-1, 0)
    while (
        guard[0] >= 0
        and guard[0] < len(world)
        and guard[1] >= 0
        and guard[1] < len(world[guard[0]])
    ):
        while is_blocked(world, guard, heading):
            heading = turn(heading)
        world[guard[0]] = f"{world[guard[0]][:guard[1]]}X{world[guard[0]][guard[1]+1:]}"
        guard = tuple(map(add, guard, heading))
    return sum([line.count("X") for line in world])


def part_two(input: str) -> int:
    world = parse_input(input)
    guard = find_guard(world)
    heading = (-1, 0)
    path = {}
    options = 0
    while (
        guard[0] >= 0
        and guard[0] < len(world)
        and guard[1] >= 0
        and guard[1] < len(world[guard[0]])
    ):
        path.setdefault(guard, []).append(heading)
        turned = turn(heading)
        if turned in path.get(guard, []) or turned in [
            d
            for p in set(cast_ray(world, guard, turned)).intersection(set(path.keys()))
            for d in path[p]
        ]:
            # Crossing previous path and turning would cause us to retrace our steps
            # or turning would lead us back into our previous path
            options += 1
        while is_blocked(world, guard, heading):
            heading = turned
        world[guard[0]] = f"{world[guard[0]][:guard[1]]}X{world[guard[0]][guard[1]+1:]}"
        guard = tuple(map(add, guard, heading))
    return options


if __name__ == "__main__":
    input = Path("input").read_text("utf-8")
    print(part_one(input))
    print(part_two(input))
 
 

Fermented with black cardamom and garlic (which I'm just noticing I forgot to put on the label 🤷) and puréed with mango and pear.
Added a little rice vinegar and salt to balance the fruit.
It's a little spicier than Sriracha, but not at all unpleasant. Nicely sweet and spicy. You can taste it with a spoon without regretting it.

 
 

I'm trying to get networkd to connect to a wireguard endpoint, specifically ProtonVPN, in case it matters. I just can't get it to connect. Has anyone had success with that? Specifically without using wg-quick.

 

Auf der Tastatur sitzen drückt Knöpfe. Knöpfe gedrückt halten macht warm. Happy Kitty.

 
 

Update since mid November. Finished the central panel of the cardigan. Started on the edge panel. 24 rows down, 488 to go.

 

Probably even more relevant than it was back then.

view more: next ›