Chais

joined 2 years ago
[–] Chais@sh.itjust.works 3 points 7 hours ago

Yes, the hero names victims association will change the balance of power 🤣

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

Sarcasm doesn't transport well in written form 🤷

[–] Chais@sh.itjust.works 2 points 16 hours ago

Esst lieber die reichen Kinder, die sind nicht so zäh.

[–] Chais@sh.itjust.works 3 points 18 hours ago (3 children)

You're saying the problem doesn't exist? 😉

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

What's that, coming over the hill?

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

Just not for it.

[–] Chais@sh.itjust.works 2 points 2 days ago (4 children)

But isn't it automatically once youth flip it?

[–] Chais@sh.itjust.works 23 points 4 days ago (1 children)

Or stop overfeeding your cats.

[–] Chais@sh.itjust.works 3 points 4 days ago

Nushell is awesome. Passing structured data instead of strings makes mangling it so much easier. No more repeated string parsing.
My only gripe is that the devs sometimes make the syntax different from virtually every other shell only for the sake of being different.
It's still my daily driver.

[–] Chais@sh.itjust.works 16 points 4 days ago (1 children)

I hope they're anti-anxiety pills.

[–] Chais@sh.itjust.works 2 points 5 days ago

The kicker is, everything you mentioned is intended behavior.

  • animals wander around (maybe implemented just to make things more lively)
  • creatures get splattered with whatever liquids are splashing around (perhaps initially implemented to have dwarfs get splattered with blood on a kill or to have things gradually get wet close to a waterfall)
  • animals clean themselves, licking off whatever dirt there is

All these mechanics just naturally interact, by virtue of being implemented in a generic way, which allows for this amazing emergent behavior.
IIRC the bug was that the amount of booze ingested by the cats during cleaning wasn't scaled correctly to how much splatter they received or should've. Either way they ended up with excessive amounts of alcohol and overdosed immediately.

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

Why would he? It's just a name to him, without a meaning.

 

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 1 year ago* (last edited 1 year 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.

 

Looking for someone to take over our lease for a 3 1/2 apartment in Petite-Patrie (H2S) starting February 1st 2024.
Lease goes until 31st of October 2024 with option of renewal.
Monthly rent is $1665 including hot water and parking behind the house (electric bill is extra).

The apartment was completely renovated in 2018 with new isolation, windows and doors. It is on the ground floor, very quiet and in walking distance to metro stations (Fabre and Beaubien), supermarkets, cafés and shops.
The bedroom and office both have built-in storage closets. You have full access to the garden in the back and can use it as you wish. Cats are no problem but you will have to check for other pets.
Appliances are NOT included in the lease and we bought them new in 2018 (Stove, fridge with freezer drawer, dishwasher, washing machine and dryer). All are good quality appliances (Whirlpool, Maytag) that work great and we'd prefer them taken over from us (price is negotiable).
All our furniture is also up for sale.

Please send me a message if interested.

https://media.kijiji.ca/api/v1/ca-prod-fsbo-ads/images/b1/b15abf7d-2828-4e00-ab1a-c3c5639e3260?rule=kijijica-640-webp
https://media.kijiji.ca/api/v1/ca-prod-fsbo-ads/images/76/760166c5-2421-4693-90fa-63658fff07cc?rule=kijijica-640-webp
https://media.kijiji.ca/api/v1/ca-prod-fsbo-ads/images/82/826354e8-a2e8-4246-8cb8-d831eeb1ef9f?rule=kijijica-640-webp
https://media.kijiji.ca/api/v1/ca-prod-fsbo-ads/images/e6/e6110cdd-c164-4e58-a83d-8f980e23ca5e?rule=kijijica-640-webp
https://media.kijiji.ca/api/v1/ca-prod-fsbo-ads/images/6f/6fb34ec2-cbc8-47da-9859-beaa414f3f6c?rule=kijijica-640-webp
https://media.kijiji.ca/api/v1/ca-prod-fsbo-ads/images/3e/3ef5d1ab-7c43-4edc-bcc8-afe22b2c4ce8?rule=kijijica-640-webp
https://media.kijiji.ca/api/v1/ca-prod-fsbo-ads/images/24/24b6ccd4-1159-48a8-a456-e5530561670c?rule=kijijica-640-webp
https://media.kijiji.ca/api/v1/ca-prod-fsbo-ads/images/7d/7d683809-d303-43fc-a78b-3e3677731aa2?rule=kijijica-640-webp
https://media.kijiji.ca/api/v1/ca-prod-fsbo-ads/images/9f/9f9c5d9c-fcc3-43f5-9395-350f4ff76015?rule=kijijica-640-webp
https://media.kijiji.ca/api/v1/ca-prod-fsbo-ads/images/6c/6cd0de76-e63b-4a7c-8e75-54b0d0dd6b5e?rule=kijijica-640-webp

 

Misread the pattern and now I get to redo 16 repeats of 16 rows of cabling plus some moss stitch.
On the plus side I can fix the mistakes I made. And hope I don't make more…

view more: next ›