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)
Oppgave 1 for luke 7 går ut på å finne ut om det er mulig å komme frem til et tall ved hjelp av å enten multiplisere eller addere en rekke tall. Eksempelvis 190, 10 og 19. Hvor 10 og 19 skal bli 190. Her vil 10 + 19 ikke gi riktig, men ettersom 10 * 19 = 190 vil dette være mulig. Vi trenger kun å vite om en av metodene fungerer. Jeg valgte å opprette en metode som ganske greit sjekker om det er mulig å komme frem til tallet. Metoden tar tall på index 0 og index 1 og sjekker om det er mulig å komme frem til riktig svar gjennom + eller * rekursivt. Ettersom jeg gjorde en del endringer etter å ha løst oppgave 1 og 2 vil jeg vise koden for begge oppgavene samlet for denne luken. Vi sender inn en boolean variabel for om vi er på oppgave 2 eller oppgave 1. True betyr oppgave 2, False betyr oppgave 1. Dette kommer av at oppgave 2 legger ved en tredje metode for å sjekke om det er mulig å komme frem til tallet ved slå tallene sammen. Eksempelvis 12 og 345 med || blir 12345. Ferdig metode ser da slik ut:
private static boolean valid(long target, ArrayList<Long> numbers, boolean concat) {
if (numbers.size() == 1) return numbers.getFirst() == target;
Long a = numbers.getFirst();
Long b = numbers.get(1);
if (valid(target, newList(a + b, numbers), concat)) return true;
if (valid(target, newList(a * b, numbers), concat)) return true;
return concat && valid(target, newList(Long.parseLong("" + a + b), numbers), true);
}
private static ArrayList<Long> newList(Long combined, ArrayList<Long> numbers) {
ArrayList<Long> result = new ArrayList<>(numbers);
result.removeFirst();
result.set(0, combined);
return result;
}