Advent of Code 5: „Binary Boarding” – Lösungsaustausch

Das Advent of Code-Puzzle „Binary Boarding“ für heute ist ab jetzt verfügbar!

In diesem Thread könnt ihr eure Lösungen posten, oder euch über das Puzzle austauschen.
Mit dem Code 1131555-15717edc könnt ihr außerdem unserem privaten Leaderboard beitreten.

Quellcode bitte in dieser Syntax posten („python“ durch die verwendete Sprache ersetzen):

```python
print("hello world")
```

Teil 1 der Aufgabe ist erfolgreich gelöst. Die höchste, vorkommende SitzID habe ich somit in der Tasche.

Bei Teil 2 bleiben 11 Elemente (Sitze) übrig, nachdem ich alle Reihen aus Front und Back rausgeworfen habe, zu denen es keinen Boardingpass gibt. Davon sind 7 mit höherer ID als die ID aus Teil 1. Bei den verbleibenden 4 sind nur 3 Stück in Folge. Da die Aufgabenstellung sagt, dass -1 und +1 auch auf meiner Liste stehen, muss ich den Sitz dazwischen haben. Allerdings scheint das nicht zu stimmen.

Das Hinweisvideo zeigt, dass ich wohl den ersten verfügbaren Platz einnehme, aber auch das stimmt wohl nicht (zumindest nicht meine erste SitzID auf der Liste).

Irgendeinen Tipp, wo ich ansetzen sollte? Denn prinzipiell habe ich ein eindeutiges Ergebnis erhalten…

1 „Gefällt mir“

Ach. Blödes Missverständnis meinerseits.

“your list” von “the seats with IDs +1 and -1 from yours will be in your list.” bezieht sich auf den “puzzle input” - damit hätte ich mir das Entfernen der vorderen und hinteren Sitzreihen auch sparen können, wenn mein Sitz eben keine freien Plätze neben sich hat.

Problem erkannt, gelöst und Stern eingesammelt.

1 „Gefällt mir“

Meine Lösung mit Python:

#!/usr/bin/env python3


def main():
    seats = parse_input("05-input.txt")
    highest = highest_seat(seats)
    print(f"The highest seat id is {highest}.")
    free = free_seat(seats)
    print(f"The free seat has the id {free}.")


def highest_seat(seats: tuple[str]):
    seat_ids = map(calc_seat_id, seats)
    return max(seat_ids)


def free_seat(seats: tuple[str]):
    seat_ids = sorted(map(calc_seat_id, seats))
    for i in range(0, len(seat_ids) - 1):
        if seat_ids[i + 1] > seat_ids[i] + 1:
            return seat_ids[i] + 1
    return None


def parse_input(filename: str) -> tuple[dict]:
    seats = []
    with open(filename, "r") as file:
        for line in file:
            seats.append((line[:7], line[7:]))
    return tuple(seats)


def calc_seat_id(seat: tuple[str]):
    row = int(seat[0].replace("F", "0").replace("B", "1"), base=2)
    col = int(seat[1].replace("L", "0").replace("R", "1"), base=2)
    seat_id = row * 8 + col
    return seat_id


if __name__ == "__main__":
    main()

Cool, dass du mitmachst, magst du deine Lösung noch posten? Einfach um Einblick in verschiedene Lösungsstrategien zu bekommen. :slight_smile:

Wenn du willst kannst du übrigens auch dem Private Leaderboard beitreten, so für die Motivation ist das ganz nett. Dazu einfach 1131555-15717edc auf der Seite dafür eingeben.