2022 in python #4

Open
aey wants to merge 13 commits from 2022-python into main
Owner

Denna PR löser pussel från 2022 som uppvärmning för AOC2025. Ursprungliga pusslen gav 19 stjärnor med Elixir.

Denna PR löser pussel från 2022 som uppvärmning för AOC2025. Ursprungliga pusslen gav 19 stjärnor med Elixir.
aey added 5 commits 2025-11-23 17:51:31 +00:00
aey force-pushed 2022-python from 4ce2c59104 to c24d74892a 2025-11-23 17:56:48 +00:00 Compare
aey added 1 commit 2025-11-23 18:17:45 +00:00
aey added 1 commit 2025-11-23 22:39:58 +00:00
aey force-pushed 2022-python from 68b10a3a73 to 4dfb12e246 2025-11-23 22:52:05 +00:00 Compare
aey added 1 commit 2025-11-27 18:09:46 +00:00
aey added 2 commits 2025-11-27 23:26:07 +00:00
Pt 1 was just head and tail. For pt 2 I rewrote the
code to instead build the rope (snake) from head to
tail by always moving the head first and traverse
the body of the snake.

Yes, I think of it as a body of a snake - not knots
on a rope. Child hood memories are to damn colorful
:)

For reference, this is my visually debugging code:

def dbg(seen, snake):
    print(snake)
    for r in range(-4, 1):
        print("".join([v(r, c, snake) for c in range(0, 7)]))
    print("")

def v(r, c, snake):
    if (r,c) == snake[0]:
        return "H"
    for i, n in enumerate(snake[1:-1], start=1):
        if (r,c) == n:
            return str(i)
    if (r,c) == snake[-1]:
        return "T"
    if (r,c) == (0,0):
        return "s"
    return "."
Not pretty, but it works :)
aey force-pushed 2022-python from abc28306b3 to f610c96257 2025-11-27 23:31:06 +00:00 Compare
aey added 1 commit 2025-11-29 11:43:29 +00:00
This is how far I got the Dec 2022 run in Elixir.

Had no idea what so ever for pt 2, so I had to
solve it by the solutions thread in the subreddit.

At first, I wondered if circular values would be the
case. It was not.

Apparently, modular arithmetics are what I lack
knowledge about.

Not entirely sure what to call the operator, it is
either a greatest common divisor or a least common
nominator.

What it actually does is to reduce the numbers by
modulo for pt 2, which will keep them low and faster
to compute.

My math is rusty.
aey added 1 commit 2025-11-30 18:11:47 +00:00
BFS, baby.

2 things got me.

 * S position was not (0,0) in the puzzle input. Such embarrasment to
   loose time over something so stupid.
 * I asumed the elevation was fixed to to increase AND DECREASE by 1.

From the problem description:

> To avoid needing to get out your climbing gear, the elevation of the
> destination square can be at most one higher than the elevation of
> your current square; that is, if your current elevation is m, you
> could step to elevation n, but not to elevation o. _(This also means
> that the elevation of the destination square can be much lower than
> the elevation of your current square.)_

This means elevation only can _increase_ by one,
but _decrease_ with more.

So my wrong code:

0 <= abs(n - e) <= 1

got fixed with:

n - e <= 1

For pt 2, I reused the loop to find S to collect all "a" positions,
and looped them as starting points. Execution time is not the best,
but it works.
aey force-pushed 2022-python from a8cf7bf5e7 to 92df810943 2025-11-30 18:17:22 +00:00 Compare
This pull request can be merged automatically.
You are not authorized to merge this pull request.
View command line instructions

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin 2022-python:2022-python
git checkout 2022-python

Merge

Merge the changes and update on Forgejo.

Warning: The "Autodetect manual merge" setting is not enabled for this repository, you will have to mark this pull request as manually merged afterwards.

git checkout main
git merge --no-ff 2022-python
git checkout 2022-python
git rebase main
git checkout main
git merge --ff-only 2022-python
git checkout 2022-python
git rebase main
git checkout main
git merge --no-ff 2022-python
git checkout main
git merge --squash 2022-python
git checkout main
git merge --ff-only 2022-python
git checkout main
git merge 2022-python
git push origin main
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: aey/advent-of-code#4
No description provided.