zur Übersicht

Advent of Code

Lesedauer ca. 1 Minute
19.12.2023

Bereits zum zweiten Mal nehmen wir dieses Jahr an Advent of Code teil – der spielerischen Programmierherausforderung in der Weihnachtszeit. 2015 von Eric Wastl ins Leben gerufen, erfreut sich das Online-Rätsel seither großer Beliebtheit in der Entwickelnden-Community.

Von 01. bis 25. Dezember werden täglich zwei Programmieraufgaben auf der Website veröffentlicht. Diese können von den Teilnehmenden in einer Vielzahl von Programmiersprachen gelöst werden und bringen Punkte. Alle Teilnehmenden nehmen automatisch am Global Leaderboard, der Gesamt-Rangliste, teil. Dabei zählt nicht nur die Anzahl der gelösten Rätsel, sondern auch die Schnelligkeit. Zudem bietet Advent of Code auch die Möglichkeit, ein Private Leaderboard anzulegen. Hierbei handelt es sich um eine separate Rangliste, die von einer Person erstellt wird und nur für Mitglieder des Leaderboard sichtbar ist. Dieser Modus eignet sich vor allem, um sich untereinander im Unternehmen zu messen.

Bis zum 25. Dezember sind es nur noch wenige Tage, was den ersten Platz in unserem Leaderboard betrifft, ist jedoch nichts sicher. Mehr als der Wettstreit – für den übrigens auch ein kleiner Preis von unserer Geschäftsführung winkt – steht für viele unserer Mitarbeitenden der spielerische Gedanke, sich mit einer neuen Programmiersprache auseinanderzusetzen, im Vordergrund. So hat einer unserer Mitarbeitenden die Aufgabe des zweiten Tages mit der Programmiersprache Rust gelöst. Im ersten Teil der Aufgabe galt es herauszufinden, welche der Spiele überhaupt möglich sind.

Lösung:

pub fn solve(input: &str) -> Result<String, String> {
    let games = parse_games(input);

    let possible_games: Vec<&Game> = games
        .iter()
        .filter(|&game| {
            game.rounds.iter().all(|round| {
                round.cube_draws.iter().all(|draw| match draw.color {
                    Color::Red => draw.cube_count <= RED_CUBES,
                    Color::Green => draw.cube_count <= GREEN_CUBES,
                    Color::Blue => draw.cube_count <= BLUE_CUBES,
                })
            })
        })
        .collect();

    let game_id_sum: u32 = possible_games.iter().map(|&game| game.id as u32).sum();
    Ok(game_id_sum.to_string())
}

Dabei werden Filter genutzt und so bleiben nur jene übrig, die den Bedingungen auch entsprechen.

Advent of Code bietet eine gute Gelegenheit, sich einmal auszuprobieren und das eigene Skillset zu erweitern. Auch Menschen, die nur über eine rudimentäre Programmier-Erfahrung verfügen, ermöglicht der Wettbewerb einen guten Einstiegspunkt. Übrigens lohnt sich auch ein Blick auf die verlinkten Websites der unterschiedlichen Sponsoren. Diese reichen von kleinen Easter Eggs mit Achievements bis hin zu Seiten auf klingonisch.