package main import ( "AOC2022/helper" "fmt" "os" ) func main() { args := os.Args[1:] rucksacks := helper.ReadTextFile(args[0]) part1(rucksacks) part2(rucksacks) } func part2(rucksacks []string) { sum := int32(0) for i := 0; i < len(rucksacks); i += 3 { repeatedItems := findRepeatedItems(rucksackStringToItemprioList(rucksacks[i]), rucksackStringToItemprioList(rucksacks[i+1])) repeatedItems = findRepeatedItems(repeatedItems, rucksackStringToItemprioList(rucksacks[i+2])) for _, repeatedItem := range repeatedItems { sum += repeatedItem } } fmt.Println(sum) } func part1(rucksacks []string) { sum := int32(0) for _, rucksack := range rucksacks { repeatedElemnts := findRepeatedItems(rucksackStringToItemprioList(rucksack[:len(rucksack)/2]), rucksackStringToItemprioList(rucksack[len(rucksack)/2:])) for _, repeatedElemnt := range repeatedElemnts { sum += repeatedElemnt } } fmt.Println(sum) } func findRepeatedItems(itemgroup1, itemgroup2 []int32) []int32 { elementsCompartment1 := map[int32]bool{} repeatedElemnts := map[int32]bool{} for _, item := range itemgroup1 { elementsCompartment1[item] = true } for _, item := range itemgroup2 { if elementsCompartment1[item] { repeatedElemnts[item] = true } } v := make([]int32, 0, len(repeatedElemnts)) for key, _ := range repeatedElemnts { v = append(v, key) } return v } func rucksackStringToItemprioList(rucksack string) (itemprioList []int32) { for _, item := range rucksack { if item > 90 { itemprioList = append(itemprioList, item-96) } else { itemprioList = append(itemprioList, item-38) } } return }