19. des. 2024 - 2 minutter å lese

Advent of Code 2024 - Luke 19

Advent of Code 2024 - Luke 19

Full kode finner du her.

Main metode

For alle oppgavene i 2024 bruker jeg Java, og dette vil være metoden jeg bruker for å hente input for de ulike oppgavene. Input blir lagret i en txt fil og hentes via denne metoden.

Oppgave 1 (og 2)

Luke 19! Under 1 uke igjen. Oppgaven for luke 19 er å finne hvilke håndkler kan kombineres for å lage et spesifikt mønster, gitt en liste med håndkler og mønsteret vi ønsker å lage. Håndkler er representert av en streng hvor fargen r betyr red, g betyr green, u betyr blue, b betyr black og w betyr white. Det samme gjelder mønsteret. Det første jeg tenker når jeg ser oppgaven er å kjøre en rekursiv metode som sjekker om vi kan lage mønsteret ved å bruke et av håndklene. Altså prøver vi først et håndkle som matcher starten av mønsteret, og fortsetter sånn til vi får et svar. Svaret vi ønsker å få er antallet mønstre som går ann å lage. For oppgave 2 ønsker vi alle mulige kombinasjoner som gir et godkjent mønster. Derfor returnerer metoden antallet, og vi legger til en på oppgave 1 dersom tallet er høyere enn 0 og ellers legger vi til det som bir returnert for oppgave 2. Metoden ble slik:

public static long solve(String s, Set<String> combos){
    if(!impossible.containsKey(s)) {
        if (s.isEmpty()) return 1L;
        long result = 0;
        for (String c : combos) {
            if (s.startsWith(c)) result += solve(s.substring(c.length()), combos);
        }
        impossible.put(s, result);
    }

    return impossible.get(s);
}